It is necessary to implement psci_features callback to report supported features for linux kernel to decide whether to proceed psci calls, for example, linux deep sleep mode is ONLY entered when psci_features returns TRUE when linux kernel checks whether system suspend is supported by calling psci_features, otherwise, s2idle will be entered instead.
Signed-off-by: Anson Huang <anson.hu...@nxp.com> --- no change since V1. arch/arm/mach-imx/mx7/psci.S | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/arch/arm/mach-imx/mx7/psci.S b/arch/arm/mach-imx/mx7/psci.S index cbe6781..694cef7 100644 --- a/arch/arm/mach-imx/mx7/psci.S +++ b/arch/arm/mach-imx/mx7/psci.S @@ -23,6 +23,22 @@ .arch_extension sec +imx_psci_supported_table: + .word ARM_PSCI_0_2_FN_CPU_OFF + .word ARM_PSCI_RET_SUCCESS + .word ARM_PSCI_0_2_FN_CPU_ON + .word ARM_PSCI_RET_SUCCESS + .word ARM_PSCI_0_2_FN_AFFINITY_INFO + .word ARM_PSCI_RET_SUCCESS + .word ARM_PSCI_0_2_FN_SYSTEM_OFF + .word ARM_PSCI_RET_SUCCESS + .word ARM_PSCI_0_2_FN_SYSTEM_RESET + .word ARM_PSCI_RET_SUCCESS + .word ARM_PSCI_1_0_FN_SYSTEM_SUSPEND + .word ARM_PSCI_RET_SUCCESS + .word 0 + .word ARM_PSCI_RET_NI + .global ddrc_enter_self_refresh ddrc_enter_self_refresh: /* let DDR out of self-refresh */ @@ -112,6 +128,20 @@ v7_invalidate_l1: isb mov pc, lr +.globl psci_features +psci_features: + adr r2, imx_psci_supported_table +1: ldr r3, [r2] + cmp r3, #0 + beq out_psci_features + cmp r1, r3 + addne r2, r2, #8 + bne 1b + +out_psci_features: + ldr r0, [r2, #4] + bx lr + .globl psci_cpu_on psci_cpu_on: push {r4, r5, lr} -- 2.7.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot