From a1d5ac6a5aa5d9d18a481de20d272f64a71391f7 Mon Sep 17 00:00:00 2001 From: Samuel Holland Date: Wed, 28 Apr 2021 17:52:02 -0500 Subject: [PATCH] feat(psci): require validate_power_state to expose CPU_SUSPEND psci_cpu_suspend unconditionally calls psci_validate_power_state, which asserts that the platform implements ops->validate_power_state. To avoid a failure at runtime, do not expose CPU_SUSPEND unless that callback is implemented. This also allows a platform to provide SYSTEM_SUSPEND without providing CPU_SUSPEND. Signed-off-by: Samuel Holland Change-Id: I5dafb7845f482ab3af03a9de562def41dd70189e --- lib/psci/psci_setup.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/psci/psci_setup.c b/lib/psci/psci_setup.c index 9c37d63f2..3cb4f7e43 100644 --- a/lib/psci/psci_setup.c +++ b/lib/psci/psci_setup.c @@ -250,7 +250,8 @@ int __init psci_setup(const psci_lib_args_t *lib_args) psci_caps |= define_psci_cap(PSCI_CPU_ON_AARCH64); if ((psci_plat_pm_ops->pwr_domain_suspend != NULL) && (psci_plat_pm_ops->pwr_domain_suspend_finish != NULL)) { - psci_caps |= define_psci_cap(PSCI_CPU_SUSPEND_AARCH64); + if (psci_plat_pm_ops->validate_power_state != NULL) + psci_caps |= define_psci_cap(PSCI_CPU_SUSPEND_AARCH64); if (psci_plat_pm_ops->get_sys_suspend_power_state != NULL) psci_caps |= define_psci_cap(PSCI_SYSTEM_SUSPEND_AARCH64); }