xref: /aosp_15_r20/external/arm-trusted-firmware/include/arch/aarch32/arch.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2016-2021, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #ifndef ARCH_H
8*54fd6939SJiyong Park #define ARCH_H
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park #include <lib/utils_def.h>
11*54fd6939SJiyong Park 
12*54fd6939SJiyong Park /*******************************************************************************
13*54fd6939SJiyong Park  * MIDR bit definitions
14*54fd6939SJiyong Park  ******************************************************************************/
15*54fd6939SJiyong Park #define MIDR_IMPL_MASK		U(0xff)
16*54fd6939SJiyong Park #define MIDR_IMPL_SHIFT		U(24)
17*54fd6939SJiyong Park #define MIDR_VAR_SHIFT		U(20)
18*54fd6939SJiyong Park #define MIDR_VAR_BITS		U(4)
19*54fd6939SJiyong Park #define MIDR_REV_SHIFT		U(0)
20*54fd6939SJiyong Park #define MIDR_REV_BITS		U(4)
21*54fd6939SJiyong Park #define MIDR_PN_MASK		U(0xfff)
22*54fd6939SJiyong Park #define MIDR_PN_SHIFT		U(4)
23*54fd6939SJiyong Park 
24*54fd6939SJiyong Park /*******************************************************************************
25*54fd6939SJiyong Park  * MPIDR macros
26*54fd6939SJiyong Park  ******************************************************************************/
27*54fd6939SJiyong Park #define MPIDR_MT_MASK		(U(1) << 24)
28*54fd6939SJiyong Park #define MPIDR_CPU_MASK		MPIDR_AFFLVL_MASK
29*54fd6939SJiyong Park #define MPIDR_CLUSTER_MASK	(MPIDR_AFFLVL_MASK << MPIDR_AFFINITY_BITS)
30*54fd6939SJiyong Park #define MPIDR_AFFINITY_BITS	U(8)
31*54fd6939SJiyong Park #define MPIDR_AFFLVL_MASK	U(0xff)
32*54fd6939SJiyong Park #define MPIDR_AFFLVL_SHIFT	U(3)
33*54fd6939SJiyong Park #define MPIDR_AFF0_SHIFT	U(0)
34*54fd6939SJiyong Park #define MPIDR_AFF1_SHIFT	U(8)
35*54fd6939SJiyong Park #define MPIDR_AFF2_SHIFT	U(16)
36*54fd6939SJiyong Park #define MPIDR_AFF_SHIFT(_n)	MPIDR_AFF##_n##_SHIFT
37*54fd6939SJiyong Park #define MPIDR_AFFINITY_MASK	U(0x00ffffff)
38*54fd6939SJiyong Park #define MPIDR_AFFLVL0		U(0)
39*54fd6939SJiyong Park #define MPIDR_AFFLVL1		U(1)
40*54fd6939SJiyong Park #define MPIDR_AFFLVL2		U(2)
41*54fd6939SJiyong Park #define MPIDR_AFFLVL(_n)	MPIDR_AFFLVL##_n
42*54fd6939SJiyong Park 
43*54fd6939SJiyong Park #define MPIDR_AFFLVL0_VAL(mpidr) \
44*54fd6939SJiyong Park 		(((mpidr) >> MPIDR_AFF0_SHIFT) & MPIDR_AFFLVL_MASK)
45*54fd6939SJiyong Park #define MPIDR_AFFLVL1_VAL(mpidr) \
46*54fd6939SJiyong Park 		(((mpidr) >> MPIDR_AFF1_SHIFT) & MPIDR_AFFLVL_MASK)
47*54fd6939SJiyong Park #define MPIDR_AFFLVL2_VAL(mpidr) \
48*54fd6939SJiyong Park 		(((mpidr) >> MPIDR_AFF2_SHIFT) & MPIDR_AFFLVL_MASK)
49*54fd6939SJiyong Park #define MPIDR_AFFLVL3_VAL(mpidr)	U(0)
50*54fd6939SJiyong Park 
51*54fd6939SJiyong Park #define MPIDR_AFF_ID(mpid, n)					\
52*54fd6939SJiyong Park 	(((mpid) >> MPIDR_AFF_SHIFT(n)) & MPIDR_AFFLVL_MASK)
53*54fd6939SJiyong Park 
54*54fd6939SJiyong Park #define MPID_MASK		(MPIDR_MT_MASK				|\
55*54fd6939SJiyong Park 				 (MPIDR_AFFLVL_MASK << MPIDR_AFF2_SHIFT)|\
56*54fd6939SJiyong Park 				 (MPIDR_AFFLVL_MASK << MPIDR_AFF1_SHIFT)|\
57*54fd6939SJiyong Park 				 (MPIDR_AFFLVL_MASK << MPIDR_AFF0_SHIFT))
58*54fd6939SJiyong Park 
59*54fd6939SJiyong Park /*
60*54fd6939SJiyong Park  * An invalid MPID. This value can be used by functions that return an MPID to
61*54fd6939SJiyong Park  * indicate an error.
62*54fd6939SJiyong Park  */
63*54fd6939SJiyong Park #define INVALID_MPID		U(0xFFFFFFFF)
64*54fd6939SJiyong Park 
65*54fd6939SJiyong Park /*
66*54fd6939SJiyong Park  * The MPIDR_MAX_AFFLVL count starts from 0. Take care to
67*54fd6939SJiyong Park  * add one while using this macro to define array sizes.
68*54fd6939SJiyong Park  */
69*54fd6939SJiyong Park #define MPIDR_MAX_AFFLVL	U(2)
70*54fd6939SJiyong Park 
71*54fd6939SJiyong Park /* Data Cache set/way op type defines */
72*54fd6939SJiyong Park #define DC_OP_ISW			U(0x0)
73*54fd6939SJiyong Park #define DC_OP_CISW			U(0x1)
74*54fd6939SJiyong Park #if ERRATA_A53_827319
75*54fd6939SJiyong Park #define DC_OP_CSW			DC_OP_CISW
76*54fd6939SJiyong Park #else
77*54fd6939SJiyong Park #define DC_OP_CSW			U(0x2)
78*54fd6939SJiyong Park #endif
79*54fd6939SJiyong Park 
80*54fd6939SJiyong Park /*******************************************************************************
81*54fd6939SJiyong Park  * Generic timer memory mapped registers & offsets
82*54fd6939SJiyong Park  ******************************************************************************/
83*54fd6939SJiyong Park #define CNTCR_OFF			U(0x000)
84*54fd6939SJiyong Park /* Counter Count Value Lower register */
85*54fd6939SJiyong Park #define CNTCVL_OFF			U(0x008)
86*54fd6939SJiyong Park /* Counter Count Value Upper register */
87*54fd6939SJiyong Park #define CNTCVU_OFF			U(0x00C)
88*54fd6939SJiyong Park #define CNTFID_OFF			U(0x020)
89*54fd6939SJiyong Park 
90*54fd6939SJiyong Park #define CNTCR_EN			(U(1) << 0)
91*54fd6939SJiyong Park #define CNTCR_HDBG			(U(1) << 1)
92*54fd6939SJiyong Park #define CNTCR_FCREQ(x)			((x) << 8)
93*54fd6939SJiyong Park 
94*54fd6939SJiyong Park /*******************************************************************************
95*54fd6939SJiyong Park  * System register bit definitions
96*54fd6939SJiyong Park  ******************************************************************************/
97*54fd6939SJiyong Park /* CLIDR definitions */
98*54fd6939SJiyong Park #define LOUIS_SHIFT		U(21)
99*54fd6939SJiyong Park #define LOC_SHIFT		U(24)
100*54fd6939SJiyong Park #define CLIDR_FIELD_WIDTH	U(3)
101*54fd6939SJiyong Park 
102*54fd6939SJiyong Park /* CSSELR definitions */
103*54fd6939SJiyong Park #define LEVEL_SHIFT		U(1)
104*54fd6939SJiyong Park 
105*54fd6939SJiyong Park /* ID_DFR0_EL1 definitions */
106*54fd6939SJiyong Park #define ID_DFR0_COPTRC_SHIFT		U(12)
107*54fd6939SJiyong Park #define ID_DFR0_COPTRC_MASK		U(0xf)
108*54fd6939SJiyong Park #define ID_DFR0_COPTRC_SUPPORTED	U(1)
109*54fd6939SJiyong Park #define ID_DFR0_COPTRC_LENGTH		U(4)
110*54fd6939SJiyong Park #define ID_DFR0_TRACEFILT_SHIFT		U(28)
111*54fd6939SJiyong Park #define ID_DFR0_TRACEFILT_MASK		U(0xf)
112*54fd6939SJiyong Park #define ID_DFR0_TRACEFILT_SUPPORTED	U(1)
113*54fd6939SJiyong Park #define ID_DFR0_TRACEFILT_LENGTH	U(4)
114*54fd6939SJiyong Park 
115*54fd6939SJiyong Park /* ID_DFR1_EL1 definitions */
116*54fd6939SJiyong Park #define ID_DFR1_MTPMU_SHIFT	U(0)
117*54fd6939SJiyong Park #define ID_DFR1_MTPMU_MASK	U(0xf)
118*54fd6939SJiyong Park #define ID_DFR1_MTPMU_SUPPORTED	U(1)
119*54fd6939SJiyong Park 
120*54fd6939SJiyong Park /* ID_MMFR4 definitions */
121*54fd6939SJiyong Park #define ID_MMFR4_CNP_SHIFT	U(12)
122*54fd6939SJiyong Park #define ID_MMFR4_CNP_LENGTH	U(4)
123*54fd6939SJiyong Park #define ID_MMFR4_CNP_MASK	U(0xf)
124*54fd6939SJiyong Park 
125*54fd6939SJiyong Park /* ID_PFR0 definitions */
126*54fd6939SJiyong Park #define ID_PFR0_AMU_SHIFT	U(20)
127*54fd6939SJiyong Park #define ID_PFR0_AMU_LENGTH	U(4)
128*54fd6939SJiyong Park #define ID_PFR0_AMU_MASK	U(0xf)
129*54fd6939SJiyong Park #define ID_PFR0_AMU_NOT_SUPPORTED	U(0x0)
130*54fd6939SJiyong Park #define ID_PFR0_AMU_V1		U(0x1)
131*54fd6939SJiyong Park #define ID_PFR0_AMU_V1P1	U(0x2)
132*54fd6939SJiyong Park 
133*54fd6939SJiyong Park #define ID_PFR0_DIT_SHIFT	U(24)
134*54fd6939SJiyong Park #define ID_PFR0_DIT_LENGTH	U(4)
135*54fd6939SJiyong Park #define ID_PFR0_DIT_MASK	U(0xf)
136*54fd6939SJiyong Park #define ID_PFR0_DIT_SUPPORTED	(U(1) << ID_PFR0_DIT_SHIFT)
137*54fd6939SJiyong Park 
138*54fd6939SJiyong Park /* ID_PFR1 definitions */
139*54fd6939SJiyong Park #define ID_PFR1_VIRTEXT_SHIFT	U(12)
140*54fd6939SJiyong Park #define ID_PFR1_VIRTEXT_MASK	U(0xf)
141*54fd6939SJiyong Park #define GET_VIRT_EXT(id)	(((id) >> ID_PFR1_VIRTEXT_SHIFT) \
142*54fd6939SJiyong Park 				 & ID_PFR1_VIRTEXT_MASK)
143*54fd6939SJiyong Park #define ID_PFR1_GENTIMER_SHIFT	U(16)
144*54fd6939SJiyong Park #define ID_PFR1_GENTIMER_MASK	U(0xf)
145*54fd6939SJiyong Park #define ID_PFR1_GIC_SHIFT	U(28)
146*54fd6939SJiyong Park #define ID_PFR1_GIC_MASK	U(0xf)
147*54fd6939SJiyong Park #define ID_PFR1_SEC_SHIFT	U(4)
148*54fd6939SJiyong Park #define ID_PFR1_SEC_MASK	U(0xf)
149*54fd6939SJiyong Park #define ID_PFR1_ELx_ENABLED	U(1)
150*54fd6939SJiyong Park 
151*54fd6939SJiyong Park /* SCTLR definitions */
152*54fd6939SJiyong Park #define SCTLR_RES1_DEF		((U(1) << 23) | (U(1) << 22) | (U(1) << 4) | \
153*54fd6939SJiyong Park 				 (U(1) << 3))
154*54fd6939SJiyong Park #if ARM_ARCH_MAJOR == 7
155*54fd6939SJiyong Park #define SCTLR_RES1		SCTLR_RES1_DEF
156*54fd6939SJiyong Park #else
157*54fd6939SJiyong Park #define SCTLR_RES1		(SCTLR_RES1_DEF | (U(1) << 11))
158*54fd6939SJiyong Park #endif
159*54fd6939SJiyong Park #define SCTLR_M_BIT		(U(1) << 0)
160*54fd6939SJiyong Park #define SCTLR_A_BIT		(U(1) << 1)
161*54fd6939SJiyong Park #define SCTLR_C_BIT		(U(1) << 2)
162*54fd6939SJiyong Park #define SCTLR_CP15BEN_BIT	(U(1) << 5)
163*54fd6939SJiyong Park #define SCTLR_ITD_BIT		(U(1) << 7)
164*54fd6939SJiyong Park #define SCTLR_Z_BIT		(U(1) << 11)
165*54fd6939SJiyong Park #define SCTLR_I_BIT		(U(1) << 12)
166*54fd6939SJiyong Park #define SCTLR_V_BIT		(U(1) << 13)
167*54fd6939SJiyong Park #define SCTLR_RR_BIT		(U(1) << 14)
168*54fd6939SJiyong Park #define SCTLR_NTWI_BIT		(U(1) << 16)
169*54fd6939SJiyong Park #define SCTLR_NTWE_BIT		(U(1) << 18)
170*54fd6939SJiyong Park #define SCTLR_WXN_BIT		(U(1) << 19)
171*54fd6939SJiyong Park #define SCTLR_UWXN_BIT		(U(1) << 20)
172*54fd6939SJiyong Park #define SCTLR_EE_BIT		(U(1) << 25)
173*54fd6939SJiyong Park #define SCTLR_TRE_BIT		(U(1) << 28)
174*54fd6939SJiyong Park #define SCTLR_AFE_BIT		(U(1) << 29)
175*54fd6939SJiyong Park #define SCTLR_TE_BIT		(U(1) << 30)
176*54fd6939SJiyong Park #define SCTLR_DSSBS_BIT		(U(1) << 31)
177*54fd6939SJiyong Park #define SCTLR_RESET_VAL         (SCTLR_RES1 | SCTLR_NTWE_BIT |		\
178*54fd6939SJiyong Park 				SCTLR_NTWI_BIT | SCTLR_CP15BEN_BIT)
179*54fd6939SJiyong Park 
180*54fd6939SJiyong Park /* SDCR definitions */
181*54fd6939SJiyong Park #define SDCR_SPD(x)		((x) << 14)
182*54fd6939SJiyong Park #define SDCR_SPD_LEGACY		U(0x0)
183*54fd6939SJiyong Park #define SDCR_SPD_DISABLE	U(0x2)
184*54fd6939SJiyong Park #define SDCR_SPD_ENABLE		U(0x3)
185*54fd6939SJiyong Park #define SDCR_SCCD_BIT		(U(1) << 23)
186*54fd6939SJiyong Park #define SDCR_TTRF_BIT		(U(1) << 19)
187*54fd6939SJiyong Park #define SDCR_SPME_BIT		(U(1) << 17)
188*54fd6939SJiyong Park #define SDCR_RESET_VAL		U(0x0)
189*54fd6939SJiyong Park #define SDCR_MTPME_BIT		(U(1) << 28)
190*54fd6939SJiyong Park 
191*54fd6939SJiyong Park /* HSCTLR definitions */
192*54fd6939SJiyong Park #define HSCTLR_RES1	((U(1) << 29) | (U(1) << 28) | (U(1) << 23) | \
193*54fd6939SJiyong Park 			 (U(1) << 22) | (U(1) << 18) | (U(1) << 16) | \
194*54fd6939SJiyong Park 			 (U(1) << 11) | (U(1) << 4) | (U(1) << 3))
195*54fd6939SJiyong Park 
196*54fd6939SJiyong Park #define HSCTLR_M_BIT		(U(1) << 0)
197*54fd6939SJiyong Park #define HSCTLR_A_BIT		(U(1) << 1)
198*54fd6939SJiyong Park #define HSCTLR_C_BIT		(U(1) << 2)
199*54fd6939SJiyong Park #define HSCTLR_CP15BEN_BIT	(U(1) << 5)
200*54fd6939SJiyong Park #define HSCTLR_ITD_BIT		(U(1) << 7)
201*54fd6939SJiyong Park #define HSCTLR_SED_BIT		(U(1) << 8)
202*54fd6939SJiyong Park #define HSCTLR_I_BIT		(U(1) << 12)
203*54fd6939SJiyong Park #define HSCTLR_WXN_BIT		(U(1) << 19)
204*54fd6939SJiyong Park #define HSCTLR_EE_BIT		(U(1) << 25)
205*54fd6939SJiyong Park #define HSCTLR_TE_BIT		(U(1) << 30)
206*54fd6939SJiyong Park 
207*54fd6939SJiyong Park /* CPACR definitions */
208*54fd6939SJiyong Park #define CPACR_FPEN(x)		((x) << 20)
209*54fd6939SJiyong Park #define CPACR_FP_TRAP_PL0	UL(0x1)
210*54fd6939SJiyong Park #define CPACR_FP_TRAP_ALL	UL(0x2)
211*54fd6939SJiyong Park #define CPACR_FP_TRAP_NONE	UL(0x3)
212*54fd6939SJiyong Park 
213*54fd6939SJiyong Park /* SCR definitions */
214*54fd6939SJiyong Park #define SCR_TWE_BIT		(UL(1) << 13)
215*54fd6939SJiyong Park #define SCR_TWI_BIT		(UL(1) << 12)
216*54fd6939SJiyong Park #define SCR_SIF_BIT		(UL(1) << 9)
217*54fd6939SJiyong Park #define SCR_HCE_BIT		(UL(1) << 8)
218*54fd6939SJiyong Park #define SCR_SCD_BIT		(UL(1) << 7)
219*54fd6939SJiyong Park #define SCR_NET_BIT		(UL(1) << 6)
220*54fd6939SJiyong Park #define SCR_AW_BIT		(UL(1) << 5)
221*54fd6939SJiyong Park #define SCR_FW_BIT		(UL(1) << 4)
222*54fd6939SJiyong Park #define SCR_EA_BIT		(UL(1) << 3)
223*54fd6939SJiyong Park #define SCR_FIQ_BIT		(UL(1) << 2)
224*54fd6939SJiyong Park #define SCR_IRQ_BIT		(UL(1) << 1)
225*54fd6939SJiyong Park #define SCR_NS_BIT		(UL(1) << 0)
226*54fd6939SJiyong Park #define SCR_VALID_BIT_MASK	U(0x33ff)
227*54fd6939SJiyong Park #define SCR_RESET_VAL		U(0x0)
228*54fd6939SJiyong Park 
229*54fd6939SJiyong Park #define GET_NS_BIT(scr)		((scr) & SCR_NS_BIT)
230*54fd6939SJiyong Park 
231*54fd6939SJiyong Park /* HCR definitions */
232*54fd6939SJiyong Park #define HCR_TGE_BIT		(U(1) << 27)
233*54fd6939SJiyong Park #define HCR_AMO_BIT		(U(1) << 5)
234*54fd6939SJiyong Park #define HCR_IMO_BIT		(U(1) << 4)
235*54fd6939SJiyong Park #define HCR_FMO_BIT		(U(1) << 3)
236*54fd6939SJiyong Park #define HCR_RESET_VAL		U(0x0)
237*54fd6939SJiyong Park 
238*54fd6939SJiyong Park /* CNTHCTL definitions */
239*54fd6939SJiyong Park #define CNTHCTL_RESET_VAL	U(0x0)
240*54fd6939SJiyong Park #define PL1PCEN_BIT		(U(1) << 1)
241*54fd6939SJiyong Park #define PL1PCTEN_BIT		(U(1) << 0)
242*54fd6939SJiyong Park 
243*54fd6939SJiyong Park /* CNTKCTL definitions */
244*54fd6939SJiyong Park #define PL0PTEN_BIT		(U(1) << 9)
245*54fd6939SJiyong Park #define PL0VTEN_BIT		(U(1) << 8)
246*54fd6939SJiyong Park #define PL0PCTEN_BIT		(U(1) << 0)
247*54fd6939SJiyong Park #define PL0VCTEN_BIT		(U(1) << 1)
248*54fd6939SJiyong Park #define EVNTEN_BIT		(U(1) << 2)
249*54fd6939SJiyong Park #define EVNTDIR_BIT		(U(1) << 3)
250*54fd6939SJiyong Park #define EVNTI_SHIFT		U(4)
251*54fd6939SJiyong Park #define EVNTI_MASK		U(0xf)
252*54fd6939SJiyong Park 
253*54fd6939SJiyong Park /* HCPTR definitions */
254*54fd6939SJiyong Park #define HCPTR_RES1		((U(1) << 13) | (U(1) << 12) | U(0x3ff))
255*54fd6939SJiyong Park #define TCPAC_BIT		(U(1) << 31)
256*54fd6939SJiyong Park #define TAM_SHIFT		U(30)
257*54fd6939SJiyong Park #define TAM_BIT			(U(1) << TAM_SHIFT)
258*54fd6939SJiyong Park #define TTA_BIT			(U(1) << 20)
259*54fd6939SJiyong Park #define TCP11_BIT		(U(1) << 11)
260*54fd6939SJiyong Park #define TCP10_BIT		(U(1) << 10)
261*54fd6939SJiyong Park #define HCPTR_RESET_VAL		HCPTR_RES1
262*54fd6939SJiyong Park 
263*54fd6939SJiyong Park /* VTTBR defintions */
264*54fd6939SJiyong Park #define VTTBR_RESET_VAL		ULL(0x0)
265*54fd6939SJiyong Park #define VTTBR_VMID_MASK		ULL(0xff)
266*54fd6939SJiyong Park #define VTTBR_VMID_SHIFT	U(48)
267*54fd6939SJiyong Park #define VTTBR_BADDR_MASK	ULL(0xffffffffffff)
268*54fd6939SJiyong Park #define VTTBR_BADDR_SHIFT	U(0)
269*54fd6939SJiyong Park 
270*54fd6939SJiyong Park /* HDCR definitions */
271*54fd6939SJiyong Park #define HDCR_MTPME_BIT		(U(1) << 28)
272*54fd6939SJiyong Park #define HDCR_HLP_BIT		(U(1) << 26)
273*54fd6939SJiyong Park #define HDCR_HPME_BIT		(U(1) << 7)
274*54fd6939SJiyong Park #define HDCR_RESET_VAL		U(0x0)
275*54fd6939SJiyong Park 
276*54fd6939SJiyong Park /* HSTR definitions */
277*54fd6939SJiyong Park #define HSTR_RESET_VAL		U(0x0)
278*54fd6939SJiyong Park 
279*54fd6939SJiyong Park /* CNTHP_CTL definitions */
280*54fd6939SJiyong Park #define CNTHP_CTL_RESET_VAL	U(0x0)
281*54fd6939SJiyong Park 
282*54fd6939SJiyong Park /* NSACR definitions */
283*54fd6939SJiyong Park #define NSASEDIS_BIT		(U(1) << 15)
284*54fd6939SJiyong Park #define NSTRCDIS_BIT		(U(1) << 20)
285*54fd6939SJiyong Park #define NSACR_CP11_BIT		(U(1) << 11)
286*54fd6939SJiyong Park #define NSACR_CP10_BIT		(U(1) << 10)
287*54fd6939SJiyong Park #define NSACR_IMP_DEF_MASK	(U(0x7) << 16)
288*54fd6939SJiyong Park #define NSACR_ENABLE_FP_ACCESS	(NSACR_CP11_BIT | NSACR_CP10_BIT)
289*54fd6939SJiyong Park #define NSACR_RESET_VAL		U(0x0)
290*54fd6939SJiyong Park 
291*54fd6939SJiyong Park /* CPACR definitions */
292*54fd6939SJiyong Park #define ASEDIS_BIT		(U(1) << 31)
293*54fd6939SJiyong Park #define TRCDIS_BIT		(U(1) << 28)
294*54fd6939SJiyong Park #define CPACR_CP11_SHIFT	U(22)
295*54fd6939SJiyong Park #define CPACR_CP10_SHIFT	U(20)
296*54fd6939SJiyong Park #define CPACR_ENABLE_FP_ACCESS	((U(0x3) << CPACR_CP11_SHIFT) |\
297*54fd6939SJiyong Park 				 (U(0x3) << CPACR_CP10_SHIFT))
298*54fd6939SJiyong Park #define CPACR_RESET_VAL         U(0x0)
299*54fd6939SJiyong Park 
300*54fd6939SJiyong Park /* FPEXC definitions */
301*54fd6939SJiyong Park #define FPEXC_RES1		((U(1) << 10) | (U(1) << 9) | (U(1) << 8))
302*54fd6939SJiyong Park #define FPEXC_EN_BIT		(U(1) << 30)
303*54fd6939SJiyong Park #define FPEXC_RESET_VAL		FPEXC_RES1
304*54fd6939SJiyong Park 
305*54fd6939SJiyong Park /* SPSR/CPSR definitions */
306*54fd6939SJiyong Park #define SPSR_FIQ_BIT		(U(1) << 0)
307*54fd6939SJiyong Park #define SPSR_IRQ_BIT		(U(1) << 1)
308*54fd6939SJiyong Park #define SPSR_ABT_BIT		(U(1) << 2)
309*54fd6939SJiyong Park #define SPSR_AIF_SHIFT		U(6)
310*54fd6939SJiyong Park #define SPSR_AIF_MASK		U(0x7)
311*54fd6939SJiyong Park 
312*54fd6939SJiyong Park #define SPSR_E_SHIFT		U(9)
313*54fd6939SJiyong Park #define SPSR_E_MASK		U(0x1)
314*54fd6939SJiyong Park #define SPSR_E_LITTLE		U(0)
315*54fd6939SJiyong Park #define SPSR_E_BIG		U(1)
316*54fd6939SJiyong Park 
317*54fd6939SJiyong Park #define SPSR_T_SHIFT		U(5)
318*54fd6939SJiyong Park #define SPSR_T_MASK		U(0x1)
319*54fd6939SJiyong Park #define SPSR_T_ARM		U(0)
320*54fd6939SJiyong Park #define SPSR_T_THUMB		U(1)
321*54fd6939SJiyong Park 
322*54fd6939SJiyong Park #define SPSR_MODE_SHIFT		U(0)
323*54fd6939SJiyong Park #define SPSR_MODE_MASK		U(0x7)
324*54fd6939SJiyong Park 
325*54fd6939SJiyong Park #define SPSR_SSBS_BIT		BIT_32(23)
326*54fd6939SJiyong Park 
327*54fd6939SJiyong Park #define DISABLE_ALL_EXCEPTIONS \
328*54fd6939SJiyong Park 		(SPSR_FIQ_BIT | SPSR_IRQ_BIT | SPSR_ABT_BIT)
329*54fd6939SJiyong Park 
330*54fd6939SJiyong Park #define CPSR_DIT_BIT		(U(1) << 21)
331*54fd6939SJiyong Park /*
332*54fd6939SJiyong Park  * TTBCR definitions
333*54fd6939SJiyong Park  */
334*54fd6939SJiyong Park #define TTBCR_EAE_BIT		(U(1) << 31)
335*54fd6939SJiyong Park 
336*54fd6939SJiyong Park #define TTBCR_SH1_NON_SHAREABLE		(U(0x0) << 28)
337*54fd6939SJiyong Park #define TTBCR_SH1_OUTER_SHAREABLE	(U(0x2) << 28)
338*54fd6939SJiyong Park #define TTBCR_SH1_INNER_SHAREABLE	(U(0x3) << 28)
339*54fd6939SJiyong Park 
340*54fd6939SJiyong Park #define TTBCR_RGN1_OUTER_NC	(U(0x0) << 26)
341*54fd6939SJiyong Park #define TTBCR_RGN1_OUTER_WBA	(U(0x1) << 26)
342*54fd6939SJiyong Park #define TTBCR_RGN1_OUTER_WT	(U(0x2) << 26)
343*54fd6939SJiyong Park #define TTBCR_RGN1_OUTER_WBNA	(U(0x3) << 26)
344*54fd6939SJiyong Park 
345*54fd6939SJiyong Park #define TTBCR_RGN1_INNER_NC	(U(0x0) << 24)
346*54fd6939SJiyong Park #define TTBCR_RGN1_INNER_WBA	(U(0x1) << 24)
347*54fd6939SJiyong Park #define TTBCR_RGN1_INNER_WT	(U(0x2) << 24)
348*54fd6939SJiyong Park #define TTBCR_RGN1_INNER_WBNA	(U(0x3) << 24)
349*54fd6939SJiyong Park 
350*54fd6939SJiyong Park #define TTBCR_EPD1_BIT		(U(1) << 23)
351*54fd6939SJiyong Park #define TTBCR_A1_BIT		(U(1) << 22)
352*54fd6939SJiyong Park 
353*54fd6939SJiyong Park #define TTBCR_T1SZ_SHIFT	U(16)
354*54fd6939SJiyong Park #define TTBCR_T1SZ_MASK		U(0x7)
355*54fd6939SJiyong Park #define TTBCR_TxSZ_MIN		U(0)
356*54fd6939SJiyong Park #define TTBCR_TxSZ_MAX		U(7)
357*54fd6939SJiyong Park 
358*54fd6939SJiyong Park #define TTBCR_SH0_NON_SHAREABLE		(U(0x0) << 12)
359*54fd6939SJiyong Park #define TTBCR_SH0_OUTER_SHAREABLE	(U(0x2) << 12)
360*54fd6939SJiyong Park #define TTBCR_SH0_INNER_SHAREABLE	(U(0x3) << 12)
361*54fd6939SJiyong Park 
362*54fd6939SJiyong Park #define TTBCR_RGN0_OUTER_NC	(U(0x0) << 10)
363*54fd6939SJiyong Park #define TTBCR_RGN0_OUTER_WBA	(U(0x1) << 10)
364*54fd6939SJiyong Park #define TTBCR_RGN0_OUTER_WT	(U(0x2) << 10)
365*54fd6939SJiyong Park #define TTBCR_RGN0_OUTER_WBNA	(U(0x3) << 10)
366*54fd6939SJiyong Park 
367*54fd6939SJiyong Park #define TTBCR_RGN0_INNER_NC	(U(0x0) << 8)
368*54fd6939SJiyong Park #define TTBCR_RGN0_INNER_WBA	(U(0x1) << 8)
369*54fd6939SJiyong Park #define TTBCR_RGN0_INNER_WT	(U(0x2) << 8)
370*54fd6939SJiyong Park #define TTBCR_RGN0_INNER_WBNA	(U(0x3) << 8)
371*54fd6939SJiyong Park 
372*54fd6939SJiyong Park #define TTBCR_EPD0_BIT		(U(1) << 7)
373*54fd6939SJiyong Park #define TTBCR_T0SZ_SHIFT	U(0)
374*54fd6939SJiyong Park #define TTBCR_T0SZ_MASK		U(0x7)
375*54fd6939SJiyong Park 
376*54fd6939SJiyong Park /*
377*54fd6939SJiyong Park  * HTCR definitions
378*54fd6939SJiyong Park  */
379*54fd6939SJiyong Park #define HTCR_RES1			((U(1) << 31) | (U(1) << 23))
380*54fd6939SJiyong Park 
381*54fd6939SJiyong Park #define HTCR_SH0_NON_SHAREABLE		(U(0x0) << 12)
382*54fd6939SJiyong Park #define HTCR_SH0_OUTER_SHAREABLE	(U(0x2) << 12)
383*54fd6939SJiyong Park #define HTCR_SH0_INNER_SHAREABLE	(U(0x3) << 12)
384*54fd6939SJiyong Park 
385*54fd6939SJiyong Park #define HTCR_RGN0_OUTER_NC	(U(0x0) << 10)
386*54fd6939SJiyong Park #define HTCR_RGN0_OUTER_WBA	(U(0x1) << 10)
387*54fd6939SJiyong Park #define HTCR_RGN0_OUTER_WT	(U(0x2) << 10)
388*54fd6939SJiyong Park #define HTCR_RGN0_OUTER_WBNA	(U(0x3) << 10)
389*54fd6939SJiyong Park 
390*54fd6939SJiyong Park #define HTCR_RGN0_INNER_NC	(U(0x0) << 8)
391*54fd6939SJiyong Park #define HTCR_RGN0_INNER_WBA	(U(0x1) << 8)
392*54fd6939SJiyong Park #define HTCR_RGN0_INNER_WT	(U(0x2) << 8)
393*54fd6939SJiyong Park #define HTCR_RGN0_INNER_WBNA	(U(0x3) << 8)
394*54fd6939SJiyong Park 
395*54fd6939SJiyong Park #define HTCR_T0SZ_SHIFT		U(0)
396*54fd6939SJiyong Park #define HTCR_T0SZ_MASK		U(0x7)
397*54fd6939SJiyong Park 
398*54fd6939SJiyong Park #define MODE_RW_SHIFT		U(0x4)
399*54fd6939SJiyong Park #define MODE_RW_MASK		U(0x1)
400*54fd6939SJiyong Park #define MODE_RW_32		U(0x1)
401*54fd6939SJiyong Park 
402*54fd6939SJiyong Park #define MODE32_SHIFT		U(0)
403*54fd6939SJiyong Park #define MODE32_MASK		U(0x1f)
404*54fd6939SJiyong Park #define MODE32_usr		U(0x10)
405*54fd6939SJiyong Park #define MODE32_fiq		U(0x11)
406*54fd6939SJiyong Park #define MODE32_irq		U(0x12)
407*54fd6939SJiyong Park #define MODE32_svc		U(0x13)
408*54fd6939SJiyong Park #define MODE32_mon		U(0x16)
409*54fd6939SJiyong Park #define MODE32_abt		U(0x17)
410*54fd6939SJiyong Park #define MODE32_hyp		U(0x1a)
411*54fd6939SJiyong Park #define MODE32_und		U(0x1b)
412*54fd6939SJiyong Park #define MODE32_sys		U(0x1f)
413*54fd6939SJiyong Park 
414*54fd6939SJiyong Park #define GET_M32(mode)		(((mode) >> MODE32_SHIFT) & MODE32_MASK)
415*54fd6939SJiyong Park 
416*54fd6939SJiyong Park #define SPSR_MODE32(mode, isa, endian, aif) \
417*54fd6939SJiyong Park ( \
418*54fd6939SJiyong Park 	( \
419*54fd6939SJiyong Park 		(MODE_RW_32 << MODE_RW_SHIFT) | \
420*54fd6939SJiyong Park 		(((mode) & MODE32_MASK) << MODE32_SHIFT) | \
421*54fd6939SJiyong Park 		(((isa) & SPSR_T_MASK) << SPSR_T_SHIFT) | \
422*54fd6939SJiyong Park 		(((endian) & SPSR_E_MASK) << SPSR_E_SHIFT) | \
423*54fd6939SJiyong Park 		(((aif) & SPSR_AIF_MASK) << SPSR_AIF_SHIFT) \
424*54fd6939SJiyong Park 	) & \
425*54fd6939SJiyong Park 	(~(SPSR_SSBS_BIT)) \
426*54fd6939SJiyong Park )
427*54fd6939SJiyong Park 
428*54fd6939SJiyong Park /*
429*54fd6939SJiyong Park  * TTBR definitions
430*54fd6939SJiyong Park  */
431*54fd6939SJiyong Park #define TTBR_CNP_BIT		ULL(0x1)
432*54fd6939SJiyong Park 
433*54fd6939SJiyong Park /*
434*54fd6939SJiyong Park  * CTR definitions
435*54fd6939SJiyong Park  */
436*54fd6939SJiyong Park #define CTR_CWG_SHIFT		U(24)
437*54fd6939SJiyong Park #define CTR_CWG_MASK		U(0xf)
438*54fd6939SJiyong Park #define CTR_ERG_SHIFT		U(20)
439*54fd6939SJiyong Park #define CTR_ERG_MASK		U(0xf)
440*54fd6939SJiyong Park #define CTR_DMINLINE_SHIFT	U(16)
441*54fd6939SJiyong Park #define CTR_DMINLINE_WIDTH	U(4)
442*54fd6939SJiyong Park #define CTR_DMINLINE_MASK	((U(1) << 4) - U(1))
443*54fd6939SJiyong Park #define CTR_L1IP_SHIFT		U(14)
444*54fd6939SJiyong Park #define CTR_L1IP_MASK		U(0x3)
445*54fd6939SJiyong Park #define CTR_IMINLINE_SHIFT	U(0)
446*54fd6939SJiyong Park #define CTR_IMINLINE_MASK	U(0xf)
447*54fd6939SJiyong Park 
448*54fd6939SJiyong Park #define MAX_CACHE_LINE_SIZE	U(0x800) /* 2KB */
449*54fd6939SJiyong Park 
450*54fd6939SJiyong Park /* PMCR definitions */
451*54fd6939SJiyong Park #define PMCR_N_SHIFT		U(11)
452*54fd6939SJiyong Park #define PMCR_N_MASK		U(0x1f)
453*54fd6939SJiyong Park #define PMCR_N_BITS		(PMCR_N_MASK << PMCR_N_SHIFT)
454*54fd6939SJiyong Park #define PMCR_LP_BIT		(U(1) << 7)
455*54fd6939SJiyong Park #define PMCR_LC_BIT		(U(1) << 6)
456*54fd6939SJiyong Park #define PMCR_DP_BIT		(U(1) << 5)
457*54fd6939SJiyong Park #define	PMCR_RESET_VAL		U(0x0)
458*54fd6939SJiyong Park 
459*54fd6939SJiyong Park /*******************************************************************************
460*54fd6939SJiyong Park  * Definitions of register offsets, fields and macros for CPU system
461*54fd6939SJiyong Park  * instructions.
462*54fd6939SJiyong Park  ******************************************************************************/
463*54fd6939SJiyong Park 
464*54fd6939SJiyong Park #define TLBI_ADDR_SHIFT		U(0)
465*54fd6939SJiyong Park #define TLBI_ADDR_MASK		U(0xFFFFF000)
466*54fd6939SJiyong Park #define TLBI_ADDR(x)		(((x) >> TLBI_ADDR_SHIFT) & TLBI_ADDR_MASK)
467*54fd6939SJiyong Park 
468*54fd6939SJiyong Park /*******************************************************************************
469*54fd6939SJiyong Park  * Definitions of register offsets and fields in the CNTCTLBase Frame of the
470*54fd6939SJiyong Park  * system level implementation of the Generic Timer.
471*54fd6939SJiyong Park  ******************************************************************************/
472*54fd6939SJiyong Park #define CNTCTLBASE_CNTFRQ	U(0x0)
473*54fd6939SJiyong Park #define CNTNSAR			U(0x4)
474*54fd6939SJiyong Park #define CNTNSAR_NS_SHIFT(x)	(x)
475*54fd6939SJiyong Park 
476*54fd6939SJiyong Park #define CNTACR_BASE(x)		(U(0x40) + ((x) << 2))
477*54fd6939SJiyong Park #define CNTACR_RPCT_SHIFT	U(0x0)
478*54fd6939SJiyong Park #define CNTACR_RVCT_SHIFT	U(0x1)
479*54fd6939SJiyong Park #define CNTACR_RFRQ_SHIFT	U(0x2)
480*54fd6939SJiyong Park #define CNTACR_RVOFF_SHIFT	U(0x3)
481*54fd6939SJiyong Park #define CNTACR_RWVT_SHIFT	U(0x4)
482*54fd6939SJiyong Park #define CNTACR_RWPT_SHIFT	U(0x5)
483*54fd6939SJiyong Park 
484*54fd6939SJiyong Park /*******************************************************************************
485*54fd6939SJiyong Park  * Definitions of register offsets and fields in the CNTBaseN Frame of the
486*54fd6939SJiyong Park  * system level implementation of the Generic Timer.
487*54fd6939SJiyong Park  ******************************************************************************/
488*54fd6939SJiyong Park /* Physical Count register. */
489*54fd6939SJiyong Park #define CNTPCT_LO		U(0x0)
490*54fd6939SJiyong Park /* Counter Frequency register. */
491*54fd6939SJiyong Park #define CNTBASEN_CNTFRQ		U(0x10)
492*54fd6939SJiyong Park /* Physical Timer CompareValue register. */
493*54fd6939SJiyong Park #define CNTP_CVAL_LO		U(0x20)
494*54fd6939SJiyong Park /* Physical Timer Control register. */
495*54fd6939SJiyong Park #define CNTP_CTL		U(0x2c)
496*54fd6939SJiyong Park 
497*54fd6939SJiyong Park /* Physical timer control register bit fields shifts and masks */
498*54fd6939SJiyong Park #define CNTP_CTL_ENABLE_SHIFT   0
499*54fd6939SJiyong Park #define CNTP_CTL_IMASK_SHIFT    1
500*54fd6939SJiyong Park #define CNTP_CTL_ISTATUS_SHIFT  2
501*54fd6939SJiyong Park 
502*54fd6939SJiyong Park #define CNTP_CTL_ENABLE_MASK    U(1)
503*54fd6939SJiyong Park #define CNTP_CTL_IMASK_MASK     U(1)
504*54fd6939SJiyong Park #define CNTP_CTL_ISTATUS_MASK   U(1)
505*54fd6939SJiyong Park 
506*54fd6939SJiyong Park /* MAIR macros */
507*54fd6939SJiyong Park #define MAIR0_ATTR_SET(attr, index)	((attr) << ((index) << U(3)))
508*54fd6939SJiyong Park #define MAIR1_ATTR_SET(attr, index)	((attr) << (((index) - U(3)) << U(3)))
509*54fd6939SJiyong Park 
510*54fd6939SJiyong Park /* System register defines The format is: coproc, opt1, CRn, CRm, opt2 */
511*54fd6939SJiyong Park #define SCR		p15, 0, c1, c1, 0
512*54fd6939SJiyong Park #define SCTLR		p15, 0, c1, c0, 0
513*54fd6939SJiyong Park #define ACTLR		p15, 0, c1, c0, 1
514*54fd6939SJiyong Park #define SDCR		p15, 0, c1, c3, 1
515*54fd6939SJiyong Park #define MPIDR		p15, 0, c0, c0, 5
516*54fd6939SJiyong Park #define MIDR		p15, 0, c0, c0, 0
517*54fd6939SJiyong Park #define HVBAR		p15, 4, c12, c0, 0
518*54fd6939SJiyong Park #define VBAR		p15, 0, c12, c0, 0
519*54fd6939SJiyong Park #define MVBAR		p15, 0, c12, c0, 1
520*54fd6939SJiyong Park #define NSACR		p15, 0, c1, c1, 2
521*54fd6939SJiyong Park #define CPACR		p15, 0, c1, c0, 2
522*54fd6939SJiyong Park #define DCCIMVAC	p15, 0, c7, c14, 1
523*54fd6939SJiyong Park #define DCCMVAC		p15, 0, c7, c10, 1
524*54fd6939SJiyong Park #define DCIMVAC		p15, 0, c7, c6, 1
525*54fd6939SJiyong Park #define DCCISW		p15, 0, c7, c14, 2
526*54fd6939SJiyong Park #define DCCSW		p15, 0, c7, c10, 2
527*54fd6939SJiyong Park #define DCISW		p15, 0, c7, c6, 2
528*54fd6939SJiyong Park #define CTR		p15, 0, c0, c0, 1
529*54fd6939SJiyong Park #define CNTFRQ		p15, 0, c14, c0, 0
530*54fd6939SJiyong Park #define ID_MMFR4	p15, 0, c0, c2, 6
531*54fd6939SJiyong Park #define ID_DFR0		p15, 0, c0, c1, 2
532*54fd6939SJiyong Park #define ID_DFR1		p15, 0, c0, c3, 5
533*54fd6939SJiyong Park #define ID_PFR0		p15, 0, c0, c1, 0
534*54fd6939SJiyong Park #define ID_PFR1		p15, 0, c0, c1, 1
535*54fd6939SJiyong Park #define MAIR0		p15, 0, c10, c2, 0
536*54fd6939SJiyong Park #define MAIR1		p15, 0, c10, c2, 1
537*54fd6939SJiyong Park #define TTBCR		p15, 0, c2, c0, 2
538*54fd6939SJiyong Park #define TTBR0		p15, 0, c2, c0, 0
539*54fd6939SJiyong Park #define TTBR1		p15, 0, c2, c0, 1
540*54fd6939SJiyong Park #define TLBIALL		p15, 0, c8, c7, 0
541*54fd6939SJiyong Park #define TLBIALLH	p15, 4, c8, c7, 0
542*54fd6939SJiyong Park #define TLBIALLIS	p15, 0, c8, c3, 0
543*54fd6939SJiyong Park #define TLBIMVA		p15, 0, c8, c7, 1
544*54fd6939SJiyong Park #define TLBIMVAA	p15, 0, c8, c7, 3
545*54fd6939SJiyong Park #define TLBIMVAAIS	p15, 0, c8, c3, 3
546*54fd6939SJiyong Park #define TLBIMVAHIS	p15, 4, c8, c3, 1
547*54fd6939SJiyong Park #define BPIALLIS	p15, 0, c7, c1, 6
548*54fd6939SJiyong Park #define BPIALL		p15, 0, c7, c5, 6
549*54fd6939SJiyong Park #define ICIALLU		p15, 0, c7, c5, 0
550*54fd6939SJiyong Park #define HSCTLR		p15, 4, c1, c0, 0
551*54fd6939SJiyong Park #define HCR		p15, 4, c1, c1, 0
552*54fd6939SJiyong Park #define HCPTR		p15, 4, c1, c1, 2
553*54fd6939SJiyong Park #define HSTR		p15, 4, c1, c1, 3
554*54fd6939SJiyong Park #define CNTHCTL		p15, 4, c14, c1, 0
555*54fd6939SJiyong Park #define CNTKCTL		p15, 0, c14, c1, 0
556*54fd6939SJiyong Park #define VPIDR		p15, 4, c0, c0, 0
557*54fd6939SJiyong Park #define VMPIDR		p15, 4, c0, c0, 5
558*54fd6939SJiyong Park #define ISR		p15, 0, c12, c1, 0
559*54fd6939SJiyong Park #define CLIDR		p15, 1, c0, c0, 1
560*54fd6939SJiyong Park #define CSSELR		p15, 2, c0, c0, 0
561*54fd6939SJiyong Park #define CCSIDR		p15, 1, c0, c0, 0
562*54fd6939SJiyong Park #define HTCR		p15, 4, c2, c0, 2
563*54fd6939SJiyong Park #define HMAIR0		p15, 4, c10, c2, 0
564*54fd6939SJiyong Park #define ATS1CPR		p15, 0, c7, c8, 0
565*54fd6939SJiyong Park #define ATS1HR		p15, 4, c7, c8, 0
566*54fd6939SJiyong Park #define DBGOSDLR	p14, 0, c1, c3, 4
567*54fd6939SJiyong Park 
568*54fd6939SJiyong Park /* Debug register defines. The format is: coproc, opt1, CRn, CRm, opt2 */
569*54fd6939SJiyong Park #define HDCR		p15, 4, c1, c1, 1
570*54fd6939SJiyong Park #define PMCR		p15, 0, c9, c12, 0
571*54fd6939SJiyong Park #define CNTHP_TVAL	p15, 4, c14, c2, 0
572*54fd6939SJiyong Park #define CNTHP_CTL	p15, 4, c14, c2, 1
573*54fd6939SJiyong Park 
574*54fd6939SJiyong Park /* AArch32 coproc registers for 32bit MMU descriptor support */
575*54fd6939SJiyong Park #define PRRR		p15, 0, c10, c2, 0
576*54fd6939SJiyong Park #define NMRR		p15, 0, c10, c2, 1
577*54fd6939SJiyong Park #define DACR		p15, 0, c3, c0, 0
578*54fd6939SJiyong Park 
579*54fd6939SJiyong Park /* GICv3 CPU Interface system register defines. The format is: coproc, opt1, CRn, CRm, opt2 */
580*54fd6939SJiyong Park #define ICC_IAR1	p15, 0, c12, c12, 0
581*54fd6939SJiyong Park #define ICC_IAR0	p15, 0, c12, c8, 0
582*54fd6939SJiyong Park #define ICC_EOIR1	p15, 0, c12, c12, 1
583*54fd6939SJiyong Park #define ICC_EOIR0	p15, 0, c12, c8, 1
584*54fd6939SJiyong Park #define ICC_HPPIR1	p15, 0, c12, c12, 2
585*54fd6939SJiyong Park #define ICC_HPPIR0	p15, 0, c12, c8, 2
586*54fd6939SJiyong Park #define ICC_BPR1	p15, 0, c12, c12, 3
587*54fd6939SJiyong Park #define ICC_BPR0	p15, 0, c12, c8, 3
588*54fd6939SJiyong Park #define ICC_DIR		p15, 0, c12, c11, 1
589*54fd6939SJiyong Park #define ICC_PMR		p15, 0, c4, c6, 0
590*54fd6939SJiyong Park #define ICC_RPR		p15, 0, c12, c11, 3
591*54fd6939SJiyong Park #define ICC_CTLR	p15, 0, c12, c12, 4
592*54fd6939SJiyong Park #define ICC_MCTLR	p15, 6, c12, c12, 4
593*54fd6939SJiyong Park #define ICC_SRE		p15, 0, c12, c12, 5
594*54fd6939SJiyong Park #define ICC_HSRE	p15, 4, c12, c9, 5
595*54fd6939SJiyong Park #define ICC_MSRE	p15, 6, c12, c12, 5
596*54fd6939SJiyong Park #define ICC_IGRPEN0	p15, 0, c12, c12, 6
597*54fd6939SJiyong Park #define ICC_IGRPEN1	p15, 0, c12, c12, 7
598*54fd6939SJiyong Park #define ICC_MGRPEN1	p15, 6, c12, c12, 7
599*54fd6939SJiyong Park 
600*54fd6939SJiyong Park /* 64 bit system register defines The format is: coproc, opt1, CRm */
601*54fd6939SJiyong Park #define TTBR0_64	p15, 0, c2
602*54fd6939SJiyong Park #define TTBR1_64	p15, 1, c2
603*54fd6939SJiyong Park #define CNTVOFF_64	p15, 4, c14
604*54fd6939SJiyong Park #define VTTBR_64	p15, 6, c2
605*54fd6939SJiyong Park #define CNTPCT_64	p15, 0, c14
606*54fd6939SJiyong Park #define HTTBR_64	p15, 4, c2
607*54fd6939SJiyong Park #define CNTHP_CVAL_64	p15, 6, c14
608*54fd6939SJiyong Park #define PAR_64		p15, 0, c7
609*54fd6939SJiyong Park 
610*54fd6939SJiyong Park /* 64 bit GICv3 CPU Interface system register defines. The format is: coproc, opt1, CRm */
611*54fd6939SJiyong Park #define ICC_SGI1R_EL1_64	p15, 0, c12
612*54fd6939SJiyong Park #define ICC_ASGI1R_EL1_64	p15, 1, c12
613*54fd6939SJiyong Park #define ICC_SGI0R_EL1_64	p15, 2, c12
614*54fd6939SJiyong Park 
615*54fd6939SJiyong Park /*******************************************************************************
616*54fd6939SJiyong Park  * Definitions of MAIR encodings for device and normal memory
617*54fd6939SJiyong Park  ******************************************************************************/
618*54fd6939SJiyong Park /*
619*54fd6939SJiyong Park  * MAIR encodings for device memory attributes.
620*54fd6939SJiyong Park  */
621*54fd6939SJiyong Park #define MAIR_DEV_nGnRnE		U(0x0)
622*54fd6939SJiyong Park #define MAIR_DEV_nGnRE		U(0x4)
623*54fd6939SJiyong Park #define MAIR_DEV_nGRE		U(0x8)
624*54fd6939SJiyong Park #define MAIR_DEV_GRE		U(0xc)
625*54fd6939SJiyong Park 
626*54fd6939SJiyong Park /*
627*54fd6939SJiyong Park  * MAIR encodings for normal memory attributes.
628*54fd6939SJiyong Park  *
629*54fd6939SJiyong Park  * Cache Policy
630*54fd6939SJiyong Park  *  WT:	 Write Through
631*54fd6939SJiyong Park  *  WB:	 Write Back
632*54fd6939SJiyong Park  *  NC:	 Non-Cacheable
633*54fd6939SJiyong Park  *
634*54fd6939SJiyong Park  * Transient Hint
635*54fd6939SJiyong Park  *  NTR: Non-Transient
636*54fd6939SJiyong Park  *  TR:	 Transient
637*54fd6939SJiyong Park  *
638*54fd6939SJiyong Park  * Allocation Policy
639*54fd6939SJiyong Park  *  RA:	 Read Allocate
640*54fd6939SJiyong Park  *  WA:	 Write Allocate
641*54fd6939SJiyong Park  *  RWA: Read and Write Allocate
642*54fd6939SJiyong Park  *  NA:	 No Allocation
643*54fd6939SJiyong Park  */
644*54fd6939SJiyong Park #define MAIR_NORM_WT_TR_WA	U(0x1)
645*54fd6939SJiyong Park #define MAIR_NORM_WT_TR_RA	U(0x2)
646*54fd6939SJiyong Park #define MAIR_NORM_WT_TR_RWA	U(0x3)
647*54fd6939SJiyong Park #define MAIR_NORM_NC		U(0x4)
648*54fd6939SJiyong Park #define MAIR_NORM_WB_TR_WA	U(0x5)
649*54fd6939SJiyong Park #define MAIR_NORM_WB_TR_RA	U(0x6)
650*54fd6939SJiyong Park #define MAIR_NORM_WB_TR_RWA	U(0x7)
651*54fd6939SJiyong Park #define MAIR_NORM_WT_NTR_NA	U(0x8)
652*54fd6939SJiyong Park #define MAIR_NORM_WT_NTR_WA	U(0x9)
653*54fd6939SJiyong Park #define MAIR_NORM_WT_NTR_RA	U(0xa)
654*54fd6939SJiyong Park #define MAIR_NORM_WT_NTR_RWA	U(0xb)
655*54fd6939SJiyong Park #define MAIR_NORM_WB_NTR_NA	U(0xc)
656*54fd6939SJiyong Park #define MAIR_NORM_WB_NTR_WA	U(0xd)
657*54fd6939SJiyong Park #define MAIR_NORM_WB_NTR_RA	U(0xe)
658*54fd6939SJiyong Park #define MAIR_NORM_WB_NTR_RWA	U(0xf)
659*54fd6939SJiyong Park 
660*54fd6939SJiyong Park #define MAIR_NORM_OUTER_SHIFT	U(4)
661*54fd6939SJiyong Park 
662*54fd6939SJiyong Park #define MAKE_MAIR_NORMAL_MEMORY(inner, outer)	\
663*54fd6939SJiyong Park 		((inner) | ((outer) << MAIR_NORM_OUTER_SHIFT))
664*54fd6939SJiyong Park 
665*54fd6939SJiyong Park /* PAR fields */
666*54fd6939SJiyong Park #define PAR_F_SHIFT	U(0)
667*54fd6939SJiyong Park #define PAR_F_MASK	ULL(0x1)
668*54fd6939SJiyong Park #define PAR_ADDR_SHIFT	U(12)
669*54fd6939SJiyong Park #define PAR_ADDR_MASK	(BIT_64(40) - ULL(1)) /* 40-bits-wide page address */
670*54fd6939SJiyong Park 
671*54fd6939SJiyong Park /*******************************************************************************
672*54fd6939SJiyong Park  * Definitions for system register interface to AMU for FEAT_AMUv1
673*54fd6939SJiyong Park  ******************************************************************************/
674*54fd6939SJiyong Park #define AMCR		p15, 0, c13, c2, 0
675*54fd6939SJiyong Park #define AMCFGR		p15, 0, c13, c2, 1
676*54fd6939SJiyong Park #define AMCGCR		p15, 0, c13, c2, 2
677*54fd6939SJiyong Park #define AMUSERENR	p15, 0, c13, c2, 3
678*54fd6939SJiyong Park #define AMCNTENCLR0	p15, 0, c13, c2, 4
679*54fd6939SJiyong Park #define AMCNTENSET0	p15, 0, c13, c2, 5
680*54fd6939SJiyong Park #define AMCNTENCLR1	p15, 0, c13, c3, 0
681*54fd6939SJiyong Park #define AMCNTENSET1	p15, 0, c13, c3, 1
682*54fd6939SJiyong Park 
683*54fd6939SJiyong Park /* Activity Monitor Group 0 Event Counter Registers */
684*54fd6939SJiyong Park #define AMEVCNTR00	p15, 0, c0
685*54fd6939SJiyong Park #define AMEVCNTR01	p15, 1, c0
686*54fd6939SJiyong Park #define AMEVCNTR02	p15, 2, c0
687*54fd6939SJiyong Park #define AMEVCNTR03	p15, 3, c0
688*54fd6939SJiyong Park 
689*54fd6939SJiyong Park /* Activity Monitor Group 0 Event Type Registers */
690*54fd6939SJiyong Park #define AMEVTYPER00	p15, 0, c13, c6, 0
691*54fd6939SJiyong Park #define AMEVTYPER01	p15, 0, c13, c6, 1
692*54fd6939SJiyong Park #define AMEVTYPER02	p15, 0, c13, c6, 2
693*54fd6939SJiyong Park #define AMEVTYPER03	p15, 0, c13, c6, 3
694*54fd6939SJiyong Park 
695*54fd6939SJiyong Park /* Activity Monitor Group 1 Event Counter Registers */
696*54fd6939SJiyong Park #define AMEVCNTR10	p15, 0, c4
697*54fd6939SJiyong Park #define AMEVCNTR11	p15, 1, c4
698*54fd6939SJiyong Park #define AMEVCNTR12	p15, 2, c4
699*54fd6939SJiyong Park #define AMEVCNTR13	p15, 3, c4
700*54fd6939SJiyong Park #define AMEVCNTR14	p15, 4, c4
701*54fd6939SJiyong Park #define AMEVCNTR15	p15, 5, c4
702*54fd6939SJiyong Park #define AMEVCNTR16	p15, 6, c4
703*54fd6939SJiyong Park #define AMEVCNTR17	p15, 7, c4
704*54fd6939SJiyong Park #define AMEVCNTR18	p15, 0, c5
705*54fd6939SJiyong Park #define AMEVCNTR19	p15, 1, c5
706*54fd6939SJiyong Park #define AMEVCNTR1A	p15, 2, c5
707*54fd6939SJiyong Park #define AMEVCNTR1B	p15, 3, c5
708*54fd6939SJiyong Park #define AMEVCNTR1C	p15, 4, c5
709*54fd6939SJiyong Park #define AMEVCNTR1D	p15, 5, c5
710*54fd6939SJiyong Park #define AMEVCNTR1E	p15, 6, c5
711*54fd6939SJiyong Park #define AMEVCNTR1F	p15, 7, c5
712*54fd6939SJiyong Park 
713*54fd6939SJiyong Park /* Activity Monitor Group 1 Event Type Registers */
714*54fd6939SJiyong Park #define AMEVTYPER10	p15, 0, c13, c14, 0
715*54fd6939SJiyong Park #define AMEVTYPER11	p15, 0, c13, c14, 1
716*54fd6939SJiyong Park #define AMEVTYPER12	p15, 0, c13, c14, 2
717*54fd6939SJiyong Park #define AMEVTYPER13	p15, 0, c13, c14, 3
718*54fd6939SJiyong Park #define AMEVTYPER14	p15, 0, c13, c14, 4
719*54fd6939SJiyong Park #define AMEVTYPER15	p15, 0, c13, c14, 5
720*54fd6939SJiyong Park #define AMEVTYPER16	p15, 0, c13, c14, 6
721*54fd6939SJiyong Park #define AMEVTYPER17	p15, 0, c13, c14, 7
722*54fd6939SJiyong Park #define AMEVTYPER18	p15, 0, c13, c15, 0
723*54fd6939SJiyong Park #define AMEVTYPER19	p15, 0, c13, c15, 1
724*54fd6939SJiyong Park #define AMEVTYPER1A	p15, 0, c13, c15, 2
725*54fd6939SJiyong Park #define AMEVTYPER1B	p15, 0, c13, c15, 3
726*54fd6939SJiyong Park #define AMEVTYPER1C	p15, 0, c13, c15, 4
727*54fd6939SJiyong Park #define AMEVTYPER1D	p15, 0, c13, c15, 5
728*54fd6939SJiyong Park #define AMEVTYPER1E	p15, 0, c13, c15, 6
729*54fd6939SJiyong Park #define AMEVTYPER1F	p15, 0, c13, c15, 7
730*54fd6939SJiyong Park 
731*54fd6939SJiyong Park /* AMCNTENSET0 definitions */
732*54fd6939SJiyong Park #define AMCNTENSET0_Pn_SHIFT	U(0)
733*54fd6939SJiyong Park #define AMCNTENSET0_Pn_MASK	U(0xffff)
734*54fd6939SJiyong Park 
735*54fd6939SJiyong Park /* AMCNTENSET1 definitions */
736*54fd6939SJiyong Park #define AMCNTENSET1_Pn_SHIFT	U(0)
737*54fd6939SJiyong Park #define AMCNTENSET1_Pn_MASK	U(0xffff)
738*54fd6939SJiyong Park 
739*54fd6939SJiyong Park /* AMCNTENCLR0 definitions */
740*54fd6939SJiyong Park #define AMCNTENCLR0_Pn_SHIFT	U(0)
741*54fd6939SJiyong Park #define AMCNTENCLR0_Pn_MASK	U(0xffff)
742*54fd6939SJiyong Park 
743*54fd6939SJiyong Park /* AMCNTENCLR1 definitions */
744*54fd6939SJiyong Park #define AMCNTENCLR1_Pn_SHIFT	U(0)
745*54fd6939SJiyong Park #define AMCNTENCLR1_Pn_MASK	U(0xffff)
746*54fd6939SJiyong Park 
747*54fd6939SJiyong Park /* AMCR definitions */
748*54fd6939SJiyong Park #define AMCR_CG1RZ_SHIFT	U(17)
749*54fd6939SJiyong Park #define AMCR_CG1RZ_BIT		(ULL(1) << AMCR_CG1RZ_SHIFT)
750*54fd6939SJiyong Park 
751*54fd6939SJiyong Park /* AMCFGR definitions */
752*54fd6939SJiyong Park #define AMCFGR_NCG_SHIFT	U(28)
753*54fd6939SJiyong Park #define AMCFGR_NCG_MASK		U(0xf)
754*54fd6939SJiyong Park #define AMCFGR_N_SHIFT		U(0)
755*54fd6939SJiyong Park #define AMCFGR_N_MASK		U(0xff)
756*54fd6939SJiyong Park 
757*54fd6939SJiyong Park /* AMCGCR definitions */
758*54fd6939SJiyong Park #define AMCGCR_CG0NC_SHIFT	U(0)
759*54fd6939SJiyong Park #define AMCGCR_CG0NC_MASK	U(0xff)
760*54fd6939SJiyong Park #define AMCGCR_CG1NC_SHIFT	U(8)
761*54fd6939SJiyong Park #define AMCGCR_CG1NC_MASK	U(0xff)
762*54fd6939SJiyong Park 
763*54fd6939SJiyong Park /*******************************************************************************
764*54fd6939SJiyong Park  * Definitions for DynamicIQ Shared Unit registers
765*54fd6939SJiyong Park  ******************************************************************************/
766*54fd6939SJiyong Park #define CLUSTERPWRDN	p15, 0, c15, c3, 6
767*54fd6939SJiyong Park 
768*54fd6939SJiyong Park /* CLUSTERPWRDN register definitions */
769*54fd6939SJiyong Park #define DSU_CLUSTER_PWR_OFF	0
770*54fd6939SJiyong Park #define DSU_CLUSTER_PWR_ON	1
771*54fd6939SJiyong Park #define DSU_CLUSTER_PWR_MASK	U(1)
772*54fd6939SJiyong Park 
773*54fd6939SJiyong Park #endif /* ARCH_H */
774