From a4065abdfb28147bede85d1dac983f01ff6a0247 Mon Sep 17 00:00:00 2001 From: ldts Date: Thu, 11 Oct 2018 08:40:32 +0200 Subject: [PATCH] psci: platform control of SYSTEM_SUSPEND entry Some platforms can only resume from system suspend from the boot CPU, hence they should only enter that state from that same core. The following commit presents an interface that allows the platform to reject system suspend entry near its very last stage (last CPU). --- lib/psci/psci_main.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/psci/psci_main.c b/lib/psci/psci_main.c index fd822bcfd..b4a25fb0a 100644 --- a/lib/psci/psci_main.c +++ b/lib/psci/psci_main.c @@ -167,8 +167,14 @@ int psci_system_suspend(uintptr_t entrypoint, u_register_t context_id) /* Query the psci_power_state for system suspend */ psci_query_sys_suspend_pwrstate(&state_info); + /* + * Check if platform allows suspend to Highest power level + * (System level) + */ + if (psci_find_target_suspend_lvl(&state_info) < PLAT_MAX_PWR_LVL) + return PSCI_E_DENIED; + /* Ensure that the psci_power_state makes sense */ - assert(psci_find_target_suspend_lvl(&state_info) == PLAT_MAX_PWR_LVL); assert(psci_validate_suspend_req(&state_info, PSTATE_TYPE_POWERDOWN) == PSCI_E_SUCCESS); assert(is_local_state_off(