1 #include <kernel/thread.h> 2 #include <stdint.h> 3 4 #define PSCI_FN_BASE (0x84000000U) 5 #define PSCI_FN(n) (PSCI_FN_BASE + (n)) 6 7 #define PSCI_VERSION_0_2 (0x00000002) 8 #define PSCI_VERSION_1_0 (0x00010000) 9 #define PSCI_VERSION PSCI_FN(0) 10 #define PSCI_CPU_SUSPEND PSCI_FN(1) 11 #define PSCI_CPU_OFF PSCI_FN(2) 12 #define PSCI_CPU_ON PSCI_FN(3) 13 #define PSCI_AFFINITY_INFO PSCI_FN(4) 14 #define PSCI_MIGRATE PSCI_FN(5) 15 #define PSCI_MIGRATE_INFO_TYPE PSCI_FN(6) 16 #define PSCI_MIGRATE_INFO_UP_CPU PSCI_FN(7) 17 #define PSCI_SYSTEM_OFF PSCI_FN(8) 18 #define PSCI_SYSTEM_RESET PSCI_FN(9) 19 #define PSCI_PSCI_FEATURES PSCI_FN(10) 20 #define PSCI_CPU_FREEZE PSCI_FN(11) 21 #define PSCI_CPU_DEFAULT_SUSPEND PSCI_FN(12) 22 #define PSCI_NODE_HW_STATE PSCI_FN(13) 23 #define PSCI_SYSTEM_SUSPEND PSCI_FN(14) 24 #define PSCI_PSCI_SET_SUSPEND_MODE PSCI_FN(15) 25 #define PSCI_FN_STAT_RESIDENCY PSCI_FN(16) 26 #define PSCI_FN_STAT_COUNT PSCI_FN(17) 27 28 #define PSCI_NUM_CALLS 18 29 30 #define PSCI_AFFINITY_LEVEL_ON 0 31 #define PSCI_AFFINITY_LEVEL_OFF 1 32 #define PSCI_AFFINITY_LEVEL_ON_PENDING 2 33 34 #define PSCI_RET_SUCCESS (0) 35 #define PSCI_RET_NOT_SUPPORTED (-1) 36 #define PSCI_RET_INVALID_PARAMETERS (-2) 37 #define PSCI_RET_DENIED (-3) 38 #define PSCI_RET_ALREADY_ON (-4) 39 #define PSCI_RET_ON_PENDING (-5) 40 #define PSCI_RET_INTERNAL_FAILURE (-6) 41 #define PSCI_RET_NOT_PRESENT (-7) 42 #define PSCI_RET_DISABLED (-8) 43 #define PSCI_RET_INVALID_ADDRESS (-9) 44 45 uint32_t psci_version(void); 46 int psci_cpu_suspend(uint32_t power_state, uintptr_t entry, 47 uint32_t context_id); 48 int psci_cpu_off(void); 49 int psci_cpu_on(uint32_t cpu_id, uint32_t entry, uint32_t context_id); 50 int psci_affinity_info(uint32_t affinity, uint32_t lowest_affnity_level); 51 int psci_migrate(uint32_t cpu_id); 52 int psci_migrate_info_type(void); 53 int psci_migrate_info_up_cpu(void); 54 void psci_system_off(void); 55 void psci_system_reset(void); 56 int psci_features(uint32_t psci_fid); 57 int psci_node_hw_state(uint32_t cpu_id, uint32_t power_level); 58 int psci_stat_residency(uint32_t cpu_id, uint32_t power_state); 59 int psci_stat_count(uint32_t cpu_id, uint32_t power_state); 60 void tee_psci_handler(struct thread_smc_args *args); 61 62 void psci_armv7_cpu_off(void); 63