aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Holland <samuel@sholland.org>2021-04-28 17:52:02 -0500
committerManish Pandey <manish.pandey2@arm.com>2021-10-15 14:13:54 +0200
commita1d5ac6a5aa5d9d18a481de20d272f64a71391f7 (patch)
treee59f1b6d0834f6e25d800a5736f3e31da28c2de2
parent02d36a92fc193869547b9d9af00f623974879fdd (diff)
downloadtrusted-firmware-a-a1d5ac6a5aa5d9d18a481de20d272f64a71391f7.tar.gz
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 <samuel@sholland.org> Change-Id: I5dafb7845f482ab3af03a9de562def41dd70189e
-rw-r--r--lib/psci/psci_setup.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/psci/psci_setup.c b/lib/psci/psci_setup.c
index 9c37d63f2a..3cb4f7e43e 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);
}