xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arm32_macros.S (revision 98e497fd55e2e5d2a6dae4647f2b34d9f9981e75)
1*54925552SJoseph Chen/*
2*54925552SJoseph Chen * (C) Copyright 2017 Rockchip Electronics Co., Ltd
3*54925552SJoseph Chen *
4*54925552SJoseph Chen * SPDX-License-Identifier:     GPL-2.0+
5*54925552SJoseph Chen */
6*54925552SJoseph Chen
7*54925552SJoseph Chen	/* Please keep them sorted based on the CRn register */
8*54925552SJoseph Chen	.macro read_midr reg
9*54925552SJoseph Chen	mrc     p15, 0, \reg, c0, c0, 0
10*54925552SJoseph Chen	.endm
11*54925552SJoseph Chen
12*54925552SJoseph Chen	.macro read_ctr reg
13*54925552SJoseph Chen	mrc	p15, 0, \reg, c0, c0, 1
14*54925552SJoseph Chen	.endm
15*54925552SJoseph Chen
16*54925552SJoseph Chen	.macro read_mpidr reg
17*54925552SJoseph Chen	mrc	p15, 0, \reg, c0, c0, 5
18*54925552SJoseph Chen	.endm
19*54925552SJoseph Chen
20*54925552SJoseph Chen	.macro read_sctlr reg
21*54925552SJoseph Chen	mrc	p15, 0, \reg, c1, c0, 0
22*54925552SJoseph Chen	.endm
23*54925552SJoseph Chen
24*54925552SJoseph Chen	.macro write_sctlr reg
25*54925552SJoseph Chen	mcr	p15, 0, \reg, c1, c0, 0
26*54925552SJoseph Chen	.endm
27*54925552SJoseph Chen
28*54925552SJoseph Chen	.macro write_actlr reg
29*54925552SJoseph Chen	mcr	p15, 0, \reg, c1, c0, 1
30*54925552SJoseph Chen	.endm
31*54925552SJoseph Chen
32*54925552SJoseph Chen	.macro read_actlr reg
33*54925552SJoseph Chen	mrc	p15, 0, \reg, c1, c0, 1
34*54925552SJoseph Chen	.endm
35*54925552SJoseph Chen
36*54925552SJoseph Chen	.macro write_cpacr reg
37*54925552SJoseph Chen	mcr	p15, 0, \reg, c1, c0, 2
38*54925552SJoseph Chen	.endm
39*54925552SJoseph Chen
40*54925552SJoseph Chen	.macro read_cpacr reg
41*54925552SJoseph Chen	mrc	p15, 0, \reg, c1, c0, 2
42*54925552SJoseph Chen	.endm
43*54925552SJoseph Chen
44*54925552SJoseph Chen	.macro read_scr reg
45*54925552SJoseph Chen	mrc	p15, 0, \reg, c1, c1, 0
46*54925552SJoseph Chen	.endm
47*54925552SJoseph Chen
48*54925552SJoseph Chen	.macro write_scr reg
49*54925552SJoseph Chen	mcr	p15, 0, \reg, c1, c1, 0
50*54925552SJoseph Chen	.endm
51*54925552SJoseph Chen
52*54925552SJoseph Chen	.macro write_nsacr reg
53*54925552SJoseph Chen	mcr	p15, 0, \reg, c1, c1, 2
54*54925552SJoseph Chen	.endm
55*54925552SJoseph Chen
56*54925552SJoseph Chen	.macro read_nsacr reg
57*54925552SJoseph Chen	mrc	p15, 0, \reg, c1, c1, 2
58*54925552SJoseph Chen	.endm
59*54925552SJoseph Chen
60*54925552SJoseph Chen	.macro write_ttbr0 reg
61*54925552SJoseph Chen	mcr	p15, 0, \reg, c2, c0, 0
62*54925552SJoseph Chen	.endm
63*54925552SJoseph Chen
64*54925552SJoseph Chen	.macro read_ttbr0 reg
65*54925552SJoseph Chen	mrc	p15, 0, \reg, c2, c0, 0
66*54925552SJoseph Chen	.endm
67*54925552SJoseph Chen
68*54925552SJoseph Chen	.macro write_ttbr1 reg
69*54925552SJoseph Chen	mcr	p15, 0, \reg, c2, c0, 1
70*54925552SJoseph Chen	.endm
71*54925552SJoseph Chen
72*54925552SJoseph Chen	.macro read_ttbr1 reg
73*54925552SJoseph Chen	mrc	p15, 0, \reg, c2, c0, 1
74*54925552SJoseph Chen	.endm
75*54925552SJoseph Chen
76*54925552SJoseph Chen	.macro write_ttbcr reg
77*54925552SJoseph Chen	mcr	p15, 0, \reg, c2, c0, 2
78*54925552SJoseph Chen	.endm
79*54925552SJoseph Chen
80*54925552SJoseph Chen	.macro read_ttbcr reg
81*54925552SJoseph Chen	mrc	p15, 0, \reg, c2, c0, 2
82*54925552SJoseph Chen	.endm
83*54925552SJoseph Chen
84*54925552SJoseph Chen
85*54925552SJoseph Chen	.macro write_dacr reg
86*54925552SJoseph Chen	mcr	p15, 0, \reg, c3, c0, 0
87*54925552SJoseph Chen	.endm
88*54925552SJoseph Chen
89*54925552SJoseph Chen	.macro read_dacr reg
90*54925552SJoseph Chen	mrc	p15, 0, \reg, c3, c0, 0
91*54925552SJoseph Chen	.endm
92*54925552SJoseph Chen
93*54925552SJoseph Chen	.macro read_dfsr reg
94*54925552SJoseph Chen	mrc	p15, 0, \reg, c5, c0, 0
95*54925552SJoseph Chen	.endm
96*54925552SJoseph Chen
97*54925552SJoseph Chen	.macro write_icialluis
98*54925552SJoseph Chen	/*
99*54925552SJoseph Chen	 * Invalidate all instruction caches to PoU, Inner Shareable
100*54925552SJoseph Chen	 * (register ignored)
101*54925552SJoseph Chen	 */
102*54925552SJoseph Chen	mcr	p15, 0, r0, c7, c1, 0
103*54925552SJoseph Chen	.endm
104*54925552SJoseph Chen
105*54925552SJoseph Chen	.macro write_bpiallis
106*54925552SJoseph Chen	/*
107*54925552SJoseph Chen	 * Invalidate entire branch predictor array, Inner Shareable
108*54925552SJoseph Chen	 * (register ignored)
109*54925552SJoseph Chen	 */
110*54925552SJoseph Chen	mcr	p15, 0, r0, c7, c1, 6
111*54925552SJoseph Chen	.endm
112*54925552SJoseph Chen
113*54925552SJoseph Chen	.macro write_iciallu
114*54925552SJoseph Chen	/* Invalidate all instruction caches to PoU (register ignored) */
115*54925552SJoseph Chen	mcr	p15, 0, r0, c7, c5, 0
116*54925552SJoseph Chen	.endm
117*54925552SJoseph Chen
118*54925552SJoseph Chen	.macro write_icimvau reg
119*54925552SJoseph Chen	/* Instruction cache invalidate by MVA */
120*54925552SJoseph Chen	mcr	p15, 0, \reg, c7, c5, 1
121*54925552SJoseph Chen	.endm
122*54925552SJoseph Chen
123*54925552SJoseph Chen	.macro write_bpiall
124*54925552SJoseph Chen	/* Invalidate entire branch predictor array (register ignored) */
125*54925552SJoseph Chen	mcr	p15, 0, r0, c7, c5, 6
126*54925552SJoseph Chen	.endm
127*54925552SJoseph Chen
128*54925552SJoseph Chen	.macro write_dcimvac reg
129*54925552SJoseph Chen	/* Data cache invalidate by MVA */
130*54925552SJoseph Chen	mcr	p15, 0, \reg, c7, c6, 1
131*54925552SJoseph Chen	.endm
132*54925552SJoseph Chen
133*54925552SJoseph Chen	.macro write_dcisw reg
134*54925552SJoseph Chen	/* Data cache invalidate by set/way */
135*54925552SJoseph Chen	mcr	p15, 0, \reg, c7, c6, 2
136*54925552SJoseph Chen	.endm
137*54925552SJoseph Chen
138*54925552SJoseph Chen	.macro write_dccmvac reg
139*54925552SJoseph Chen	/* Data cache clean by MVA */
140*54925552SJoseph Chen	mcr	p15, 0, \reg, c7, c10, 1
141*54925552SJoseph Chen	.endm
142*54925552SJoseph Chen
143*54925552SJoseph Chen	.macro write_dccsw reg
144*54925552SJoseph Chen	/* Data cache clean by set/way */
145*54925552SJoseph Chen	mcr	p15, 0, \reg, c7, c10, 2
146*54925552SJoseph Chen	.endm
147*54925552SJoseph Chen
148*54925552SJoseph Chen	.macro write_dccimvac reg
149*54925552SJoseph Chen	/* Data cache invalidate by MVA */
150*54925552SJoseph Chen	mcr	p15, 0, \reg, c7, c14, 1
151*54925552SJoseph Chen	.endm
152*54925552SJoseph Chen
153*54925552SJoseph Chen	.macro write_dccisw reg
154*54925552SJoseph Chen	/* Data cache clean and invalidate by set/way */
155*54925552SJoseph Chen	mcr	p15, 0, \reg, c7, c14, 2
156*54925552SJoseph Chen	.endm
157*54925552SJoseph Chen
158*54925552SJoseph Chen	.macro write_tlbiall
159*54925552SJoseph Chen	/* Invalidate entire unified TLB (register ignored) */
160*54925552SJoseph Chen	mcr	p15, 0, r0, c8, c7, 0
161*54925552SJoseph Chen	.endm
162*54925552SJoseph Chen
163*54925552SJoseph Chen	.macro write_tlbiallis
164*54925552SJoseph Chen	/* Invalidate entire unified TLB Inner Sharable (register ignored) */
165*54925552SJoseph Chen	mcr	p15, 0, r0, c8, c3, 0
166*54925552SJoseph Chen	.endm
167*54925552SJoseph Chen
168*54925552SJoseph Chen	.macro write_tlbiasidis reg
169*54925552SJoseph Chen	/* Invalidate unified TLB by ASID Inner Sharable */
170*54925552SJoseph Chen	mcr	p15, 0, \reg, c8, c3, 2
171*54925552SJoseph Chen	.endm
172*54925552SJoseph Chen
173*54925552SJoseph Chen	.macro write_tlbimvaais reg
174*54925552SJoseph Chen	/* Invalidate unified TLB by MVA all ASID Inner Sharable */
175*54925552SJoseph Chen	mcr	p15, 0, \reg, c8, c3, 3
176*54925552SJoseph Chen	.endm
177*54925552SJoseph Chen
178*54925552SJoseph Chen	.macro write_prrr reg
179*54925552SJoseph Chen	mcr	p15, 0, \reg, c10, c2, 0
180*54925552SJoseph Chen	.endm
181*54925552SJoseph Chen
182*54925552SJoseph Chen	.macro read_prrr reg
183*54925552SJoseph Chen	mrc	p15, 0, \reg, c10, c2, 0
184*54925552SJoseph Chen	.endm
185*54925552SJoseph Chen
186*54925552SJoseph Chen	.macro write_nmrr reg
187*54925552SJoseph Chen	mcr	p15, 0, \reg, c10, c2, 1
188*54925552SJoseph Chen	.endm
189*54925552SJoseph Chen
190*54925552SJoseph Chen	.macro read_nmrr reg
191*54925552SJoseph Chen	mrc	p15, 0, \reg, c10, c2, 1
192*54925552SJoseph Chen	.endm
193*54925552SJoseph Chen
194*54925552SJoseph Chen	.macro read_vbar reg
195*54925552SJoseph Chen	mrc	p15, 0, \reg, c12, c0, 0
196*54925552SJoseph Chen	.endm
197*54925552SJoseph Chen
198*54925552SJoseph Chen	.macro write_vbar reg
199*54925552SJoseph Chen	mcr	p15, 0, \reg, c12, c0, 0
200*54925552SJoseph Chen	.endm
201*54925552SJoseph Chen
202*54925552SJoseph Chen	.macro write_mvbar reg
203*54925552SJoseph Chen	mcr	p15, 0, \reg, c12, c0, 1
204*54925552SJoseph Chen	.endm
205*54925552SJoseph Chen
206*54925552SJoseph Chen	.macro read_mvbar reg
207*54925552SJoseph Chen	mrc	p15, 0, \reg, c12, c0, 1
208*54925552SJoseph Chen	.endm
209*54925552SJoseph Chen
210*54925552SJoseph Chen	.macro write_fcseidr reg
211*54925552SJoseph Chen	mcr	p15, 0, \reg, c13, c0, 0
212*54925552SJoseph Chen	.endm
213*54925552SJoseph Chen
214*54925552SJoseph Chen	.macro read_fcseidr reg
215*54925552SJoseph Chen	mrc	p15, 0, \reg, c13, c0, 0
216*54925552SJoseph Chen	.endm
217*54925552SJoseph Chen
218*54925552SJoseph Chen	.macro write_contextidr reg
219*54925552SJoseph Chen	mcr	p15, 0, \reg, c13, c0, 1
220*54925552SJoseph Chen	.endm
221*54925552SJoseph Chen
222*54925552SJoseph Chen	.macro read_contextidr reg
223*54925552SJoseph Chen	mrc	p15, 0, \reg, c13, c0, 1
224*54925552SJoseph Chen	.endm
225*54925552SJoseph Chen
226*54925552SJoseph Chen	.macro write_tpidruro reg
227*54925552SJoseph Chen	mcr	p15, 0, \reg, c13, c0, 3
228*54925552SJoseph Chen	.endm
229*54925552SJoseph Chen
230*54925552SJoseph Chen	.macro read_tpidruro reg
231*54925552SJoseph Chen	mrc	p15, 0, \reg, c13, c0, 3
232*54925552SJoseph Chen	.endm
233*54925552SJoseph Chen
234*54925552SJoseph Chen	.macro read_clidr reg
235*54925552SJoseph Chen	/* Cache Level ID Register */
236*54925552SJoseph Chen	mrc	p15, 1, \reg, c0, c0, 1
237*54925552SJoseph Chen	.endm
238*54925552SJoseph Chen
239*54925552SJoseph Chen	.macro read_ccsidr reg
240*54925552SJoseph Chen	/* Cache Size ID Registers */
241*54925552SJoseph Chen	mrc	p15, 1, \reg, c0, c0, 0
242*54925552SJoseph Chen	.endm
243*54925552SJoseph Chen
244*54925552SJoseph Chen	.macro write_csselr reg
245*54925552SJoseph Chen	/* Cache Size Selection Register */
246*54925552SJoseph Chen	mcr	p15, 2, \reg, c0, c0, 0
247*54925552SJoseph Chen	.endm
248*54925552SJoseph Chen
249*54925552SJoseph Chen	/* Cortex A9: pcr, diag registers */
250*54925552SJoseph Chen	.macro write_pcr reg
251*54925552SJoseph Chen	mcr  p15, 0, \reg, c15, c0, 0
252*54925552SJoseph Chen	.endm
253*54925552SJoseph Chen
254*54925552SJoseph Chen	.macro read_pcr reg
255*54925552SJoseph Chen	mrc  p15, 0, \reg, c15, c0, 0
256*54925552SJoseph Chen	.endm
257*54925552SJoseph Chen
258*54925552SJoseph Chen	.macro write_diag reg
259*54925552SJoseph Chen	mcr  p15, 0, \reg, c15, c0, 1
260*54925552SJoseph Chen	.endm
261*54925552SJoseph Chen
262*54925552SJoseph Chen	.macro read_diag reg
263*54925552SJoseph Chen	mrc  p15, 0, \reg, c15, c0, 1
264*54925552SJoseph Chen	.endm
265