1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright 2018-2021 NXP 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu * 6*91f16700Schasinglulu */ 7*91f16700Schasinglulu 8*91f16700Schasinglulu #ifndef PLAT_PSCI_H 9*91f16700Schasinglulu #define PLAT_PSCI_H 10*91f16700Schasinglulu #include <cortex_a53.h> 11*91f16700Schasinglulu #include <cortex_a72.h> 12*91f16700Schasinglulu 13*91f16700Schasinglulu /* core abort current op */ 14*91f16700Schasinglulu #define CORE_ABORT_OP 0x1 15*91f16700Schasinglulu 16*91f16700Schasinglulu /* psci power levels - these are actually affinity levels 17*91f16700Schasinglulu * in the psci_power_state_t array 18*91f16700Schasinglulu */ 19*91f16700Schasinglulu #define PLAT_CORE_LVL PSCI_CPU_PWR_LVL 20*91f16700Schasinglulu #define PLAT_CLSTR_LVL U(1) 21*91f16700Schasinglulu #define PLAT_SYS_LVL U(2) 22*91f16700Schasinglulu #define PLAT_MAX_LVL PLAT_SYS_LVL 23*91f16700Schasinglulu 24*91f16700Schasinglulu /* core state */ 25*91f16700Schasinglulu /* OFF states 0x0 - 0xF */ 26*91f16700Schasinglulu #define CORE_IN_RESET 0x0 27*91f16700Schasinglulu #define CORE_DISABLED 0x1 28*91f16700Schasinglulu #define CORE_OFF 0x2 29*91f16700Schasinglulu #define CORE_STANDBY 0x3 30*91f16700Schasinglulu #define CORE_PWR_DOWN 0x4 31*91f16700Schasinglulu #define CORE_WFE 0x6 32*91f16700Schasinglulu #define CORE_WFI 0x7 33*91f16700Schasinglulu #define CORE_LAST 0x8 34*91f16700Schasinglulu #define CORE_OFF_PENDING 0x9 35*91f16700Schasinglulu #define CORE_WORKING_INIT 0xA 36*91f16700Schasinglulu #define SYS_OFF_PENDING 0xB 37*91f16700Schasinglulu #define SYS_OFF 0xC 38*91f16700Schasinglulu 39*91f16700Schasinglulu /* ON states 0x10 - 0x1F */ 40*91f16700Schasinglulu #define CORE_PENDING 0x10 41*91f16700Schasinglulu #define CORE_RELEASED 0x11 42*91f16700Schasinglulu #define CORE_WAKEUP 0x12 43*91f16700Schasinglulu /* highest off state */ 44*91f16700Schasinglulu #define CORE_OFF_MAX 0xF 45*91f16700Schasinglulu /* lowest on state */ 46*91f16700Schasinglulu #define CORE_ON_MIN CORE_PENDING 47*91f16700Schasinglulu 48*91f16700Schasinglulu #define DAIF_SET_MASK 0x3C0 49*91f16700Schasinglulu #define SCTLR_I_C_M_MASK 0x00001005 50*91f16700Schasinglulu #define SCTLR_C_MASK 0x00000004 51*91f16700Schasinglulu #define SCTLR_I_MASK 0x00001000 52*91f16700Schasinglulu #define CPUACTLR_L1PCTL_MASK 0x0000E000 53*91f16700Schasinglulu #define DCSR_RCPM2_BASE 0x20170000 54*91f16700Schasinglulu #define CPUECTLR_SMPEN_MASK 0x40 55*91f16700Schasinglulu #define CPUECTLR_SMPEN_EN 0x40 56*91f16700Schasinglulu #define CPUECTLR_RET_MASK 0x7 57*91f16700Schasinglulu #define CPUECTLR_RET_SET 0x2 58*91f16700Schasinglulu #define CPUECTLR_TIMER_MASK 0x7 59*91f16700Schasinglulu #define CPUECTLR_TIMER_8TICKS 0x2 60*91f16700Schasinglulu #define CPUECTLR_TIMER_2TICKS 0x1 61*91f16700Schasinglulu #define SCR_IRQ_MASK 0x2 62*91f16700Schasinglulu #define SCR_FIQ_MASK 0x4 63*91f16700Schasinglulu 64*91f16700Schasinglulu /* pwr mgmt features supported in the soc-specific code: 65*91f16700Schasinglulu * value == 0x0, the soc code does not support this feature 66*91f16700Schasinglulu * value != 0x0, the soc code supports this feature 67*91f16700Schasinglulu */ 68*91f16700Schasinglulu #ifndef SOC_CORE_RELEASE 69*91f16700Schasinglulu #define SOC_CORE_RELEASE 0x1 70*91f16700Schasinglulu #endif 71*91f16700Schasinglulu 72*91f16700Schasinglulu #ifndef SOC_CORE_RESTART 73*91f16700Schasinglulu #define SOC_CORE_RESTART 0x1 74*91f16700Schasinglulu #endif 75*91f16700Schasinglulu 76*91f16700Schasinglulu #ifndef SOC_CORE_OFF 77*91f16700Schasinglulu #define SOC_CORE_OFF 0x1 78*91f16700Schasinglulu #endif 79*91f16700Schasinglulu 80*91f16700Schasinglulu #ifndef SOC_CORE_STANDBY 81*91f16700Schasinglulu #define SOC_CORE_STANDBY 0x1 82*91f16700Schasinglulu #endif 83*91f16700Schasinglulu 84*91f16700Schasinglulu #ifndef SOC_CORE_PWR_DWN 85*91f16700Schasinglulu #define SOC_CORE_PWR_DWN 0x1 86*91f16700Schasinglulu #endif 87*91f16700Schasinglulu 88*91f16700Schasinglulu #ifndef SOC_CLUSTER_STANDBY 89*91f16700Schasinglulu #define SOC_CLUSTER_STANDBY 0x1 90*91f16700Schasinglulu #endif 91*91f16700Schasinglulu 92*91f16700Schasinglulu #ifndef SOC_CLUSTER_PWR_DWN 93*91f16700Schasinglulu #define SOC_CLUSTER_PWR_DWN 0x1 94*91f16700Schasinglulu #endif 95*91f16700Schasinglulu 96*91f16700Schasinglulu #ifndef SOC_SYSTEM_STANDBY 97*91f16700Schasinglulu #define SOC_SYSTEM_STANDBY 0x1 98*91f16700Schasinglulu #endif 99*91f16700Schasinglulu 100*91f16700Schasinglulu #ifndef SOC_SYSTEM_PWR_DWN 101*91f16700Schasinglulu #define SOC_SYSTEM_PWR_DWN 0x1 102*91f16700Schasinglulu #endif 103*91f16700Schasinglulu 104*91f16700Schasinglulu #ifndef SOC_SYSTEM_OFF 105*91f16700Schasinglulu #define SOC_SYSTEM_OFF 0x1 106*91f16700Schasinglulu #endif 107*91f16700Schasinglulu 108*91f16700Schasinglulu #ifndef SOC_SYSTEM_RESET 109*91f16700Schasinglulu #define SOC_SYSTEM_RESET 0x1 110*91f16700Schasinglulu #endif 111*91f16700Schasinglulu 112*91f16700Schasinglulu #ifndef SOC_SYSTEM_RESET2 113*91f16700Schasinglulu #define SOC_SYSTEM_RESET2 0x1 114*91f16700Schasinglulu #endif 115*91f16700Schasinglulu 116*91f16700Schasinglulu #ifndef __ASSEMBLER__ 117*91f16700Schasinglulu 118*91f16700Schasinglulu void __dead2 _psci_system_reset(void); 119*91f16700Schasinglulu void __dead2 _psci_system_off(void); 120*91f16700Schasinglulu int _psci_cpu_on(u_register_t core_mask); 121*91f16700Schasinglulu void _psci_cpu_prep_off(u_register_t core_mask); 122*91f16700Schasinglulu void __dead2 _psci_cpu_off_wfi(u_register_t core_mask, 123*91f16700Schasinglulu u_register_t wakeup_address); 124*91f16700Schasinglulu void __dead2 _psci_cpu_pwrdn_wfi(u_register_t core_mask, 125*91f16700Schasinglulu u_register_t wakeup_address); 126*91f16700Schasinglulu void __dead2 _psci_sys_pwrdn_wfi(u_register_t core_mask, 127*91f16700Schasinglulu u_register_t wakeup_address); 128*91f16700Schasinglulu void _psci_wakeup(u_register_t core_mask); 129*91f16700Schasinglulu void _psci_core_entr_stdby(u_register_t core_mask); 130*91f16700Schasinglulu void _psci_core_prep_stdby(u_register_t core_mask); 131*91f16700Schasinglulu void _psci_core_exit_stdby(u_register_t core_mask); 132*91f16700Schasinglulu void _psci_core_prep_pwrdn(u_register_t core_mask); 133*91f16700Schasinglulu void _psci_core_exit_pwrdn(u_register_t core_mask); 134*91f16700Schasinglulu void _psci_clstr_prep_stdby(u_register_t core_mask); 135*91f16700Schasinglulu void _psci_clstr_exit_stdby(u_register_t core_mask); 136*91f16700Schasinglulu void _psci_clstr_prep_pwrdn(u_register_t core_mask); 137*91f16700Schasinglulu void _psci_clstr_exit_pwrdn(u_register_t core_mask); 138*91f16700Schasinglulu void _psci_sys_prep_stdby(u_register_t core_mask); 139*91f16700Schasinglulu void _psci_sys_exit_stdby(u_register_t core_mask); 140*91f16700Schasinglulu void _psci_sys_prep_pwrdn(u_register_t core_mask); 141*91f16700Schasinglulu void _psci_sys_exit_pwrdn(u_register_t core_mask); 142*91f16700Schasinglulu 143*91f16700Schasinglulu #endif 144*91f16700Schasinglulu 145*91f16700Schasinglulu #endif /* __PLAT_PSCI_H__ */ 146