diff options
author | Manish Pandey <manish.pandey2@arm.com> | 2023-03-28 12:27:37 +0200 |
---|---|---|
committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2023-03-28 12:27:37 +0200 |
commit | 92e93253e48fdddc0676af596b0522253d19271e (patch) | |
tree | 9701d3e434f6b285f1be8e26621793072be4eb2f /include/lib | |
parent | e24e42c605371c7ead8ef9ba4c84543a0c1a84ff (diff) | |
parent | e528bbec74af359714203c7f8d356074733ea9cd (diff) | |
download | arm-trusted-firmware-92e93253e48fdddc0676af596b0522253d19271e.tar.gz |
Merge changes from topic "psci-osi" into integration
* changes:
feat(sc7280): add support for PSCI_OS_INIT_MODE
feat(fvp): enable support for PSCI OS-initiated mode
feat(psci): update PSCI_FEATURES
feat(psci): add support for OS-initiated mode
feat(psci): add support for PSCI_SET_SUSPEND_MODE
build(psci): add build option for OS-initiated mode
docs(psci): add design proposal for OS-initiated mode
Diffstat (limited to 'include/lib')
-rw-r--r-- | include/lib/psci/psci.h | 31 | ||||
-rw-r--r-- | include/lib/psci/psci_lib.h | 1 |
2 files changed, 30 insertions, 2 deletions
diff --git a/include/lib/psci/psci.h b/include/lib/psci/psci.h index b56e98b5f..6d27b7b61 100644 --- a/include/lib/psci/psci.h +++ b/include/lib/psci/psci.h @@ -59,6 +59,7 @@ #define PSCI_NODE_HW_STATE_AARCH64 U(0xc400000d) #define PSCI_SYSTEM_SUSPEND_AARCH32 U(0x8400000E) #define PSCI_SYSTEM_SUSPEND_AARCH64 U(0xc400000E) +#define PSCI_SET_SUSPEND_MODE U(0x8400000F) #define PSCI_STAT_RESIDENCY_AARCH32 U(0x84000010) #define PSCI_STAT_RESIDENCY_AARCH64 U(0xc4000010) #define PSCI_STAT_COUNT_AARCH32 U(0x84000011) @@ -73,9 +74,17 @@ * Number of PSCI calls (above) implemented */ #if ENABLE_PSCI_STAT -#define PSCI_NUM_CALLS U(22) +#if PSCI_OS_INIT_MODE +#define PSCI_NUM_CALLS U(30) #else -#define PSCI_NUM_CALLS U(18) +#define PSCI_NUM_CALLS U(29) +#endif +#else +#if PSCI_OS_INIT_MODE +#define PSCI_NUM_CALLS U(26) +#else +#define PSCI_NUM_CALLS U(25) +#endif #endif /* The macros below are used to identify PSCI calls from the SMC function ID */ @@ -134,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 @@ -268,6 +281,13 @@ typedef struct psci_power_state { * for the CPU. */ plat_local_state_t pwr_domain_state[PLAT_MAX_PWR_LVL + U(1)]; +#if PSCI_OS_INIT_MODE + /* + * The highest power level at which the current CPU is the last running + * CPU. + */ + unsigned int last_at_pwrlvl; +#endif } psci_power_state_t; /******************************************************************************* @@ -299,7 +319,11 @@ typedef struct plat_psci_ops { void (*pwr_domain_off)(const psci_power_state_t *target_state); void (*pwr_domain_suspend_pwrdown_early)( const psci_power_state_t *target_state); +#if PSCI_OS_INIT_MODE + int (*pwr_domain_suspend)(const psci_power_state_t *target_state); +#else void (*pwr_domain_suspend)(const psci_power_state_t *target_state); +#endif void (*pwr_domain_on_finish)(const psci_power_state_t *target_state); void (*pwr_domain_on_finish_late)( const psci_power_state_t *target_state); @@ -347,6 +371,9 @@ u_register_t psci_migrate_info_up_cpu(void); int psci_node_hw_state(u_register_t target_cpu, unsigned int power_level); int psci_features(unsigned int psci_fid); +#if PSCI_OS_INIT_MODE +int psci_set_suspend_mode(unsigned int mode); +#endif void __dead2 psci_power_down_wfi(void); void psci_arch_setup(void); diff --git a/include/lib/psci/psci_lib.h b/include/lib/psci/psci_lib.h index 3edc50b6c..4b244ec33 100644 --- a/include/lib/psci/psci_lib.h +++ b/include/lib/psci/psci_lib.h @@ -92,6 +92,7 @@ void psci_prepare_next_non_secure_ctx( int psci_stop_other_cores(unsigned int wait_ms, void (*stop_func)(u_register_t mpidr)); bool psci_is_last_on_cpu_safe(void); +bool psci_are_all_cpus_on_safe(void); void psci_pwrdown_cpu(unsigned int power_level); #endif /* __ASSEMBLER__ */ |