import PULS_20160108
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / arch / arm / mach-mt8127 / cpu_dormant.S
1 #include <asm/memory.h>
2 #include <mach/mt_reg_base.h>
3
4 @ Aliases for mode encodings - do not change
5 .equ MODE_USR, 0x10
6 .equ MODE_FIQ, 0x11
7 .equ MODE_IRQ, 0x12
8 .equ MODE_SVC, 0x13
9 .equ MODE_MON, 0x16 @ A-profile (Security Extensions) only
10 .equ MODE_ABT, 0x17
11 .equ MODE_UND, 0x1B
12 .equ MODE_SYS, 0x1F
13 .equ MODE_HYP, 0x1A
14
15 .equ TTBCR_EAE, (1<<31) @ Are we using LPAE?
16
17 .equ PFR0_THUMB_EE_SUPPORT, (1<<12)
18
19 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
20
21
22 @ This function takes three arguments
23 @ r0: Destination start address (must be word aligned)
24 @ r1: Source start address (must be word aligned)
25 @ r2: Number of words to copy
26 @ Return value is updated destination pointer (first unwritten word)
27
28 .global copy_words
29 copy_words:
30 .func
31 push {r3}
32 cmp r2, #0
33 beq 1f
34 2:
35 ldr r3, [r1], #4
36 str r3, [r0], #4
37 subs r2, r2, #1
38 bne 2b
39 1:
40 pop {r3}
41 bx lr
42
43 .endfunc
44
45
46 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
47 .global save_performance_monitors
48
49 save_performance_monitors:
50 .func
51 push {r4, r8, r9, r10}
52
53 mrc p15,0,r8,c9,c12,0 @ PMon: Control Register
54 bic r1,r8,#1
55 mcr p15,0,r1,c9,c12,0 @ disable counter updates from here
56 isb @ 0b0 => PMCR<0>
57 mrc p15,0,r9,c9,c12,5 @ PMon: Event Counter Selection Register
58 mrc p15,0,r10,c9,c12,1 @ PMon: Count Enable Set Reg
59 stm r0!, {r8-r10}
60 mrc p15,0,r8,c9,c12,2 @ PMon: Count Enable Clear Register
61 mrc p15,0,r9,c9,c13,0 @ PMon: Cycle Counter Register
62 mrc p15,0,r10,c9,c12,3 @ PMon: Overflow flag Status Register
63 stm r0!, {r8-r10}
64 mrc p15,0,r8,c9,c14,1 @ PMon: Interrupt Enable Set Registern
65 mrc p15,0,r9,c9,c14,2 @ PMon: Interrupt Enable Clear Register
66 stm r0!, {r8-r9}
67 mrc p15,0,r8,c9,c12,0 @ Read PMon Control Register
68 ubfx r9,r8,#11,#5 @ extract # of event counters, N
69 tst r9, r9
70 beq 1f
71
72 mov r8,#0
73 0:
74 mcr p15,0,r8,c9,c12,5 @ PMon: select CounterN
75 isb
76 mrc p15,0,r3,c9,c13,1 @ PMon: save Event Type Register
77 mrc p15,0,r4,c9,c13,2 @ PMon: save Event Counter Register
78 stm r0!, {r3,r4}
79 add r8,r8,#1 @ increment index
80 @ cmps r8,r9
81 cmp r8,r9
82 bne 0b
83
84 1:
85 pop {r4, r8, r9, r10}
86 bx lr
87 .endfunc
88
89 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
90
91 .global restore_performance_monitors
92 restore_performance_monitors:
93 .func
94 push {r4-r6, r8-r10, lr}
95 @ NOTE: all counters disabled by PMCR<0> == 0 on reset
96
97 ldr r8,[r0] @ r8 = PMCR
98 add r1,r0,#20 @ r1 now points to saved PMOVSR
99 ldr r9,[r1] @ r9 = PMOVSR
100
101 mvn r2,#0 @ generate Register of all 1's
102 mcr p15,0,r2,c9,c14,2 @ disable all counter related interrupts
103 mcr p15,0,r2,c9,c12,3 @ clear all overflow flags
104 isb
105
106 ubfx r12,r8,#11,#5 @ extract # of event counters, N (0-31)
107 tst r12, r12
108 beq 20f
109
110 add r1,r0,#32 @ r1 now points to the 1st saved event counter
111
112 @@ Restore counters
113 mov r6,#0
114 10:
115 mcr p15,0,r6,c9,c12,5 @ PMon: select CounterN
116 isb
117 ldm r1!, {r3,r4} @ Read saved data
118 mcr p15,0,r3,c9,c13,1 @ PMon: restore Event Type Register
119 mcr p15,0,r4,c9,c13,2 @ PMon: restore Event Counter Register
120 add r6,r6,#1 @ increment index
121 @ cmps r6,r12
122 cmp r6,r12
123 bne 10b
124
125 20:
126 tst r9, #0x80000000 @ check for cycle count overflow flag
127 beq 40f
128 mcr p15,0,r2,c9,c13,0 @ set Cycle Counter to all 1's
129 isb
130 mov r3, #1
131 mcr p15,0,r3,c9,c12,0 @ set the PMCR global enable bit
132 mov r3, #0x80000000
133 mcr p15,0,r3,c9,c12,1 @ enable the Cycle Counter
134 isb
135
136 30:
137 mrc p15,0,r4,c9,c12,3 @ check cycle count overflow now set
138 movs r4,r4 @ test bit<31>
139 bpl 30b
140 mcr p15,0,r3,c9,c12,2 @ disable the Cycle Counter
141
142 40:
143 mov r1, #0
144 mcr p15,0,r1,c9,c12,0 @ clear the PMCR global enable bit
145 isb
146
147 @@ Restore left regs but PMCR
148 add r1,r0,#4 @ r1 now points to the PMSELR
149 ldm r1!,{r3,r4}
150 mcr p15,0,r3,c9,c12,5 @ PMon: Event Counter Selection Reg
151 mcr p15,0,r4,c9,c12,1 @ PMon: Count Enable Set Reg
152 ldm r1!, {r3,r4}
153 mcr p15,0,r4,c9,c13,0 @ PMon: Cycle Counter Register
154 ldm r1!,{r3,r4}
155 mcr p15,0,r3,c9,c14,2 @ PMon: Interrupt Enable Clear Reg
156 mcr p15,0,r4,c9,c14,1 @ PMon: Interrupt Enable Set Reg
157 ldr r3,[r1]
158 isb
159 ldr r0,[r0]
160 mcr p15,0,r0,c9,c12,0 @ restore the PM Control Register
161 isb
162
163 pop {r4-r6, r8-r10, pc}
164 .endfunc
165
166 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
167
168 .global save_banked_registers
169 save_banked_registers:
170 .func
171
172 PUSH {r3, lr}
173
174 mrs r2, CPSR @ save current mode
175 and r3, r2, #0x1f @ If we are in HYP mode then use the virt.
176 cmp r3, #MODE_HYP @ instructions to save the banked registers
177 beq save_in_hyp @ without changing the mode
178
179 cps #MODE_SYS @ switch to System mode
180 str sp,[r0], #4 @ save the User SP
181 str lr,[r0], #4 @ save the User LR
182 cps #MODE_ABT @ switch to Abort mode
183 str sp,[r0], #4 @ save the current SP
184 mrs r3,SPSR
185 stm r0!,{r3,lr} @ save the current SPSR, LR
186 cps #MODE_UND @ switch to Undefined mode
187 str sp,[r0], #4 @ save the current SP
188 mrs r3,SPSR
189 stm r0!,{r3,lr} @ save the current SPSR, LR
190 cps #MODE_IRQ @ switch to IRQ mode
191 str sp,[r0], #4 @ save the current SP
192 mrs r3,SPSR
193 stm r0!,{r3,lr} @ save the current SPSR, LR
194 cps #MODE_FIQ @ switch to FIQ mode
195 str SP,[r0], #4 @ save the current SP
196 mrs r3,SPSR
197 stm r0!,{r3,r8-r12,lr} @ save the current SPSR,r8-r12,LR
198 msr CPSR_cxsf, r2 @ switch back to original mode
199
200 POP {r3, lr}
201 STR SP, [r0], #4 @ save the current SP
202 MRS r3, SPSR
203 STM r0!, {r2, r3, r4-r12, LR} @ save the current CPSR,SPSR,r4-r12,LR
204 dsb
205
206 bx lr
207
208 save_in_hyp :
209 @ mrs r1, SP_usr @ rewrite
210 cps #MODE_SYS @ switch to System mode
211 str sp,[r1], #4 @ save the User SP
212 stm r0!, {r1}
213
214 @ mrs r1, SP_und @ rewrite
215 cps #MODE_UND @ switch to Undefined mode
216 str sp,[r1], #4 @ save the current SP
217 @ mrs r2, SPSR_und @ rewrite
218 cps #MODE_UND @ switch to Undefined mode
219 mrs r2,SPSR @ save the current SPSR
220 @ mrs r3, LR_und @ rewrite
221 cps #MODE_UND @ switch to Undefined mode
222 str lr,[r3], #4 @ save the current LR
223 stm r0!, {r1-r3}
224
225 @ mrs r1, SP_abt @ rewrite
226 cps #MODE_ABT @ switch to Abort mode
227 str sp,[r1], #4 @ save the current SP
228 @ mrs r2, SPSR_abt @ rewrite
229 cps #MODE_ABT @ switch to Abort mode
230 mrs r2,SPSR @ save the current SPSR
231 @ mrs r3, LR_abt @ rewrite
232 str lr,[r3], #4 @ save the current LR
233 stm r0!, {r1-r3}
234
235 @ mrs r1, SP_svc @ rewrite
236 cps #MODE_SVC @ switch to SVC mode
237 str sp,[r1], #4 @ save the current SP
238 @ mrs r2, SPSR_svc @ rewrite
239 cps #MODE_SVC @ switch to SVC mode
240 mrs r2,SPSR @ save the current SPSR
241 @ mrs r3, LR_svc @ rewrite
242 cps #MODE_SVC @ switch to SVC mode
243 str lr,[r3], #4 @ save the current LR
244 stm r0!, {r1-r3}
245
246 @ mrs r1, SP_irq @ rewrite
247 cps #MODE_IRQ @ switch to IRQ mode
248 str sp,[r1], #4 @ save the current SP
249 @ mrs r2, SPSR_irq @ rewrite
250 cps #MODE_IRQ @ switch to IRQ mode
251 mrs r2,SPSR @ save the current SPSR
252 @ mrs r3, LR_irq @ rewrite
253 cps #MODE_IRQ @ switch to IRQ mode
254 str lr,[r3], #4 @ save the current LR
255 stm r0!, {r1-r3}
256
257 @ mrs r1, SP_fiq @ rewrite
258 cps #MODE_FIQ @ switch to FIQ mode
259 str sp,[r1], #4 @ save the current SP
260 @ mrs r2, SPSR_fiq @ rewrite
261 cps #MODE_FIQ @ switch to FIQ mode
262 mrs r2,SPSR @ save the current SPSR
263 @ mrs r3, LR_fiq @ rewrite
264 cps #MODE_FIQ @ switch to FIQ mode
265 str lr,[r3], #4 @ save the current LR
266 stm r0!, {r1-r3}
267
268 @ mrs r1, r8_fiq @ rewrite
269 @ mrs r2, r9_fiq @ rewrite
270 @ mrs r3, r10_fiq @ rewrite
271 @ stm r0!, {r1-r3} @ rewrite
272 @ mrs r1, r11_fiq @ rewrite
273 @ mrs r2, r12_fiq @ rewrite
274 @ stm r0!, {r1-r2} @ rewrite
275 cps #MODE_FIQ @ switch to FIQ mode
276 stm r0!,{r8-r12} @ save the current r8-r12
277
278 bx lr
279 .endfunc
280
281 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
282
283 .global restore_banked_registers
284 restore_banked_registers:
285 .func
286 mrs r2, CPSR @ save current mode
287 and r3, r2, #0x1f @ If we are in HYP mode then use the virt.
288 cmp r3, #MODE_HYP @ instructions to restore the banked registers
289 beq rest_in_hyp @ without changing the mode
290
291 cps #MODE_SYS @ switch to System mode
292 ldr sp,[r0],#4 @ restore the User SP
293 ldr lr,[r0],#4 @ restore the User LR
294 cps #MODE_ABT @ switch to Abort mode
295 ldr sp,[r0],#4 @ restore the current SP
296 ldm r0!,{r3,lr} @ restore the current LR
297 msr SPSR_fsxc,r3 @ restore the current SPSR
298 cps #MODE_UND @ switch to Undefined mode
299 ldr sp,[r0],#4 @ restore the current SP
300 ldm r0!,{r3,lr} @ restore the current LR
301 msr SPSR_fsxc,r3 @ restore the current SPSR
302 cps #MODE_IRQ @ switch to IRQ mode
303 ldr sp,[r0],#4 @ restore the current SP
304 ldm r0!,{r3,lr} @ restore the current LR
305 msr SPSR_fsxc,r3 @ restore the current SPSR
306 cps #MODE_FIQ @ switch to FIQ mode
307 ldr sp,[r0],#4 @ restore the current SP
308 ldm r0!,{r3,r8-r12,lr} @ restore the current r8-r12,LR
309 msr SPSR_fsxc,r3 @ restore the current SPSR
310 msr CPSR_cxsf, r2 @ switch back to original mode
311
312 LDR SP, [r0], #4 @ restore the current SP
313 LDM r0!, {r2, r3, r4-r12, LR} @ restore the current r4-r12,LR
314 MSR SPSR_fsxc, r3 @ restore the current SPSR
315 MSR CPSR_fsxc, r2 @ restore the current CPSR
316 dsb
317 0:
318 bx lr
319
320 rest_in_hyp:
321 ldm r0!, {r1}
322 @ msr SP_usr, r1 @ rewrite
323 cps #MODE_SYS @ switch to System mode
324 ldr sp,[r1],#4 @ restore the User SP
325
326 ldm r0!, {r1-r3}
327 @ msr SP_und, r1 @ rewrite
328 cps #MODE_UND @ switch to Undefined mode
329 ldr sp,[r1],#4 @ restore the User SP
330 @ msr SPSR_und, r2 @ rewrite
331 cps #MODE_UND @ switch to Undefined mode
332 msr SPSR_fsxc,r2 @ restore the current SPSR
333 @ msr LR_und, r3 @ rewrite
334 cps #MODE_UND @ switch to Undefined mode
335 ldr lr,[r3],#4 @ restore the User LR
336
337 ldm r0!, {r1-r3}
338 @ msr SP_abt, r1 @ rewrite
339 cps #MODE_ABT @ switch to Abort mode
340 ldr sp,[r1],#4 @ restore the User SP
341 @ msr SPSR_abt, r2 @ rewrite
342 cps #MODE_ABT @ switch to Abort mode
343 msr SPSR_fsxc,r2 @ restore the current SPSR
344 @ msr LR_abt, r3 @ rewrite
345 cps #MODE_ABT @ switch to Abort mode
346 ldr lr,[r3],#4 @ restore the User LR
347
348 ldm r0!, {r1-r3}
349 @ msr SP_svc, r1 @ rewrite
350 cps #MODE_SVC @ switch to SVC mode
351 ldr sp,[r1],#4 @ restore the User SP
352 @ msr SPSR_svc, r2 @ rewrite
353 cps #MODE_SVC @ switch to SVC mode
354 msr SPSR_fsxc,r2 @ restore the current SPSR
355 @ msr LR_svc, r3 @ rewrite
356 cps #MODE_SVC @ switch to SVC mode
357 ldr lr,[r3],#4 @ restore the User LR
358
359 ldm r0!, {r1-r3}
360 @ msr SP_irq, r1 @ rewrite
361 cps #MODE_IRQ @ switch to IRQ mode
362 ldr sp,[r1],#4 @ restore the User SP
363 @ msr SPSR_irq, r2 @ rewrite
364 cps #MODE_IRQ @ switch to IRQ mode
365 msr SPSR_fsxc,r2 @ restore the current SPSR
366 @ msr LR_irq, r3 @ rewrite
367 cps #MODE_IRQ @ switch to IRQ mode
368 ldr lr,[r3],#4 @ restore the User LR
369
370 ldm r0!, {r1-r3}
371 @ msr SP_fiq, r1 @ rewrite
372 cps #MODE_FIQ @ switch to FIQ mode
373 ldr sp,[r1],#4 @ restore the User SP
374 @ msr SPSR_fiq, r2 @ rewrite
375 cps #MODE_FIQ @ switch to FIQ mode
376 msr SPSR_fsxc,r2 @ restore the current SPSR
377 @ msr LR_fiq, r3 @ rewrite
378 cps #MODE_FIQ @ switch to FIQ mode
379 ldr lr,[r3],#4 @ restore the User LR
380
381 @ ldm r0!, {r1-r3}
382 @ msr r8_fiq, r1 @ rewrite
383 @ msr r9_fiq, r2 @ rewrite
384 @ msr r10_fiq, r3 @ rewrite
385 @ ldm r0!, {r1-r2}
386 @ msr r11_fiq, r1 @ rewrite
387 @ msr r12_fiq, r2 @ rewrite
388 cps #MODE_FIQ @ switch to FIQ mode
389 ldm r0!,{r8-r12} @ restore the current r8-r12
390
391 bx lr
392 .endfunc
393
394 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
395
396 .global save_cp15
397 save_cp15:
398 .func
399 @ CSSELR Cache Size Selection Register
400 mrc p15,2,r3,c0,c0,0
401 str r3,[r0], #4
402
403 @ IMPLEMENTATION DEFINED - proprietary features:
404 @ (CP15 register 15, TCM support, lockdown support, etc.)
405
406 @ NOTE: IMP DEF registers might have save and restore order that relate
407 @ to other CP15 registers or logical grouping requirements and can
408 @ therefore occur at any point in this sequence.
409 bx lr
410 .endfunc
411
412 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
413
414 .global restore_cp15
415 restore_cp15:
416 .func
417 @ CSSELR ?Cache Size Selection Register
418 ldr r3,[r0], #4
419 mcr p15,2,r3,c0,c0,0
420
421 bx lr
422 .endfunc
423
424 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
425 @ Function called with two arguments:
426 @ r0 contains address to store control registers
427 @ r1 is non-zero if we are Secure
428
429 .global save_control_registers
430 save_control_registers:
431 .func
432 cmp r1, #0 @ Are we Secure?
433 mrc p15,0,r2,c1,c0,1 @ ACTLR - Auxiliary Control Register
434 mrc p15,0,r3,c1,c0,0 @ SCTLR - System Control Register
435 mrc p15,0,r12,c1,c0,2 @ CPACR - Coprocessor Access Control Register
436 stm r0!, {r2-r3, r12}
437
438 mrcne p15,0,r1,c12,c0,1 @ MVBAR - Monitor Vector Base Address Register
439 mrcne p15,0,r2,c1,c1,0 @ Secure Configuration Register
440 mrcne p15,0,r3,c1,c1,1 @ Secure Debug Enable Register
441 mrcne p15,0,r12,c1,c1,2 @ Non-Secure Access Control Register
442 stmne r0!, {r1-r3,r12}
443
444 mrc p15,0,r1,c13,c0,1 @ CONTEXTIDR
445 mrc p15,0,r2,c13,c0,2 @ TPIDRURW
446 mrc p15,0,r3,c13,c0,3 @ TPIDRURO
447 mrc p15,0,r12,c13,c0,4 @ TPIDRPRW
448 stm r0!, {r1-r3,r12}
449
450 @ The next two registers are only present if ThumbEE is implemented
451 mrc p15, 0, r1, c0, c1, 0 @ Read ID_PFR0
452 tst r1, #PFR0_THUMB_EE_SUPPORT
453 mrcne p14,6,r1,c0,c0,0 @ TEECR
454 mrcne p14,6,r2,c1,c0,0 @ TEEHBR
455 stmne r0!, {r1, r2}
456
457 mrc p14,7,r1,c1,c0,0 @ JOSCR
458 mrc p14,7,r2,c2,c0,0 @ JMCR
459 stm r0!, {r1, r2}
460 bx lr
461 .endfunc
462
463 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
464 @ Function called with two arguments:
465 @ r0 contains address to read control registers
466 @ r1 is non-zero if we are Secure
467
468 .global restore_control_registers
469 restore_control_registers:
470 .func
471 cmp r1, #0 @ Are we Secure?
472 ldm r0!, {r2-r3, r12}
473 mcr p15,0,r2,c1,c0,1 @ ACTLR - Auxiliary Control Register
474 mcr p15,0,r3,c1,c0,0 @ SCTLR - System Control Register
475 mcr p15,0,r12,c1,c0,2 @ CPACR - Coprocessor Access Control Register
476
477 ldmne r0!, {r1-r3,r12}
478 mcrne p15,0,r1,c12,c0,1 @ MVBAR - Monitor Vector Base Address Register
479 mcrne p15,0,r2,c1,c1,0 @ Secure Configuration Register
480 mcrne p15,0,r3,c1,c1,1 @ Secure Debug Enable Register
481 mcrne p15,0,r12,c1,c1,2 @ Non-Secure Access Control Register
482
483 ldm r0!, {r1-r3,r12}
484 mcr p15,0,r1,c13,c0,1 @ CONTEXTIDR
485 mcr p15,0,r2,c13,c0,2 @ TPIDRURW
486 mcr p15,0,r3,c13,c0,3 @ TPIDRURO
487 mcr p15,0,r12,c13,c0,4 @ TPIDRPRW
488
489 @ The next two registers are only present if ThumbEE is implemented
490 mrc p15, 0, r1, c0, c1, 0 @ Read ID_PFR0
491 tst r1, #PFR0_THUMB_EE_SUPPORT
492 ldmne r0!, {r1,r2}
493 mcrne p14,6,r1,c0,c0,0 @ TEECR
494 mcrne p14,6,r2,c1,c0,0 @ TEEHBR
495
496 ldm r0!, {r1, r2}
497 mcr p14,7,r1,c1,c0,0 @ JOSCR
498 mcr p14,7,r2,c2,c0,0 @ JMCR
499 isb
500 bx lr
501 .endfunc
502
503 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
504
505 .global save_mmu
506 save_mmu:
507 .func
508 push {r4, r5, r6, r7}
509 @ ASSUMPTION: no useful fault address / fault status information
510
511 mrc p15,0,r4,c12,c0,0 @ VBAR
512 mrc p15,0,r5,c2,c0,2 @ TTBCR
513
514 tst r5, #TTBCR_EAE @ Are we using LPAE?
515
516 @ save 32 or 64 bit TTBRs
517 mrceq p15,0,r6,c2,c0,0 @ 32 bit TTBR0
518 mrceq p15,0,r7,c2,c0,1 @ 32 bit TTBR1
519 mrrcne p15,0,r6,r7,c2 @ 64 bit TTBR0
520 stm r0!, {r4-r7}
521 mrrcne p15,1,r6,r7,c2 @ 64 bit TTBR1
522 stmne r0!, {r6-r7}
523
524 mrc p15,0,r4,c3,c0,0 @ DACR
525 mrc p15,0,r5,c7,c4,0 @ PAR
526 mrc p15,0,r6,c10,c2,0 @ PRRR
527 mrc p15,0,r7,c10,c2,1 @ NMRR
528 stm r0!, {r4-r7}
529
530 pop {r4, r5, r6, r7}
531 bx lr
532 .endfunc
533
534 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
535
536 .global restore_mmu
537 restore_mmu:
538 .func
539 push {r4, r5, r6, r7}
540 ldm r0!, {r4-r7}
541 mcr p15,0,r4,c12,c0,0 @ VBAR
542 mcr p15,0,r5,c2,c0,2 @ TTBCR
543
544 tst r5, #TTBCR_EAE @ Are we using LPAE?
545
546 @ restore 32 or 64 bit TTBRs
547 mcreq p15,0,r6,c2,c0,0 @ 32 bit TTBR0
548 mcreq p15,0,r7,c2,c0,1 @ 32 bit TTBR1
549 mcrrne p15,0,r6,r7,c2 @ 64-bit TTBR0
550 ldmne r0!, {r6-r7}
551 mcrrne p15,1,r6,r7,c2 @ 64-bit TTBR1
552
553 ldm r0!, {r4-r7}
554 mcr p15,0,r4,c3,c0,0 @ DACR
555 mcr p15,0,r5,c7,c4,0 @ PAR
556 mcr p15,0,r6,c10,c2,0 @ PRRR
557 mcr p15,0,r7,c10,c2,1 @ NMRR
558
559 pop {r4, r5, r6, r7}
560 bx lr
561 .endfunc
562
563 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
564
565 .global save_mpu
566 save_mpu:
567 .func
568 mrc p15, 0, r1, c0, c0, 4 @ Read MPUIR
569 and r1, r1, #0xff00
570 lsr r1, r1, #8 @ Extract number of MPU regions
571
572 @ Loop over the number of regions
573 10:
574 cmp r1, #0
575 beq 20f
576 sub r1, r1, #1
577 mcr p15, 0, r1, c6, c2, 0 @ Write RGNR
578 mrc p15, 0, r2, c6, c1, 0 @ Read MPU Region Base Address Register
579 mrc p15, 0, r3, c6, c1, 2 @ Read Data MPU Region Size and Enable Register
580 mrc p15, 0, r12, c6, c1, 4 @ Read Region access control Register
581 stm r0!, {r2, r3, r12}
582 b 10b
583
584 20:
585 bx lr
586 .endfunc
587
588 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
589
590 .global restore_mpu
591 restore_mpu:
592 .func
593 mrc p15, 0, r1, c0, c0, 4 @ Read MPUIR
594 and r1, r1, #0xff00
595 lsr r1, r1, #8 @ Extract number of MPU regions
596
597 @ Loop over the number of regions
598 10:
599 cmp r1, #0
600 beq 20f
601 ldm r0!, {r2, r3, r12}
602 sub r1, r1, #1
603 mcr p15, 0, r1, c6, c2, 0 @ Write RGNR
604 mcr p15, 0, r2, c6, c1, 0 @ Write MPU Region Base Address Register
605 mcr p15, 0, r3, c6, c1, 2 @ Write Data MPU Region Size and Enable Register
606 mcr p15, 0, r12, c6, c1, 4 @ Write Region access control Register
607 b 10b
608
609 20:
610 bx lr
611 .endfunc
612
613 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
614
615 .global save_vfp
616 save_vfp:
617 .func
618 @ FPU state save/restore.
619 @ FPSID,MVFR0 and MVFR1 don't get serialized/saved (Read Only).
620 mrc p15,0,r3,c1,c0,2 @ CPACR allows CP10 and CP11 access
621 ORR r2,r3,#0xF00000
622 mcr p15,0,r2,c1,c0,2
623 isb
624 mrc p15,0,r2,c1,c0,2
625 and r2,r2,#0xF00000
626 cmp r2,#0xF00000
627 beq 0f
628 movs r2, #0
629 b 2f
630
631 @ Save configuration registers and enable.
632 0:
633 FMRX r12,FPEXC @ vmrs r12,FPEXC
634 str r12,[r0],#4 @ Save the FPEXC
635 @ Enable FPU access to save/restore the other registers.
636 ldr r2,=0x40000000
637 FMXR FPEXC,r2 @ vmsr FPEXC,r2
638 FMRX r2,FPSCR @ vmrs r2,FPSCR
639 str r2,[r0],#4 @ Save the FPSCR
640 @ Store the VFP-D16 registers.
641 vstm r0!, {D0-D15}
642 @ Check for Advanced SIMD/VFP-D32 support
643 FMRX r2,MVFR0 @ vmrs r2,MVFR0
644 and r2,r2,#0xF @ extract the A_SIMD bitfield
645 cmp r2, #0x2
646 blt 1f
647 @ Store the Advanced SIMD/VFP-D32 additional registers.
648 vstm r0!, {D16-D31}
649
650 @ IMPLEMENTATION DEFINED: save any subarchitecture defined state
651 @ NOTE: Don't change the order of the FPEXC and CPACR restores
652
653 @ Restore the original En bit of FPU.
654 1:
655 FMXR FPEXC,r12 @ vmsr FPEXC,r12
656
657 @ Restore the original CPACR value.
658 2:
659 mcr p15,0,r3,c1,c0,2
660 bx lr
661 .endfunc
662
663 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
664
665 .global restore_vfp
666 restore_vfp:
667 .func
668 @ FPU state save/restore. Obviously FPSID,MVFR0 and MVFR1 don't get
669 @ serialized (RO).
670 @ Modify CPACR to allow CP10 and CP11 access
671 mrc p15,0,r1,c1,c0,2
672 ORR r2,r1,#0x00F00000
673 mcr p15,0,r2,c1,c0,2
674 @ Enable FPU access to save/restore the rest of registers.
675 ldr r2,=0x40000000
676 FMXR FPEXC, r2 @ vmsr FPEXC, r2
677 @ Recover FPEXC and FPSCR. These will be restored later.
678 ldm r0!,{r3,r12}
679 @ Restore the VFP-D16 registers.
680 vldm r0!, {D0-D15}
681 @ Check for Advanced SIMD/VFP-D32 support
682 FMRX r2, MVFR0 @ vmrs r2, MVFR0
683 and r2,r2,#0xF @ extract the A_SIMD bitfield
684 cmp r2, #0x2
685 blt 0f
686
687 @ Store the Advanced SIMD/VFP-D32 additional registers.
688 vldm r0!, {D16-D31}
689
690 @ IMPLEMENTATION DEFINED: restore any subarchitecture defined state
691 0:
692 @ Restore configuration registers and enable.
693 @ Restore FPSCR _before_ FPEXC since FPEXC could disable FPU
694 @ and make setting FPSCR unpredictable.
695 FMXR FPSCR,r12 @ vmsr FPSCR,r12
696 @ Restore FPEXC after FPSCR
697 FMXR FPEXC,r3 @ vmsr FPEXC,r3
698 @ Restore CPACR
699 @ will restore in mt_restore_control_registers
700 @ mcr p15,0,r1,c1,c0,2
701
702 bx lr
703 .endfunc
704
705 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
706 @ If r1 is 0, we assume that the OS is not using the Virtualization extensions,
707 @ and that the warm boot code will set up CNTHCTL correctly. If r1 is non-zero
708 @ then CNTHCTL is saved and restored
709 @ CNTP_CVAL will be preserved as it is in the always-on domain.
710
711 .global save_generic_timer
712 save_generic_timer:
713 .func
714 mrc p15,0,r2,c14,c2,1 @ read CNTP_CTL
715 mrc p15,0,r3,c14,c2,0 @ read CNTP_TVAL
716 mrc p15,0,r12,c14,c1,0 @ read CNTKCTL
717 stm r0!, {r2, r3, r12}
718 cmp r1, #0
719 mrcne p15,4,r1,c14,c1,0 @ read CNTHCTL
720 strne r1, [r0], #4
721 bx lr
722 .endfunc
723
724 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
725
726 .global restore_generic_timer
727 restore_generic_timer:
728 .func
729 ldm r0!, {r2, r3, r12}
730 mcr p15,0,r3,c14,c2,0 @ write CNTP_TVAL
731 mcr p15,0,r12,c14,c1,0 @ write CNTKCTL
732 mcr p15,0,r2,c14,c2,1 @ write CNTP_CTL
733 cmp r1, #0
734 ldrne r1, [r0], #4
735 mcrne p15,4,r1,c14,c1,0 @ write CNTHCTL
736 bx lr
737 .endfunc
738
739 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
740
741 .global save_fault_status
742 save_fault_status:
743 .func
744 mrc p15,0,r1,c6,c0,0 @ read DFAR
745 mrc p15,0,r2,c6,c0,2 @ read IFAR
746 mrc p15,0,r3,c5,c0,0 @ read DFSR
747 mrc p15,0,r12,c5,c0,1 @ read IFSR
748 stm r0!, {r1,r2,r3,r12}
749 mrc p15,0,r1,c5,c1,0 @ read ADFSR
750 mrc p15,0,r2,c5,c1,1 @ read AIFSR
751 stm r0!, {r1,r2}
752 bx lr
753 .endfunc
754
755 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
756
757 .global restore_fault_status
758 restore_fault_status:
759 .func
760 ldm r0!, {r1,r2,r3,r12}
761 mcr p15,0,r1,c6,c0,0 @ write DFAR
762 mcr p15,0,r2,c6,c0,2 @ write IFAR
763 mcr p15,0,r3,c5,c0,0 @ write DFSR
764 mcr p15,0,r12,c5,c0,1 @ write IFSR
765 ldm r0!, {r1,r2}
766 mcr p15,0,r1,c5,c1,0 @ write ADFSR
767 mcr p15,0,r2,c5,c1,1 @ write AIFSR
768 bx lr
769 .endfunc
770
771 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
772
773 .global write_cntp_ctl
774 write_cntp_ctl:
775 .func
776 mcr p15, 0, r0, c14, c2, 1
777 dsb
778 isb
779 bx lr
780 .endfunc
781
782 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
783
784 .global read_cpuid
785 read_cpuid:
786 .func
787 mrc p15, 0, r0, c0, c0, 5
788 ands r0, r0, #0xf
789 bx lr
790 .endfunc
791
792 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
793
794 .global read_clusterid
795 read_clusterid:
796 .func
797 mrc p15, 0, r0, c0, c0, 5
798 lsr r0, r0, #0x8
799 ands r0, r0, #0xf
800 bx lr
801 .endfunc
802
803 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
804
805 .global read_nsacr
806 read_nsacr:
807 .func
808 mrc p15, 0, r0, c1, c1, 2
809 bx lr
810 .endfunc
811
812 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
813 .global read_dbg_osdlr
814 read_dbg_osdlr:
815 .func
816 mrc p14, 0, r0, c1, c3, 4 @ Read OS Double Lock Register
817 bx lr
818 .endfunc
819 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
820 .global read_dbg_devid
821 read_dbg_devid:
822 .func
823 mrc p14, 0, r0, c7, c2, 7
824 bx lr
825 .endfunc
826 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
827 .global read_dbg_didr
828 read_dbg_didr:
829 .func
830 mrc p14, 0, r0, c0, c0, 0
831 bx lr
832 .endfunc
833 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
834 .global read_dbg_drar
835 read_dbg_drar:
836 .func
837 mrc p14, 0, r0, c1, c0, 0 @ Read Debug ROM Address Register
838 bx lr
839 .endfunc
840 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
841 .global read_dbg_dsar
842 read_dbg_dsar:
843 .func
844 mrc p14, 0, r0, c2, c0, 0 @ Read Debug Self Address Offset Register
845 bx lr
846 .endfunc
847 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
848 .global read_dbg_dtrrxext
849 read_dbg_dtrrxext:
850 .func
851 mrc p14, 0, r0, c0, c0, 2
852 bx lr
853 .endfunc
854 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
855 .global read_dbg_dtrtxext
856 read_dbg_dtrtxext:
857 .func
858 mrc p14, 0, r0, c0, c3, 2
859 bx lr
860 .endfunc
861 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
862 .global read_dbg_dscrext
863 read_dbg_dscrext:
864 .func
865 mrc p14, 0, r0, c0, c2, 2
866 bx lr
867 .endfunc
868 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
869 .global read_dbg_wfar
870 read_dbg_wfar:
871 .func
872 mrc p14, 0, r0, c0, c6, 0
873 bx lr
874 .endfunc
875 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
876 .global read_dbg_vcr
877 read_dbg_vcr:
878 .func
879 mrc p14, 0, r0, c0, c7, 0
880 bx lr
881 .endfunc
882 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
883 .global read_dbg_claimclr
884 read_dbg_claimclr:
885 .func
886 mrc p14, 0, r0, c7, c9, 6
887 bx lr
888 .endfunc
889 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
890 .global read_dbg_bvr0
891 read_dbg_bvr0:
892 .func
893 mrc p14, 0, r0, c0, c0, 4
894 bx lr
895 .endfunc
896 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
897 .global read_dbg_bvr1
898 read_dbg_bvr1:
899 .func
900 mrc p14, 0, r0, c0, c1, 4
901 bx lr
902 .endfunc
903 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
904 .global read_dbg_bvr2
905 read_dbg_bvr2:
906 .func
907 mrc p14, 0, r0, c0, c2, 4
908 bx lr
909 .endfunc
910 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
911 .global read_dbg_bvr3
912 read_dbg_bvr3:
913 .func
914 mrc p14, 0, r0, c0, c3, 4
915 bx lr
916 .endfunc
917 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
918 .global read_dbg_bvr4
919 read_dbg_bvr4:
920 .func
921 mrc p14, 0, r0, c0, c4, 4
922 bx lr
923 .endfunc
924 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
925 .global read_dbg_bvr5
926 read_dbg_bvr5:
927 .func
928 mrc p14, 0, r0, c0, c5, 4
929 bx lr
930 .endfunc
931 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
932 .global read_dbg_bvr6
933 read_dbg_bvr6:
934 .func
935 mrc p14, 0, r0, c0, c6, 4
936 bx lr
937 .endfunc
938 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
939 .global read_dbg_bvr7
940 read_dbg_bvr7:
941 .func
942 mrc p14, 0, r0, c0, c7, 4
943 bx lr
944 .endfunc
945 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
946 .global read_dbg_bvr8
947 read_dbg_bvr8:
948 .func
949 mrc p14, 0, r0, c0, c8, 4
950 bx lr
951 .endfunc
952 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
953 .global read_dbg_bvr9
954 read_dbg_bvr9:
955 .func
956 mrc p14, 0, r0, c0, c9, 4
957 bx lr
958 .endfunc
959 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
960 .global read_dbg_bvr10
961 read_dbg_bvr10:
962 .func
963 mrc p14, 0, r0, c0, c10, 4
964 bx lr
965 .endfunc
966 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
967 .global read_dbg_bvr11
968 read_dbg_bvr11:
969 .func
970 mrc p14, 0, r0, c0, c11, 4
971 bx lr
972 .endfunc
973 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
974 .global read_dbg_bvr12
975 read_dbg_bvr12:
976 .func
977 mrc p14, 0, r0, c0, c12, 4
978 bx lr
979 .endfunc
980 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
981 .global read_dbg_bvr13
982 read_dbg_bvr13:
983 .func
984 mrc p14, 0, r0, c0, c13, 4
985 bx lr
986 .endfunc
987 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
988 .global read_dbg_bvr14
989 read_dbg_bvr14:
990 .func
991 mrc p14, 0, r0, c0, c14, 4
992 bx lr
993 .endfunc
994 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
995 .global read_dbg_bvr15
996 read_dbg_bvr15:
997 .func
998 mrc p14, 0, r0, c0, c15, 4
999 bx lr
1000 .endfunc
1001 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1002 .global read_dbg_bcr0
1003 read_dbg_bcr0:
1004 .func
1005 mrc p14, 0, r0, c0, c0, 5
1006 bx lr
1007 .endfunc
1008 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1009 .global read_dbg_bcr1
1010 read_dbg_bcr1:
1011 .func
1012 mrc p14, 0, r0, c0, c1, 5
1013 bx lr
1014 .endfunc
1015 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1016 .global read_dbg_bcr2
1017 read_dbg_bcr2:
1018 .func
1019 mrc p14, 0, r0, c0, c2, 5
1020 bx lr
1021 .endfunc
1022 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1023 .global read_dbg_bcr3
1024 read_dbg_bcr3:
1025 .func
1026 mrc p14, 0, r0, c0, c3, 5
1027 bx lr
1028 .endfunc
1029 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1030 .global read_dbg_bcr4
1031 read_dbg_bcr4:
1032 .func
1033 mrc p14, 0, r0, c0, c4, 5
1034 bx lr
1035 .endfunc
1036 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1037 .global read_dbg_bcr5
1038 read_dbg_bcr5:
1039 .func
1040 mrc p14, 0, r0, c0, c5, 5
1041 bx lr
1042 .endfunc
1043 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1044 .global read_dbg_bcr6
1045 read_dbg_bcr6:
1046 .func
1047 mrc p14, 0, r0, c0, c6, 5
1048 bx lr
1049 .endfunc
1050 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1051 .global read_dbg_bcr7
1052 read_dbg_bcr7:
1053 .func
1054 mrc p14, 0, r0, c0, c7, 5
1055 bx lr
1056 .endfunc
1057 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1058 .global read_dbg_bcr8
1059 read_dbg_bcr8:
1060 .func
1061 mrc p14, 0, r0, c0, c8, 5
1062 bx lr
1063 .endfunc
1064 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1065 .global read_dbg_bcr9
1066 read_dbg_bcr9:
1067 .func
1068 mrc p14, 0, r0, c0, c9, 5
1069 bx lr
1070 .endfunc
1071 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1072 .global read_dbg_bcr10
1073 read_dbg_bcr10:
1074 .func
1075 mrc p14, 0, r0, c0, c10, 5
1076 bx lr
1077 .endfunc
1078 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1079 .global read_dbg_bcr11
1080 read_dbg_bcr11:
1081 .func
1082 mrc p14, 0, r0, c0, c11, 5
1083 bx lr
1084 .endfunc
1085 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1086 .global read_dbg_bcr12
1087 read_dbg_bcr12:
1088 .func
1089 mrc p14, 0, r0, c0, c12, 5
1090 bx lr
1091 .endfunc
1092 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1093 .global read_dbg_bcr13
1094 read_dbg_bcr13:
1095 .func
1096 mrc p14, 0, r0, c0, c13, 5
1097 bx lr
1098 .endfunc
1099 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1100 .global read_dbg_bcr14
1101 read_dbg_bcr14:
1102 .func
1103 mrc p14, 0, r0, c0, c14, 5
1104 bx lr
1105 .endfunc
1106 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1107 .global read_dbg_bcr15
1108 read_dbg_bcr15:
1109 .func
1110 mrc p14, 0, r0, c0, c15, 5
1111 bx lr
1112 .endfunc
1113 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1114 .global read_dbg_wvr0
1115 read_dbg_wvr0:
1116 .func
1117 mrc p14, 0, r0, c0, c0, 6
1118 bx lr
1119 .endfunc
1120 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1121 .global read_dbg_wvr1
1122 read_dbg_wvr1:
1123 .func
1124 mrc p14, 0, r0, c0, c1, 6
1125 bx lr
1126 .endfunc
1127 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1128 .global read_dbg_wvr2
1129 read_dbg_wvr2:
1130 .func
1131 mrc p14, 0, r0, c0, c2, 6
1132 bx lr
1133 .endfunc
1134 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1135 .global read_dbg_wvr3
1136 read_dbg_wvr3:
1137 .func
1138 mrc p14, 0, r0, c0, c3, 6
1139 bx lr
1140 .endfunc
1141 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1142 .global read_dbg_wvr4
1143 read_dbg_wvr4:
1144 .func
1145 mrc p14, 0, r0, c0, c4, 6
1146 bx lr
1147 .endfunc
1148 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1149 .global read_dbg_wvr5
1150 read_dbg_wvr5:
1151 .func
1152 mrc p14, 0, r0, c0, c5, 6
1153 bx lr
1154 .endfunc
1155 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1156 .global read_dbg_wvr6
1157 read_dbg_wvr6:
1158 .func
1159 mrc p14, 0, r0, c0, c6, 6
1160 bx lr
1161 .endfunc
1162 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1163 .global read_dbg_wvr7
1164 read_dbg_wvr7:
1165 .func
1166 mrc p14, 0, r0, c0, c7, 6
1167 bx lr
1168 .endfunc
1169 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1170 .global read_dbg_wvr8
1171 read_dbg_wvr8:
1172 .func
1173 mrc p14, 0, r0, c0, c8, 6
1174 bx lr
1175 .endfunc
1176 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1177 .global read_dbg_wvr9
1178 read_dbg_wvr9:
1179 .func
1180 mrc p14, 0, r0, c0, c9, 6
1181 bx lr
1182 .endfunc
1183 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1184 .global read_dbg_wvr10
1185 read_dbg_wvr10:
1186 .func
1187 mrc p14, 0, r0, c0, c10, 6
1188 bx lr
1189 .endfunc
1190 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1191 .global read_dbg_wvr11
1192 read_dbg_wvr11:
1193 .func
1194 mrc p14, 0, r0, c0, c11, 6
1195 bx lr
1196 .endfunc
1197 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1198 .global read_dbg_wvr12
1199 read_dbg_wvr12:
1200 .func
1201 mrc p14, 0, r0, c0, c12, 6
1202 bx lr
1203 .endfunc
1204 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1205 .global read_dbg_wvr13
1206 read_dbg_wvr13:
1207 .func
1208 mrc p14, 0, r0, c0, c13, 6
1209 bx lr
1210 .endfunc
1211 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1212 .global read_dbg_wvr14
1213 read_dbg_wvr14:
1214 .func
1215 mrc p14, 0, r0, c0, c14, 6
1216 bx lr
1217 .endfunc
1218 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1219 .global read_dbg_wvr15
1220 read_dbg_wvr15:
1221 .func
1222 mrc p14, 0, r0, c0, c15, 6
1223 bx lr
1224 .endfunc
1225 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1226 .global read_dbg_wcr0
1227 read_dbg_wcr0:
1228 .func
1229 mrc p14, 0, r0, c0, c0, 7
1230 bx lr
1231 .endfunc
1232 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1233 .global read_dbg_wcr1
1234 read_dbg_wcr1:
1235 .func
1236 mrc p14, 0, r0, c0, c1, 7
1237 bx lr
1238 .endfunc
1239 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1240 .global read_dbg_wcr2
1241 read_dbg_wcr2:
1242 .func
1243 mrc p14, 0, r0, c0, c2, 7
1244 bx lr
1245 .endfunc
1246 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1247 .global read_dbg_wcr3
1248 read_dbg_wcr3:
1249 .func
1250 mrc p14, 0, r0, c0, c3, 7
1251 bx lr
1252 .endfunc
1253 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1254 .global read_dbg_wcr4
1255 read_dbg_wcr4:
1256 .func
1257 mrc p14, 0, r0, c0, c4, 7
1258 bx lr
1259 .endfunc
1260 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1261 .global read_dbg_wcr5
1262 read_dbg_wcr5:
1263 .func
1264 mrc p14, 0, r0, c0, c5, 7
1265 bx lr
1266 .endfunc
1267 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1268 .global read_dbg_wcr6
1269 read_dbg_wcr6:
1270 .func
1271 mrc p14, 0, r0, c0, c6, 7
1272 bx lr
1273 .endfunc
1274 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1275 .global read_dbg_wcr7
1276 read_dbg_wcr7:
1277 .func
1278 mrc p14, 0, r0, c0, c7, 7
1279 bx lr
1280 .endfunc
1281 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1282 .global read_dbg_wcr8
1283 read_dbg_wcr8:
1284 .func
1285 mrc p14, 0, r0, c0, c8, 7
1286 bx lr
1287 .endfunc
1288 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1289 .global read_dbg_wcr9
1290 read_dbg_wcr9:
1291 .func
1292 mrc p14, 0, r0, c0, c9, 7
1293 bx lr
1294 .endfunc
1295 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1296 .global read_dbg_wcr10
1297 read_dbg_wcr10:
1298 .func
1299 mrc p14, 0, r0, c0, c10, 7
1300 bx lr
1301 .endfunc
1302 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1303 .global read_dbg_wcr11
1304 read_dbg_wcr11:
1305 .func
1306 mrc p14, 0, r0, c0, c11, 7
1307 bx lr
1308 .endfunc
1309 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1310 .global read_dbg_wcr12
1311 read_dbg_wcr12:
1312 .func
1313 mrc p14, 0, r0, c0, c12, 7
1314 bx lr
1315 .endfunc
1316 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1317 .global read_dbg_wcr13
1318 read_dbg_wcr13:
1319 .func
1320 mrc p14, 0, r0, c0, c13, 7
1321 bx lr
1322 .endfunc
1323 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1324 .global read_dbg_wcr14
1325 read_dbg_wcr14:
1326 .func
1327 mrc p14, 0, r0, c0, c14, 7
1328 bx lr
1329 .endfunc
1330 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1331 .global read_dbg_wcr15
1332 read_dbg_wcr15:
1333 .func
1334 mrc p14, 0, r0, c0, c15, 7
1335 bx lr
1336 .endfunc
1337 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1338 .global read_dbg_bxvr0
1339 read_dbg_bxvr0:
1340 .func
1341 mrc p14, 0, r0, c1, c0, 1
1342 bx lr
1343 .endfunc
1344 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1345 .global read_dbg_bxvr1
1346 read_dbg_bxvr1:
1347 .func
1348 mrc p14, 0, r0, c1, c1, 1
1349 bx lr
1350 .endfunc
1351 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1352 .global read_dbg_bxvr2
1353 read_dbg_bxvr2:
1354 .func
1355 mrc p14, 0, r0, c1, c2, 1
1356 bx lr
1357 .endfunc
1358 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1359 .global read_dbg_bxvr3
1360 read_dbg_bxvr3:
1361 .func
1362 mrc p14, 0, r0, c1, c3, 1
1363 bx lr
1364 .endfunc
1365 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1366 .global read_dbg_bxvr4
1367 read_dbg_bxvr4:
1368 .func
1369 mrc p14, 0, r0, c1, c4, 1
1370 bx lr
1371 .endfunc
1372 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1373 .global read_dbg_bxvr5
1374 read_dbg_bxvr5:
1375 .func
1376 mrc p14, 0, r0, c1, c5, 1
1377 bx lr
1378 .endfunc
1379 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1380 .global read_dbg_bxvr6
1381 read_dbg_bxvr6:
1382 .func
1383 mrc p14, 0, r0, c1, c6, 1
1384 bx lr
1385 .endfunc
1386 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1387 .global read_dbg_bxvr7
1388 read_dbg_bxvr7:
1389 .func
1390 mrc p14, 0, r0, c1, c7, 1
1391 bx lr
1392 .endfunc
1393 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1394 .global read_dbg_bxvr8
1395 read_dbg_bxvr8:
1396 .func
1397 mrc p14, 0, r0, c1, c8, 1
1398 bx lr
1399 .endfunc
1400 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1401 .global read_dbg_bxvr9
1402 read_dbg_bxvr9:
1403 .func
1404 mrc p14, 0, r0, c1, c9, 1
1405 bx lr
1406 .endfunc
1407 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1408 .global read_dbg_bxvr10
1409 read_dbg_bxvr10:
1410 .func
1411 mrc p14, 0, r0, c1, c10, 1
1412 bx lr
1413 .endfunc
1414 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1415 .global read_dbg_bxvr11
1416 read_dbg_bxvr11:
1417 .func
1418 mrc p14, 0, r0, c1, c11, 1
1419 bx lr
1420 .endfunc
1421 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1422 .global read_dbg_bxvr12
1423 read_dbg_bxvr12:
1424 .func
1425 mrc p14, 0, r0, c1, c12, 1
1426 bx lr
1427 .endfunc
1428 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1429 .global read_dbg_bxvr13
1430 read_dbg_bxvr13:
1431 .func
1432 mrc p14, 0, r0, c1, c13, 1
1433 bx lr
1434 .endfunc
1435 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1436 .global read_dbg_bxvr14
1437 read_dbg_bxvr14:
1438 .func
1439 mrc p14, 0, r0, c1, c14, 1
1440 bx lr
1441 .endfunc
1442 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1443 .global read_dbg_bxvr15
1444 read_dbg_bxvr15:
1445 .func
1446 mrc p14, 0, r0, c1, c15, 1
1447 bx lr
1448 .endfunc
1449 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1450 .global write_dbg_osdlr
1451 write_dbg_osdlr:
1452 .func
1453 mcr p14, 0, r0, c1, c3, 4 @ Write OS Double Lock Register
1454 isb
1455 bx lr
1456 .endfunc
1457 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1458 .global write_dbg_oslar
1459 write_dbg_oslar:
1460 .func
1461 mcr p14, 0, r0, c1, c0, 4 @ Write OS Lock address register
1462 isb
1463 bx lr
1464 .endfunc
1465 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1466 .global write_dbg_dtrrxext
1467 write_dbg_dtrrxext:
1468 .func
1469 mcr p14, 0, r0, c0, c0, 2
1470 bx lr
1471 .endfunc
1472 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1473 .global write_dbg_dtrtxext
1474 write_dbg_dtrtxext:
1475 .func
1476 mcr p14, 0, r0, c0, c3, 2
1477 bx lr
1478 .endfunc
1479 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1480 .global write_dbg_dscrext
1481 write_dbg_dscrext:
1482 .func
1483 mcr p14, 0, r0, c0, c2, 2
1484 bx lr
1485 .endfunc
1486 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1487 .global write_dbg_wfar
1488 write_dbg_wfar:
1489 .func
1490 mcr p14, 0, r0, c0, c6, 0
1491 bx lr
1492 .endfunc
1493 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1494 .global write_dbg_vcr
1495 write_dbg_vcr:
1496 .func
1497 mcr p14, 0, r0, c0, c7, 0
1498 bx lr
1499 .endfunc
1500 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1501 .global write_dbg_claimset
1502 write_dbg_claimset:
1503 .func
1504 mcr p14, 0, r0, c7, c8, 6
1505 bx lr
1506 .endfunc
1507 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1508 .global write_dbg_bvr0
1509 write_dbg_bvr0:
1510 .func
1511 mcr p14, 0, r0, c0, c0, 4
1512 bx lr
1513 .endfunc
1514 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1515 .global write_dbg_bvr1
1516 write_dbg_bvr1:
1517 .func
1518 mcr p14, 0, r0, c0, c1, 4
1519 bx lr
1520 .endfunc
1521 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1522 .global write_dbg_bvr2
1523 write_dbg_bvr2:
1524 .func
1525 mcr p14, 0, r0, c0, c2, 4
1526 bx lr
1527 .endfunc
1528 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1529 .global write_dbg_bvr3
1530 write_dbg_bvr3:
1531 .func
1532 mcr p14, 0, r0, c0, c3, 4
1533 bx lr
1534 .endfunc
1535 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1536 .global write_dbg_bvr4
1537 write_dbg_bvr4:
1538 .func
1539 mcr p14, 0, r0, c0, c4, 4
1540 bx lr
1541 .endfunc
1542 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1543 .global write_dbg_bvr5
1544 write_dbg_bvr5:
1545 .func
1546 mcr p14, 0, r0, c0, c5, 4
1547 bx lr
1548 .endfunc
1549 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1550 .global write_dbg_bvr6
1551 write_dbg_bvr6:
1552 .func
1553 mcr p14, 0, r0, c0, c6, 4
1554 bx lr
1555 .endfunc
1556 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1557 .global write_dbg_bvr7
1558 write_dbg_bvr7:
1559 .func
1560 mcr p14, 0, r0, c0, c7, 4
1561 bx lr
1562 .endfunc
1563 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1564 .global write_dbg_bvr8
1565 write_dbg_bvr8:
1566 .func
1567 mcr p14, 0, r0, c0, c8, 4
1568 bx lr
1569 .endfunc
1570 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1571 .global write_dbg_bvr9
1572 write_dbg_bvr9:
1573 .func
1574 mcr p14, 0, r0, c0, c9, 4
1575 bx lr
1576 .endfunc
1577 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1578 .global write_dbg_bvr10
1579 write_dbg_bvr10:
1580 .func
1581 mcr p14, 0, r0, c0, c10, 4
1582 bx lr
1583 .endfunc
1584 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1585 .global write_dbg_bvr11
1586 write_dbg_bvr11:
1587 .func
1588 mcr p14, 0, r0, c0, c11, 4
1589 bx lr
1590 .endfunc
1591 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1592 .global write_dbg_bvr12
1593 write_dbg_bvr12:
1594 .func
1595 mcr p14, 0, r0, c0, c12, 4
1596 bx lr
1597 .endfunc
1598 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1599 .global write_dbg_bvr13
1600 write_dbg_bvr13:
1601 .func
1602 mcr p14, 0, r0, c0, c13, 4
1603 bx lr
1604 .endfunc
1605 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1606 .global write_dbg_bvr14
1607 write_dbg_bvr14:
1608 .func
1609 mcr p14, 0, r0, c0, c14, 4
1610 bx lr
1611 .endfunc
1612 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1613 .global write_dbg_bvr15
1614 write_dbg_bvr15:
1615 .func
1616 mcr p14, 0, r0, c0, c15, 4
1617 bx lr
1618 .endfunc
1619 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1620 .global write_dbg_bcr0
1621 write_dbg_bcr0:
1622 .func
1623 mcr p14, 0, r0, c0, c0, 5
1624 bx lr
1625 .endfunc
1626 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1627 .global write_dbg_bcr1
1628 write_dbg_bcr1:
1629 .func
1630 mcr p14, 0, r0, c0, c1, 5
1631 bx lr
1632 .endfunc
1633 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1634 .global write_dbg_bcr2
1635 write_dbg_bcr2:
1636 .func
1637 mcr p14, 0, r0, c0, c2, 5
1638 bx lr
1639 .endfunc
1640 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1641 .global write_dbg_bcr3
1642 write_dbg_bcr3:
1643 .func
1644 mcr p14, 0, r0, c0, c3, 5
1645 bx lr
1646 .endfunc
1647 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1648 .global write_dbg_bcr4
1649 write_dbg_bcr4:
1650 .func
1651 mcr p14, 0, r0, c0, c4, 5
1652 bx lr
1653 .endfunc
1654 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1655 .global write_dbg_bcr5
1656 write_dbg_bcr5:
1657 .func
1658 mcr p14, 0, r0, c0, c5, 5
1659 bx lr
1660 .endfunc
1661 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1662 .global write_dbg_bcr6
1663 write_dbg_bcr6:
1664 .func
1665 mcr p14, 0, r0, c0, c6, 5
1666 bx lr
1667 .endfunc
1668 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1669 .global write_dbg_bcr7
1670 write_dbg_bcr7:
1671 .func
1672 mcr p14, 0, r0, c0, c7, 5
1673 bx lr
1674 .endfunc
1675 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1676 .global write_dbg_bcr8
1677 write_dbg_bcr8:
1678 .func
1679 mcr p14, 0, r0, c0, c8, 5
1680 bx lr
1681 .endfunc
1682 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1683 .global write_dbg_bcr9
1684 write_dbg_bcr9:
1685 .func
1686 mcr p14, 0, r0, c0, c9, 5
1687 bx lr
1688 .endfunc
1689 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1690 .global write_dbg_bcr10
1691 write_dbg_bcr10:
1692 .func
1693 mcr p14, 0, r0, c0, c10, 5
1694 bx lr
1695 .endfunc
1696 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1697 .global write_dbg_bcr11
1698 write_dbg_bcr11:
1699 .func
1700 mcr p14, 0, r0, c0, c11, 5
1701 bx lr
1702 .endfunc
1703 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1704 .global write_dbg_bcr12
1705 write_dbg_bcr12:
1706 .func
1707 mcr p14, 0, r0, c0, c12, 5
1708 bx lr
1709 .endfunc
1710 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1711 .global write_dbg_bcr13
1712 write_dbg_bcr13:
1713 .func
1714 mcr p14, 0, r0, c0, c13, 5
1715 bx lr
1716 .endfunc
1717 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1718 .global write_dbg_bcr14
1719 write_dbg_bcr14:
1720 .func
1721 mcr p14, 0, r0, c0, c14, 5
1722 bx lr
1723 .endfunc
1724 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1725 .global write_dbg_bcr15
1726 write_dbg_bcr15:
1727 .func
1728 mcr p14, 0, r0, c0, c15, 5
1729 bx lr
1730 .endfunc
1731 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1732 .global write_dbg_wvr0
1733 write_dbg_wvr0:
1734 .func
1735 mcr p14, 0, r0, c0, c0, 6
1736 bx lr
1737 .endfunc
1738 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1739 .global write_dbg_wvr1
1740 write_dbg_wvr1:
1741 .func
1742 mcr p14, 0, r0, c0, c1, 6
1743 bx lr
1744 .endfunc
1745 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1746 .global write_dbg_wvr2
1747 write_dbg_wvr2:
1748 .func
1749 mcr p14, 0, r0, c0, c2, 6
1750 bx lr
1751 .endfunc
1752 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1753 .global write_dbg_wvr3
1754 write_dbg_wvr3:
1755 .func
1756 mcr p14, 0, r0, c0, c3, 6
1757 bx lr
1758 .endfunc
1759 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1760 .global write_dbg_wvr4
1761 write_dbg_wvr4:
1762 .func
1763 mcr p14, 0, r0, c0, c4, 6
1764 bx lr
1765 .endfunc
1766 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1767 .global write_dbg_wvr5
1768 write_dbg_wvr5:
1769 .func
1770 mcr p14, 0, r0, c0, c5, 6
1771 bx lr
1772 .endfunc
1773 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1774 .global write_dbg_wvr6
1775 write_dbg_wvr6:
1776 .func
1777 mcr p14, 0, r0, c0, c6, 6
1778 bx lr
1779 .endfunc
1780 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1781 .global write_dbg_wvr7
1782 write_dbg_wvr7:
1783 .func
1784 mcr p14, 0, r0, c0, c7, 6
1785 bx lr
1786 .endfunc
1787 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1788 .global write_dbg_wvr8
1789 write_dbg_wvr8:
1790 .func
1791 mcr p14, 0, r0, c0, c8, 6
1792 bx lr
1793 .endfunc
1794 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1795 .global write_dbg_wvr9
1796 write_dbg_wvr9:
1797 .func
1798 mcr p14, 0, r0, c0, c9, 6
1799 bx lr
1800 .endfunc
1801 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1802 .global write_dbg_wvr10
1803 write_dbg_wvr10:
1804 .func
1805 mcr p14, 0, r0, c0, c10, 6
1806 bx lr
1807 .endfunc
1808 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1809 .global write_dbg_wvr11
1810 write_dbg_wvr11:
1811 .func
1812 mcr p14, 0, r0, c0, c11, 6
1813 bx lr
1814 .endfunc
1815 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1816 .global write_dbg_wvr12
1817 write_dbg_wvr12:
1818 .func
1819 mcr p14, 0, r0, c0, c12, 6
1820 bx lr
1821 .endfunc
1822 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1823 .global write_dbg_wvr13
1824 write_dbg_wvr13:
1825 .func
1826 mcr p14, 0, r0, c0, c13, 6
1827 bx lr
1828 .endfunc
1829 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1830 .global write_dbg_wvr14
1831 write_dbg_wvr14:
1832 .func
1833 mcr p14, 0, r0, c0, c14, 6
1834 bx lr
1835 .endfunc
1836 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1837 .global write_dbg_wvr15
1838 write_dbg_wvr15:
1839 .func
1840 mcr p14, 0, r0, c0, c15, 6
1841 bx lr
1842 .endfunc
1843 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1844 .global write_dbg_wcr0
1845 write_dbg_wcr0:
1846 .func
1847 mcr p14, 0, r0, c0, c0, 7
1848 bx lr
1849 .endfunc
1850 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1851 .global write_dbg_wcr1
1852 write_dbg_wcr1:
1853 .func
1854 mcr p14, 0, r0, c0, c1, 7
1855 bx lr
1856 .endfunc
1857 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1858 .global write_dbg_wcr2
1859 write_dbg_wcr2:
1860 .func
1861 mcr p14, 0, r0, c0, c2, 7
1862 bx lr
1863 .endfunc
1864 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1865 .global write_dbg_wcr3
1866 write_dbg_wcr3:
1867 .func
1868 mcr p14, 0, r0, c0, c3, 7
1869 bx lr
1870 .endfunc
1871 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1872 .global write_dbg_wcr4
1873 write_dbg_wcr4:
1874 .func
1875 mcr p14, 0, r0, c0, c4, 7
1876 bx lr
1877 .endfunc
1878 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1879 .global write_dbg_wcr5
1880 write_dbg_wcr5:
1881 .func
1882 mcr p14, 0, r0, c0, c5, 7
1883 bx lr
1884 .endfunc
1885 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1886 .global write_dbg_wcr6
1887 write_dbg_wcr6:
1888 .func
1889 mcr p14, 0, r0, c0, c6, 7
1890 bx lr
1891 .endfunc
1892 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1893 .global write_dbg_wcr7
1894 write_dbg_wcr7:
1895 .func
1896 mcr p14, 0, r0, c0, c7, 7
1897 bx lr
1898 .endfunc
1899 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1900 .global write_dbg_wcr8
1901 write_dbg_wcr8:
1902 .func
1903 mcr p14, 0, r0, c0, c8, 7
1904 bx lr
1905 .endfunc
1906 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1907 .global write_dbg_wcr9
1908 write_dbg_wcr9:
1909 .func
1910 mcr p14, 0, r0, c0, c9, 7
1911 bx lr
1912 .endfunc
1913 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1914 .global write_dbg_wcr10
1915 write_dbg_wcr10:
1916 .func
1917 mcr p14, 0, r0, c0, c10, 7
1918 bx lr
1919 .endfunc
1920 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1921 .global write_dbg_wcr11
1922 write_dbg_wcr11:
1923 .func
1924 mcr p14, 0, r0, c0, c11, 7
1925 bx lr
1926 .endfunc
1927 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1928 .global write_dbg_wcr12
1929 write_dbg_wcr12:
1930 .func
1931 mcr p14, 0, r0, c0, c12, 7
1932 bx lr
1933 .endfunc
1934 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1935 .global write_dbg_wcr13
1936 write_dbg_wcr13:
1937 .func
1938 mcr p14, 0, r0, c0, c13, 7
1939 bx lr
1940 .endfunc
1941 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1942 .global write_dbg_wcr14
1943 write_dbg_wcr14:
1944 .func
1945 mcr p14, 0, r0, c0, c14, 7
1946 bx lr
1947 .endfunc
1948 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1949 .global write_dbg_wcr15
1950 write_dbg_wcr15:
1951 .func
1952 mcr p14, 0, r0, c0, c15, 7
1953 bx lr
1954 .endfunc
1955 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1956 .global write_dbg_bxvr0
1957 write_dbg_bxvr0:
1958 .func
1959 mcr p14, 0, r0, c1, c0, 1
1960 bx lr
1961 .endfunc
1962 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1963 .global write_dbg_bxvr1
1964 write_dbg_bxvr1:
1965 .func
1966 mcr p14, 0, r0, c1, c1, 1
1967 bx lr
1968 .endfunc
1969 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1970 .global write_dbg_bxvr2
1971 write_dbg_bxvr2:
1972 .func
1973 mcr p14, 0, r0, c1, c2, 1
1974 bx lr
1975 .endfunc
1976 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1977 .global write_dbg_bxvr3
1978 write_dbg_bxvr3:
1979 .func
1980 mcr p14, 0, r0, c1, c3, 1
1981 bx lr
1982 .endfunc
1983 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1984 .global write_dbg_bxvr4
1985 write_dbg_bxvr4:
1986 .func
1987 mcr p14, 0, r0, c1, c4, 1
1988 bx lr
1989 .endfunc
1990 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1991 .global write_dbg_bxvr5
1992 write_dbg_bxvr5:
1993 .func
1994 mcr p14, 0, r0, c1, c5, 1
1995 bx lr
1996 .endfunc
1997 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1998 .global write_dbg_bxvr6
1999 write_dbg_bxvr6:
2000 .func
2001 mcr p14, 0, r0, c1, c6, 1
2002 bx lr
2003 .endfunc
2004 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2005 .global write_dbg_bxvr7
2006 write_dbg_bxvr7:
2007 .func
2008 mcr p14, 0, r0, c1, c7, 1
2009 bx lr
2010 .endfunc
2011 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2012 .global write_dbg_bxvr8
2013 write_dbg_bxvr8:
2014 .func
2015 mcr p14, 0, r0, c1, c8, 1
2016 bx lr
2017 .endfunc
2018 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2019 .global write_dbg_bxvr9
2020 write_dbg_bxvr9:
2021 .func
2022 mcr p14, 0, r0, c1, c9, 1
2023 bx lr
2024 .endfunc
2025 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2026 .global write_dbg_bxvr10
2027 write_dbg_bxvr10:
2028 .func
2029 mcr p14, 0, r0, c1, c10, 1
2030 bx lr
2031 .endfunc
2032 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2033 .global write_dbg_bxvr11
2034 write_dbg_bxvr11:
2035 .func
2036 mcr p14, 0, r0, c1, c11, 1
2037 bx lr
2038 .endfunc
2039 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2040 .global write_dbg_bxvr12
2041 write_dbg_bxvr12:
2042 .func
2043 mcr p14, 0, r0, c1, c12, 1
2044 bx lr
2045 .endfunc
2046 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2047 .global write_dbg_bxvr13
2048 write_dbg_bxvr13:
2049 .func
2050 mcr p14, 0, r0, c1, c13, 1
2051 bx lr
2052 .endfunc
2053 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2054 .global write_dbg_bxvr14
2055 write_dbg_bxvr14:
2056 .func
2057 mcr p14, 0, r0, c1, c14, 1
2058 bx lr
2059 .endfunc
2060 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2061 .global write_dbg_bxvr15
2062 write_dbg_bxvr15:
2063 .func
2064 mcr p14, 0, r0, c1, c15, 1
2065 bx lr
2066 .endfunc
2067 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2068 .global read_id_pfr1
2069 read_id_pfr1:
2070 .func
2071 mrc p15, 0, r0, c0, c1, 1
2072 bx lr
2073 .endfunc
2074 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2075 .global invalidate_unified_TLB_inner_shareable
2076 invalidate_unified_TLB_inner_shareable:
2077 .func
2078 mov r0, #0
2079 mcr p15, 0, r0, c8, c3, 0
2080 bx lr
2081 .endfunc
2082
2083 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2084 @ Function called with two arguments:
2085 @ r0 contains address to read control registers
2086 @ r1 is non-zero if we are Secure
2087
2088 .global mt_restore_control_registers
2089 mt_restore_control_registers:
2090 .func
2091 cmp r1, #0 @ Are we Secure?
2092 ldm r0!, {r2-r3, r12}
2093 mcr p15,0,r2,c1,c0,1 @ ACTLR - Auxiliary Control Register
2094 @ mcr p15,0,r3,c1,c0,0 @ SCTLR - System Control Register - move to tail
2095 mcr p15,0,r12,c1,c0,2 @ CPACR - Coprocessor Access Control Register
2096
2097 @-----------------cannot use r3
2098
2099 @ldmne r0!, {r1-r3,r12}
2100 @mcrne p15,0,r1,c12,c0,1 @ MVBAR - Monitor Vector Base Address Register
2101 @mcrne p15,0,r2,c1,c1,0 @ Secure Configuration Register
2102 @mcrne p15,0,r3,c1,c1,1 @ Secure Debug Enable Register
2103 @mcrne p15,0,r12,c1,c1,2 @ Non-Secure Access Control Register
2104 @
2105 ldmne r0!, {r1,r2}
2106 mcrne p15,0,r1,c12,c0,1 @ MVBAR - Monitor Vector Base Address Register
2107 mcrne p15,0,r2,c1,c1,0 @ Secure Configuration Register
2108 ldmne r0!, {r1,r2}
2109 mcrne p15,0,r1,c1,c1,1 @ Secure Debug Enable Register
2110 mcrne p15,0,r2,c1,c1,2 @ Non-Secure Access Control Register
2111
2112 @ldm r0!, {r1-r3,r12}
2113 @mcr p15,0,r1,c13,c0,1 @ CONTEXTIDR
2114 @mcr p15,0,r2,c13,c0,2 @ TPIDRURW
2115 @mcr p15,0,r3,c13,c0,3 @ TPIDRURO
2116 @mcr p15,0,r12,c13,c0,4 @ TPIDRPRW
2117 @
2118 ldm r0!, {r1,r2}
2119 mcr p15,0,r1,c13,c0,1 @ CONTEXTIDR
2120 mcr p15,0,r2,c13,c0,2 @ TPIDRURW
2121 ldm r0!, {r1,r2}
2122 mcr p15,0,r1,c13,c0,3 @ TPIDRURO
2123 mcr p15,0,r2,c13,c0,4 @ TPIDRPRW
2124
2125 @ The next two registers are only present if ThumbEE is implemented
2126 mrc p15, 0, r1, c0, c1, 0 @ Read ID_PFR0
2127 tst r1, #PFR0_THUMB_EE_SUPPORT
2128 ldmne r0!, {r1,r2}
2129 mcrne p14,6,r1,c0,c0,0 @ TEECR
2130 mcrne p14,6,r2,c1,c0,0 @ TEEHBR
2131
2132 ldm r0!, {r1, r2}
2133 mcr p14,7,r1,c1,c0,0 @ JOSCR
2134 mcr p14,7,r2,c2,c0,0 @ JMCR
2135 isb
2136
2137 mov r2, r3
2138 @-----------------can use r3
2139
2140 @ mt
2141 @ adr r3, new_stack
2142 @ ldr r3, [r3, #0]
2143
2144 mrc p15, 0, r3, c0, c0, 5
2145 ands r3, r3, #0xf
2146
2147 cmp r3, #0
2148 beq L_CPU_0
2149 cmp r3, #1
2150 beq L_CPU_1
2151 cmp r3, #2
2152 beq L_CPU_2
2153 cmp r3, #3
2154 beq L_CPU_3
2155
2156 L_CPU_0:
2157 adrl r3, new_stack_0
2158 beq L_CPU_FINAL
2159 L_CPU_1:
2160 adrl r3, new_stack_1
2161 beq L_CPU_FINAL
2162 L_CPU_2:
2163 adrl r3, new_stack_2
2164 beq L_CPU_FINAL
2165 L_CPU_3:
2166 adrl r3, new_stack_3
2167 beq L_CPU_FINAL
2168
2169 L_CPU_FINAL:
2170 ldr r3, [r3, #0]
2171
2172 mov sp, r3
2173
2174 add lr, lr, #PAGE_OFFSET
2175 @ sub lr, lr, #PHYS_OFFSET
2176 ldr r1,=PHYS_OFFSET
2177 sub lr, lr, r1
2178
2179 add r11, r11, #PAGE_OFFSET
2180 @ sub r11, r11, #PHYS_OFFSET
2181 ldr r1,=PHYS_OFFSET
2182 sub r11, r11, r1
2183
2184 mcr p15,0,r2,c1,c0,0 @ SCTLR - System Control Register
2185
2186 mov pc, lr
2187 isb
2188 nop
2189 nop
2190 nop
2191 nop
2192 nop
2193 nop
2194 nop
2195 nop
2196 nop
2197 nop
2198
2199 bx lr
2200 .endfunc
2201
2202 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2203 @ workaround for ARM CA7 Errata 802022
2204 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2205 .global cpu_wake_up_errata_802022
2206 cpu_wake_up_errata_802022:
2207 .func
2208 1:
2209 isb
2210 dsb
2211 wfi
2212 b 1b
2213 .endfunc
2214
2215 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2216
2217 .global cpu_wake_up
2218 cpu_wake_up:
2219 .func
2220
2221 .if 0
2222 1:
2223 nop
2224 b 1b
2225 .endif
2226
2227 nop
2228 nop
2229 nop
2230 nop
2231 nop
2232 nop
2233 nop
2234 nop
2235 nop
2236 nop
2237 nop
2238
2239 mrc p15, 0, r0, c0, c0, 5
2240 ands r0, r0, #0xf
2241
2242 cmp r0, #0
2243 beq L_CPU_0_WP
2244 cmp r0, #1
2245 beq L_CPU_1_WP
2246 cmp r0, #2
2247 beq L_CPU_2_WP
2248 cmp r0, #3
2249 beq L_CPU_3_WP
2250
2251 L_CPU_0_WP:
2252 adrl r0, new_stack_0
2253 beq L_CPU_FINAL_WP
2254 L_CPU_1_WP:
2255 adrl r0, new_stack_1
2256 beq L_CPU_FINAL_WP
2257 L_CPU_2_WP:
2258 adrl r0, new_stack_2
2259 beq L_CPU_FINAL_WP
2260 L_CPU_3_WP:
2261 adrl r0, new_stack_3
2262 beq L_CPU_FINAL_WP
2263
2264 L_CPU_FINAL_WP:
2265 ldr r0, [r0, #0]
2266
2267 @ sub r0, r0, #PAGE_OFFSET
2268 ldr r1,=PAGE_OFFSET
2269 sub r0, r0, r1
2270
2271 @ add r0, r0, #PHYS_OFFSET
2272 ldr r1,=PHYS_OFFSET
2273 add r0, r0, r1
2274
2275 mov sp, r0
2276
2277 .if 0
2278
2279 ldr r4, .L2
2280 mov r5, #82
2281 str r5, [r4, #0]
2282 mov r5, #69
2283 str r5, [r4, #0]
2284 mov r5, #83
2285 str r5, [r4, #0]
2286 mov r5, #69
2287 str r5, [r4, #0]
2288 mov r5, #84
2289 str r5, [r4, #0]
2290 mov r5, #10
2291 str r5, [r4, #0]
2292 mov r5, #13
2293 str r5, [r4, #0]
2294 .endif
2295
2296 b cpu_start_restore
2297 .endfunc
2298
2299 .if 0
2300 .L2:
2301 @ uart tx register, need update for diff project/platform
2302 .word -1056915456
2303 .endif
2304
2305 #ifdef CONFIG_DEBUG_RODATA
2306 new_stack_0: .word nstack_0+1020
2307 new_stack_1: .word nstack_1+1020
2308 new_stack_2: .word nstack_2+1020
2309 new_stack_3: .word nstack_3+1020
2310 .section".bss","aw",%nobits
2311 nstack_0: .space 1024
2312 nstack_1: .space 1024
2313 nstack_2: .space 1024
2314 nstack_3: .space 1024
2315 #else
2316 new_stack_0: .word nstack_0+1020
2317 nstack_0: .space 1024
2318 new_stack_1: .word nstack_1+1020
2319 nstack_1: .space 1024
2320 new_stack_2: .word nstack_2+1020
2321 nstack_2: .space 1024
2322 new_stack_3: .word nstack_3+1020
2323 nstack_3: .space 1024
2324 #endif // end of !CONFIG_DEBUG_RODATA
2325