diff options
Diffstat (limited to 'plat')
-rw-r--r-- | plat/imx/common/imx8_psci.c | 12 | ||||
-rw-r--r-- | plat/imx/common/include/plat_imx8.h | 1 | ||||
-rw-r--r-- | plat/imx/imx8qx/imx8qx_psci.c | 1 | ||||
-rw-r--r-- | plat/imx/imx8qx/include/platform_def.h | 1 |
4 files changed, 11 insertions, 4 deletions
diff --git a/plat/imx/common/imx8_psci.c b/plat/imx/common/imx8_psci.c index 97832b03..5b53e62f 100644 --- a/plat/imx/common/imx8_psci.c +++ b/plat/imx/common/imx8_psci.c @@ -80,9 +80,13 @@ void imx_get_sys_suspend_power_state(psci_power_state_t *req_state) { unsigned int i; - /* CPU & cluster off, system in retention */ - for (i = MPIDR_AFFLVL0; i < PLAT_MAX_PWR_LVL; i++) - req_state->pwr_domain_state[i] = PLAT_MAX_OFF_STATE; - req_state->pwr_domain_state[PLAT_MAX_PWR_LVL] = PLAT_MAX_RET_STATE; + for (i = IMX_PWR_LVL0; i <= PLAT_MAX_PWR_LVL; i++) + req_state->pwr_domain_state[i] = PLAT_MAX_RET_STATE; +} + +void __dead2 imx_pwr_domain_pwr_down_wfi(const psci_power_state_t *target_state) +{ + while (1) + wfi(); } diff --git a/plat/imx/common/include/plat_imx8.h b/plat/imx/common/include/plat_imx8.h index 08066a84..253bf229 100644 --- a/plat/imx/common/include/plat_imx8.h +++ b/plat/imx/common/include/plat_imx8.h @@ -30,6 +30,7 @@ int imx_validate_power_state(unsigned int power_state, psci_power_state_t *req_state); void imx_get_sys_suspend_power_state(psci_power_state_t *req_state); bool imx_is_wakeup_src_irqsteer(void); +void __dead2 imx_pwr_domain_pwr_down_wfi(const psci_power_state_t *target_state); void plat_gic_save(unsigned int proc_num, struct plat_gic_ctx *ctx); void plat_gic_restore(unsigned int proc_num, struct plat_gic_ctx *ctx); diff --git a/plat/imx/imx8qx/imx8qx_psci.c b/plat/imx/imx8qx/imx8qx_psci.c index 1bca1010..24a46f7a 100644 --- a/plat/imx/imx8qx/imx8qx_psci.c +++ b/plat/imx/imx8qx/imx8qx_psci.c @@ -225,6 +225,7 @@ static const plat_psci_ops_t imx_plat_psci_ops = { .pwr_domain_suspend_finish = imx_domain_suspend_finish, .get_sys_suspend_power_state = imx_get_sys_suspend_power_state, .validate_power_state = imx_validate_power_state, + .pwr_domain_pwr_down_wfi = imx_pwr_domain_pwr_down_wfi, }; int plat_setup_psci_ops(uintptr_t sec_entrypoint, diff --git a/plat/imx/imx8qx/include/platform_def.h b/plat/imx/imx8qx/include/platform_def.h index 626f2e25..40f01464 100644 --- a/plat/imx/imx8qx/include/platform_def.h +++ b/plat/imx/imx8qx/include/platform_def.h @@ -22,6 +22,7 @@ #define PLATFORM_CLUSTER0_CORE_COUNT 4 #define PLATFORM_CLUSTER1_CORE_COUNT 0 +#define IMX_PWR_LVL0 MPIDR_AFFLVL0 #define PWR_DOMAIN_AT_MAX_LVL U(1) #define PLAT_MAX_PWR_LVL U(2) #define PLAT_MAX_OFF_STATE U(2) |