12441aaf0SEtienne Carriere /* SPDX-License-Identifier: BSD-2-Clause */ 22441aaf0SEtienne Carriere /* 32441aaf0SEtienne Carriere * Copyright (c) 2017-2023, Linaro Limited 42441aaf0SEtienne Carriere */ 5*62d8e0e8SEtienne Carriere #ifndef __SM_PSCI_H 6*62d8e0e8SEtienne Carriere #define __SM_PSCI_H 7*62d8e0e8SEtienne Carriere 8319556cdSPeng Fan #include <kernel/thread.h> 91b181fb2SPeng Fan #include <sm/sm.h> 10319556cdSPeng Fan #include <stdint.h> 11319556cdSPeng Fan 124a6784caSJens Wiklander #define PSCI_VERSION_0_2 U(0x00000002) 134a6784caSJens Wiklander #define PSCI_VERSION_1_0 U(0x00010000) 149daed40cSIgor Opaniuk #define PSCI_VERSION_1_1 U(0x00010001) 15a83bf6deSIgor Opaniuk #define PSCI_VERSION U(0x84000000) 16a83bf6deSIgor Opaniuk #define PSCI_CPU_SUSPEND U(0x84000001) 17a83bf6deSIgor Opaniuk #define PSCI_CPU_OFF U(0x84000002) 18a83bf6deSIgor Opaniuk #define PSCI_CPU_ON U(0x84000003) 194a6784caSJens Wiklander #define PSCI_CPU_ON_SMC64 (PSCI_CPU_ON | U(0x40000000)) 20a83bf6deSIgor Opaniuk #define PSCI_AFFINITY_INFO U(0x84000004) 21a83bf6deSIgor Opaniuk #define PSCI_MIGRATE U(0x84000005) 22a83bf6deSIgor Opaniuk #define PSCI_MIGRATE_INFO_TYPE U(0x84000006) 23a83bf6deSIgor Opaniuk #define PSCI_MIGRATE_INFO_UP_CPU U(0x84000007) 24a83bf6deSIgor Opaniuk #define PSCI_SYSTEM_OFF U(0x84000008) 25a83bf6deSIgor Opaniuk #define PSCI_SYSTEM_RESET U(0x84000009) 26a83bf6deSIgor Opaniuk #define PSCI_PSCI_FEATURES U(0x8400000a) 27a83bf6deSIgor Opaniuk #define PSCI_CPU_FREEZE U(0x8400000b) 28a83bf6deSIgor Opaniuk #define PSCI_CPU_DEFAULT_SUSPEND U(0x8400000c) 29a83bf6deSIgor Opaniuk #define PSCI_NODE_HW_STATE U(0x8400000d) 30a83bf6deSIgor Opaniuk #define PSCI_SYSTEM_SUSPEND U(0x8400000e) 31a83bf6deSIgor Opaniuk #define PSCI_PSCI_SET_SUSPEND_MODE U(0x8400000f) 32a83bf6deSIgor Opaniuk #define PSCI_FN_STAT_RESIDENCY U(0x84000010) 33a83bf6deSIgor Opaniuk #define PSCI_FN_STAT_COUNT U(0x84000011) 349daed40cSIgor Opaniuk #define PSCI_SYSTEM_RESET2 U(0x84000012) 359daed40cSIgor Opaniuk #define PSCI_MEM_PROTECT U(0x84000013) 369daed40cSIgor Opaniuk #define PSCI_MEM_PROTECT_CHECK_RANGE U(0x84000014) 37319556cdSPeng Fan 389daed40cSIgor Opaniuk #define PSCI_NUM_CALLS U(21) 39319556cdSPeng Fan 404a6784caSJens Wiklander #define PSCI_AFFINITY_LEVEL_ON U(0) 414a6784caSJens Wiklander #define PSCI_AFFINITY_LEVEL_OFF U(1) 424a6784caSJens Wiklander #define PSCI_AFFINITY_LEVEL_ON_PENDING U(2) 43319556cdSPeng Fan 444a6784caSJens Wiklander #define PSCI_POWER_STATE_ID_MASK U(0xffff) 454a6784caSJens Wiklander #define PSCI_POWER_STATE_ID_SHIFT U(0) 464a6784caSJens Wiklander #define PSCI_POWER_STATE_TYPE_SHIFT U(16) 47b3c4f4f5SPeng Fan #define PSCI_POWER_STATE_TYPE_MASK BIT32(PSCI_POWER_STATE_TYPE_SHIFT) 484a6784caSJens Wiklander #define PSCI_POWER_STATE_AFFL_SHIFT U(24) 49b3c4f4f5SPeng Fan #define PSCI_POWER_STATE_AFFL_MASK SHIFT_U32(0x3, \ 50b3c4f4f5SPeng Fan PSCI_POWER_STATE_AFFL_SHIFT) 51b3c4f4f5SPeng Fan 524a6784caSJens Wiklander #define PSCI_POWER_STATE_TYPE_STANDBY U(0) 534a6784caSJens Wiklander #define PSCI_POWER_STATE_TYPE_POWER_DOWN U(1) 54b3c4f4f5SPeng Fan 55319556cdSPeng Fan #define PSCI_RET_SUCCESS (0) 56319556cdSPeng Fan #define PSCI_RET_NOT_SUPPORTED (-1) 57319556cdSPeng Fan #define PSCI_RET_INVALID_PARAMETERS (-2) 58319556cdSPeng Fan #define PSCI_RET_DENIED (-3) 59319556cdSPeng Fan #define PSCI_RET_ALREADY_ON (-4) 60319556cdSPeng Fan #define PSCI_RET_ON_PENDING (-5) 61319556cdSPeng Fan #define PSCI_RET_INTERNAL_FAILURE (-6) 62319556cdSPeng Fan #define PSCI_RET_NOT_PRESENT (-7) 63319556cdSPeng Fan #define PSCI_RET_DISABLED (-8) 64319556cdSPeng Fan #define PSCI_RET_INVALID_ADDRESS (-9) 65319556cdSPeng Fan 66319556cdSPeng Fan uint32_t psci_version(void); 67319556cdSPeng Fan int psci_cpu_suspend(uint32_t power_state, uintptr_t entry, 681b181fb2SPeng Fan uint32_t context_id, struct sm_nsec_ctx *nsec); 69319556cdSPeng Fan int psci_cpu_off(void); 70319556cdSPeng Fan int psci_cpu_on(uint32_t cpu_id, uint32_t entry, uint32_t context_id); 71319556cdSPeng Fan int psci_affinity_info(uint32_t affinity, uint32_t lowest_affnity_level); 72319556cdSPeng Fan int psci_migrate(uint32_t cpu_id); 73319556cdSPeng Fan int psci_migrate_info_type(void); 74319556cdSPeng Fan int psci_migrate_info_up_cpu(void); 75319556cdSPeng Fan void psci_system_off(void); 76319556cdSPeng Fan void psci_system_reset(void); 77319556cdSPeng Fan int psci_features(uint32_t psci_fid); 789daed40cSIgor Opaniuk int psci_system_reset2(uint32_t reset_type, uint32_t cookie); 799daed40cSIgor Opaniuk int psci_mem_protect(uint32_t enable); 809daed40cSIgor Opaniuk int psci_mem_chk_range(paddr_t base, size_t length); 81319556cdSPeng Fan int psci_node_hw_state(uint32_t cpu_id, uint32_t power_level); 82789e38a6SZeng Tao int psci_system_suspend(uintptr_t entry, uint32_t context_id, 83789e38a6SZeng Tao struct sm_nsec_ctx *nsec); 84319556cdSPeng Fan int psci_stat_residency(uint32_t cpu_id, uint32_t power_state); 85319556cdSPeng Fan int psci_stat_count(uint32_t cpu_id, uint32_t power_state); 861b181fb2SPeng Fan void tee_psci_handler(struct thread_smc_args *args, struct sm_nsec_ctx *nsec); 877ce47501SPeng Fan 887ce47501SPeng Fan void psci_armv7_cpu_off(void); 89*62d8e0e8SEtienne Carriere #endif /* __SM_PSCI_H */ 90