xref: /arm-trusted-firmware/plat/nxp/common/psci/include/plat_psci.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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