From 9a70e69e059863d7aec11883e6345b54058264e0 Mon Sep 17 00:00:00 2001 From: Wing Li Date: Wed, 14 Sep 2022 13:18:19 -0700 Subject: [PATCH] feat(psci): update PSCI_FEATURES This patch updates the PSCI_FEATURES handler to indicate support for OS-initiated mode per section 5.15.2 of the PSCI spec (DEN0022D.b) based on the value of `FF_SUPPORTS_OS_INIT_MODE`, which is conditionally enabled by the `PSCI_OS_INIT_MODE` build option. Change-Id: I5da8a989b53419ad2ab55b73ddeee6e882c25554 Signed-off-by: Wing Li --- include/lib/psci/psci.h | 4 ++++ lib/psci/psci_main.c | 12 ++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/include/lib/psci/psci.h b/include/lib/psci/psci.h index d4f367071..6d27b7b61 100644 --- a/include/lib/psci/psci.h +++ b/include/lib/psci/psci.h @@ -143,7 +143,11 @@ /* Features flags for CPU SUSPEND OS Initiated mode support. Bits [0:0] */ #define FF_MODE_SUPPORT_SHIFT U(0) +#if PSCI_OS_INIT_MODE #define FF_SUPPORTS_OS_INIT_MODE U(1) +#else +#define FF_SUPPORTS_OS_INIT_MODE U(0) +#endif /******************************************************************************* * PSCI version diff --git a/lib/psci/psci_main.c b/lib/psci/psci_main.c index fe12f06ba..276c3a59f 100644 --- a/lib/psci/psci_main.c +++ b/lib/psci/psci_main.c @@ -383,13 +383,9 @@ int psci_features(unsigned int psci_fid) /* Format the feature flags */ if ((psci_fid == PSCI_CPU_SUSPEND_AARCH32) || (psci_fid == PSCI_CPU_SUSPEND_AARCH64)) { - /* - * The trusted firmware does not support OS Initiated Mode. - */ unsigned int ret = ((FF_PSTATE << FF_PSTATE_SHIFT) | - (((FF_SUPPORTS_OS_INIT_MODE == 1U) ? 0U : 1U) - << FF_MODE_SUPPORT_SHIFT)); - return (int) ret; + (FF_SUPPORTS_OS_INIT_MODE << FF_MODE_SUPPORT_SHIFT)); + return (int)ret; } /* Return 0 for all other fid's */ @@ -571,6 +567,10 @@ u_register_t psci_smc_handler(uint32_t smc_fid, ret = psci_migrate_info_up_cpu(); break; + case PSCI_FEATURES: + ret = (u_register_t)psci_features(x1); + break; + case PSCI_NODE_HW_STATE_AARCH64: ret = (u_register_t)psci_node_hw_state( x1, (unsigned int) x2); -- 2.39.5