1 #include <asm/memory.h>
2 #include <mach/mt_reg_base.h>
4 @ Aliases for mode encodings - do not change
9 .equ MODE_MON, 0x16 @ A-profile (Security Extensions) only
15 .equ TTBCR_EAE, (1<<31) @ Are we using LPAE?
17 .equ PFR0_THUMB_EE_SUPPORT, (1<<12)
19 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
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)
46 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
47 .global save_performance_monitors
49 save_performance_monitors:
51 push {r4, r8, r9, r10}
53 mrc p15,0,r8,c9,c12,0 @ PMon: Control Register
55 mcr p15,0,r1,c9,c12,0 @ disable counter updates from here
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
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
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
67 mrc p15,0,r8,c9,c12,0 @ Read PMon Control Register
68 ubfx r9,r8,#11,#5 @ extract # of event counters, N
74 mcr p15,0,r8,c9,c12,5 @ PMon: select CounterN
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
79 add r8,r8,#1 @ increment index
89 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
91 .global restore_performance_monitors
92 restore_performance_monitors:
94 push {r4-r6, r8-r10, lr}
95 @ NOTE: all counters disabled by PMCR<0> == 0 on reset
97 ldr r8,[r0] @ r8 = PMCR
98 add r1,r0,#20 @ r1 now points to saved PMOVSR
99 ldr r9,[r1] @ r9 = PMOVSR
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
106 ubfx r12,r8,#11,#5 @ extract # of event counters, N (0-31)
110 add r1,r0,#32 @ r1 now points to the 1st saved event counter
115 mcr p15,0,r6,c9,c12,5 @ PMon: select CounterN
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
126 tst r9, #0x80000000 @ check for cycle count overflow flag
128 mcr p15,0,r2,c9,c13,0 @ set Cycle Counter to all 1's
131 mcr p15,0,r3,c9,c12,0 @ set the PMCR global enable bit
133 mcr p15,0,r3,c9,c12,1 @ enable the Cycle Counter
137 mrc p15,0,r4,c9,c12,3 @ check cycle count overflow now set
138 movs r4,r4 @ test bit<31>
140 mcr p15,0,r3,c9,c12,2 @ disable the Cycle Counter
144 mcr p15,0,r1,c9,c12,0 @ clear the PMCR global enable bit
147 @@ Restore left regs but PMCR
148 add r1,r0,#4 @ r1 now points to the PMSELR
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
153 mcr p15,0,r4,c9,c13,0 @ PMon: Cycle Counter Register
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
160 mcr p15,0,r0,c9,c12,0 @ restore the PM Control Register
163 pop {r4-r6, r8-r10, pc}
166 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
168 .global save_banked_registers
169 save_banked_registers:
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
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
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
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
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
197 stm r0!,{r3,r8-r12,lr} @ save the current SPSR,r8-r12,LR
198 msr CPSR_cxsf, r2 @ switch back to original mode
201 STR SP, [r0], #4 @ save the current SP
203 STM r0!, {r2, r3, r4-r12, LR} @ save the current CPSR,SPSR,r4-r12,LR
209 @ mrs r1, SP_usr @ rewrite
210 cps #MODE_SYS @ switch to System mode
211 str sp,[r1], #4 @ save the User SP
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
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
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
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
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
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
281 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
283 .global restore_banked_registers
284 restore_banked_registers:
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
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
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
322 @ msr SP_usr, r1 @ rewrite
323 cps #MODE_SYS @ switch to System mode
324 ldr sp,[r1],#4 @ restore the User SP
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
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
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
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
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
382 @ msr r8_fiq, r1 @ rewrite
383 @ msr r9_fiq, r2 @ rewrite
384 @ msr r10_fiq, r3 @ rewrite
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
394 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
399 @ CSSELR Cache Size Selection Register
403 @ IMPLEMENTATION DEFINED - proprietary features:
404 @ (CP15 register 15, TCM support, lockdown support, etc.)
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.
412 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
417 @ CSSELR ?Cache Size Selection Register
424 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
425 @ Function called with two arguments:
426 @ r0 contains address to store control registers
427 @ r1 is non-zero if we are Secure
429 .global save_control_registers
430 save_control_registers:
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}
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}
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
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
457 mrc p14,7,r1,c1,c0,0 @ JOSCR
458 mrc p14,7,r2,c2,c0,0 @ JMCR
463 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
464 @ Function called with two arguments:
465 @ r0 contains address to read control registers
466 @ r1 is non-zero if we are Secure
468 .global restore_control_registers
469 restore_control_registers:
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
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
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
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
493 mcrne p14,6,r1,c0,c0,0 @ TEECR
494 mcrne p14,6,r2,c1,c0,0 @ TEEHBR
497 mcr p14,7,r1,c1,c0,0 @ JOSCR
498 mcr p14,7,r2,c2,c0,0 @ JMCR
503 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
508 push {r4, r5, r6, r7}
509 @ ASSUMPTION: no useful fault address / fault status information
511 mrc p15,0,r4,c12,c0,0 @ VBAR
512 mrc p15,0,r5,c2,c0,2 @ TTBCR
514 tst r5, #TTBCR_EAE @ Are we using LPAE?
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
521 mrrcne p15,1,r6,r7,c2 @ 64 bit TTBR1
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
534 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
539 push {r4, r5, r6, r7}
541 mcr p15,0,r4,c12,c0,0 @ VBAR
542 mcr p15,0,r5,c2,c0,2 @ TTBCR
544 tst r5, #TTBCR_EAE @ Are we using LPAE?
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
551 mcrrne p15,1,r6,r7,c2 @ 64-bit TTBR1
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
563 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
568 mrc p15, 0, r1, c0, c0, 4 @ Read MPUIR
570 lsr r1, r1, #8 @ Extract number of MPU regions
572 @ Loop over the number of regions
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}
588 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
593 mrc p15, 0, r1, c0, c0, 4 @ Read MPUIR
595 lsr r1, r1, #8 @ Extract number of MPU regions
597 @ Loop over the number of regions
601 ldm r0!, {r2, r3, r12}
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
613 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
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
631 @ Save configuration registers and enable.
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.
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.
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
647 @ Store the Advanced SIMD/VFP-D32 additional registers.
650 @ IMPLEMENTATION DEFINED: save any subarchitecture defined state
651 @ NOTE: Don't change the order of the FPEXC and CPACR restores
653 @ Restore the original En bit of FPU.
655 FMXR FPEXC,r12 @ vmsr FPEXC,r12
657 @ Restore the original CPACR value.
663 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
668 @ FPU state save/restore. Obviously FPSID,MVFR0 and MVFR1 don't get
670 @ Modify CPACR to allow CP10 and CP11 access
672 ORR r2,r1,#0x00F00000
674 @ Enable FPU access to save/restore the rest of registers.
676 FMXR FPEXC, r2 @ vmsr FPEXC, r2
677 @ Recover FPEXC and FPSCR. These will be restored later.
679 @ Restore the VFP-D16 registers.
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
687 @ Store the Advanced SIMD/VFP-D32 additional registers.
690 @ IMPLEMENTATION DEFINED: restore any subarchitecture defined state
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
699 @ will restore in mt_restore_control_registers
700 @ mcr p15,0,r1,c1,c0,2
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.
711 .global save_generic_timer
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}
719 mrcne p15,4,r1,c14,c1,0 @ read CNTHCTL
724 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
726 .global restore_generic_timer
727 restore_generic_timer:
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
735 mcrne p15,4,r1,c14,c1,0 @ write CNTHCTL
739 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
741 .global save_fault_status
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
755 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
757 .global restore_fault_status
758 restore_fault_status:
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
766 mcr p15,0,r1,c5,c1,0 @ write ADFSR
767 mcr p15,0,r2,c5,c1,1 @ write AIFSR
771 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
773 .global write_cntp_ctl
776 mcr p15, 0, r0, c14, c2, 1
782 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
787 mrc p15, 0, r0, c0, c0, 5
792 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
794 .global read_clusterid
797 mrc p15, 0, r0, c0, c0, 5
803 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
808 mrc p15, 0, r0, c1, c1, 2
812 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
813 .global read_dbg_osdlr
816 mrc p14, 0, r0, c1, c3, 4 @ Read OS Double Lock Register
819 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
820 .global read_dbg_devid
823 mrc p14, 0, r0, c7, c2, 7
826 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
827 .global read_dbg_didr
830 mrc p14, 0, r0, c0, c0, 0
833 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
834 .global read_dbg_drar
837 mrc p14, 0, r0, c1, c0, 0 @ Read Debug ROM Address Register
840 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
841 .global read_dbg_dsar
844 mrc p14, 0, r0, c2, c0, 0 @ Read Debug Self Address Offset Register
847 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
848 .global read_dbg_dtrrxext
851 mrc p14, 0, r0, c0, c0, 2
854 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
855 .global read_dbg_dtrtxext
858 mrc p14, 0, r0, c0, c3, 2
861 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
862 .global read_dbg_dscrext
865 mrc p14, 0, r0, c0, c2, 2
868 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
869 .global read_dbg_wfar
872 mrc p14, 0, r0, c0, c6, 0
875 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
879 mrc p14, 0, r0, c0, c7, 0
882 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
883 .global read_dbg_claimclr
886 mrc p14, 0, r0, c7, c9, 6
889 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
890 .global read_dbg_bvr0
893 mrc p14, 0, r0, c0, c0, 4
896 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
897 .global read_dbg_bvr1
900 mrc p14, 0, r0, c0, c1, 4
903 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
904 .global read_dbg_bvr2
907 mrc p14, 0, r0, c0, c2, 4
910 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
911 .global read_dbg_bvr3
914 mrc p14, 0, r0, c0, c3, 4
917 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
918 .global read_dbg_bvr4
921 mrc p14, 0, r0, c0, c4, 4
924 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
925 .global read_dbg_bvr5
928 mrc p14, 0, r0, c0, c5, 4
931 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
932 .global read_dbg_bvr6
935 mrc p14, 0, r0, c0, c6, 4
938 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
939 .global read_dbg_bvr7
942 mrc p14, 0, r0, c0, c7, 4
945 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
946 .global read_dbg_bvr8
949 mrc p14, 0, r0, c0, c8, 4
952 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
953 .global read_dbg_bvr9
956 mrc p14, 0, r0, c0, c9, 4
959 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
960 .global read_dbg_bvr10
963 mrc p14, 0, r0, c0, c10, 4
966 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
967 .global read_dbg_bvr11
970 mrc p14, 0, r0, c0, c11, 4
973 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
974 .global read_dbg_bvr12
977 mrc p14, 0, r0, c0, c12, 4
980 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
981 .global read_dbg_bvr13
984 mrc p14, 0, r0, c0, c13, 4
987 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
988 .global read_dbg_bvr14
991 mrc p14, 0, r0, c0, c14, 4
994 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
995 .global read_dbg_bvr15
998 mrc p14, 0, r0, c0, c15, 4
1001 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1002 .global read_dbg_bcr0
1005 mrc p14, 0, r0, c0, c0, 5
1008 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1009 .global read_dbg_bcr1
1012 mrc p14, 0, r0, c0, c1, 5
1015 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1016 .global read_dbg_bcr2
1019 mrc p14, 0, r0, c0, c2, 5
1022 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1023 .global read_dbg_bcr3
1026 mrc p14, 0, r0, c0, c3, 5
1029 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1030 .global read_dbg_bcr4
1033 mrc p14, 0, r0, c0, c4, 5
1036 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1037 .global read_dbg_bcr5
1040 mrc p14, 0, r0, c0, c5, 5
1043 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1044 .global read_dbg_bcr6
1047 mrc p14, 0, r0, c0, c6, 5
1050 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1051 .global read_dbg_bcr7
1054 mrc p14, 0, r0, c0, c7, 5
1057 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1058 .global read_dbg_bcr8
1061 mrc p14, 0, r0, c0, c8, 5
1064 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1065 .global read_dbg_bcr9
1068 mrc p14, 0, r0, c0, c9, 5
1071 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1072 .global read_dbg_bcr10
1075 mrc p14, 0, r0, c0, c10, 5
1078 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1079 .global read_dbg_bcr11
1082 mrc p14, 0, r0, c0, c11, 5
1085 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1086 .global read_dbg_bcr12
1089 mrc p14, 0, r0, c0, c12, 5
1092 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1093 .global read_dbg_bcr13
1096 mrc p14, 0, r0, c0, c13, 5
1099 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1100 .global read_dbg_bcr14
1103 mrc p14, 0, r0, c0, c14, 5
1106 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1107 .global read_dbg_bcr15
1110 mrc p14, 0, r0, c0, c15, 5
1113 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1114 .global read_dbg_wvr0
1117 mrc p14, 0, r0, c0, c0, 6
1120 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1121 .global read_dbg_wvr1
1124 mrc p14, 0, r0, c0, c1, 6
1127 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1128 .global read_dbg_wvr2
1131 mrc p14, 0, r0, c0, c2, 6
1134 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1135 .global read_dbg_wvr3
1138 mrc p14, 0, r0, c0, c3, 6
1141 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1142 .global read_dbg_wvr4
1145 mrc p14, 0, r0, c0, c4, 6
1148 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1149 .global read_dbg_wvr5
1152 mrc p14, 0, r0, c0, c5, 6
1155 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1156 .global read_dbg_wvr6
1159 mrc p14, 0, r0, c0, c6, 6
1162 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1163 .global read_dbg_wvr7
1166 mrc p14, 0, r0, c0, c7, 6
1169 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1170 .global read_dbg_wvr8
1173 mrc p14, 0, r0, c0, c8, 6
1176 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1177 .global read_dbg_wvr9
1180 mrc p14, 0, r0, c0, c9, 6
1183 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1184 .global read_dbg_wvr10
1187 mrc p14, 0, r0, c0, c10, 6
1190 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1191 .global read_dbg_wvr11
1194 mrc p14, 0, r0, c0, c11, 6
1197 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1198 .global read_dbg_wvr12
1201 mrc p14, 0, r0, c0, c12, 6
1204 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1205 .global read_dbg_wvr13
1208 mrc p14, 0, r0, c0, c13, 6
1211 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1212 .global read_dbg_wvr14
1215 mrc p14, 0, r0, c0, c14, 6
1218 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1219 .global read_dbg_wvr15
1222 mrc p14, 0, r0, c0, c15, 6
1225 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1226 .global read_dbg_wcr0
1229 mrc p14, 0, r0, c0, c0, 7
1232 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1233 .global read_dbg_wcr1
1236 mrc p14, 0, r0, c0, c1, 7
1239 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1240 .global read_dbg_wcr2
1243 mrc p14, 0, r0, c0, c2, 7
1246 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1247 .global read_dbg_wcr3
1250 mrc p14, 0, r0, c0, c3, 7
1253 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1254 .global read_dbg_wcr4
1257 mrc p14, 0, r0, c0, c4, 7
1260 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1261 .global read_dbg_wcr5
1264 mrc p14, 0, r0, c0, c5, 7
1267 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1268 .global read_dbg_wcr6
1271 mrc p14, 0, r0, c0, c6, 7
1274 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1275 .global read_dbg_wcr7
1278 mrc p14, 0, r0, c0, c7, 7
1281 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1282 .global read_dbg_wcr8
1285 mrc p14, 0, r0, c0, c8, 7
1288 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1289 .global read_dbg_wcr9
1292 mrc p14, 0, r0, c0, c9, 7
1295 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1296 .global read_dbg_wcr10
1299 mrc p14, 0, r0, c0, c10, 7
1302 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1303 .global read_dbg_wcr11
1306 mrc p14, 0, r0, c0, c11, 7
1309 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1310 .global read_dbg_wcr12
1313 mrc p14, 0, r0, c0, c12, 7
1316 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1317 .global read_dbg_wcr13
1320 mrc p14, 0, r0, c0, c13, 7
1323 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1324 .global read_dbg_wcr14
1327 mrc p14, 0, r0, c0, c14, 7
1330 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1331 .global read_dbg_wcr15
1334 mrc p14, 0, r0, c0, c15, 7
1337 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1338 .global read_dbg_bxvr0
1341 mrc p14, 0, r0, c1, c0, 1
1344 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1345 .global read_dbg_bxvr1
1348 mrc p14, 0, r0, c1, c1, 1
1351 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1352 .global read_dbg_bxvr2
1355 mrc p14, 0, r0, c1, c2, 1
1358 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1359 .global read_dbg_bxvr3
1362 mrc p14, 0, r0, c1, c3, 1
1365 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1366 .global read_dbg_bxvr4
1369 mrc p14, 0, r0, c1, c4, 1
1372 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1373 .global read_dbg_bxvr5
1376 mrc p14, 0, r0, c1, c5, 1
1379 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1380 .global read_dbg_bxvr6
1383 mrc p14, 0, r0, c1, c6, 1
1386 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1387 .global read_dbg_bxvr7
1390 mrc p14, 0, r0, c1, c7, 1
1393 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1394 .global read_dbg_bxvr8
1397 mrc p14, 0, r0, c1, c8, 1
1400 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1401 .global read_dbg_bxvr9
1404 mrc p14, 0, r0, c1, c9, 1
1407 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1408 .global read_dbg_bxvr10
1411 mrc p14, 0, r0, c1, c10, 1
1414 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1415 .global read_dbg_bxvr11
1418 mrc p14, 0, r0, c1, c11, 1
1421 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1422 .global read_dbg_bxvr12
1425 mrc p14, 0, r0, c1, c12, 1
1428 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1429 .global read_dbg_bxvr13
1432 mrc p14, 0, r0, c1, c13, 1
1435 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1436 .global read_dbg_bxvr14
1439 mrc p14, 0, r0, c1, c14, 1
1442 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1443 .global read_dbg_bxvr15
1446 mrc p14, 0, r0, c1, c15, 1
1449 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1450 .global write_dbg_osdlr
1453 mcr p14, 0, r0, c1, c3, 4 @ Write OS Double Lock Register
1457 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1458 .global write_dbg_oslar
1461 mcr p14, 0, r0, c1, c0, 4 @ Write OS Lock address register
1465 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1466 .global write_dbg_dtrrxext
1469 mcr p14, 0, r0, c0, c0, 2
1472 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1473 .global write_dbg_dtrtxext
1476 mcr p14, 0, r0, c0, c3, 2
1479 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1480 .global write_dbg_dscrext
1483 mcr p14, 0, r0, c0, c2, 2
1486 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1487 .global write_dbg_wfar
1490 mcr p14, 0, r0, c0, c6, 0
1493 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1494 .global write_dbg_vcr
1497 mcr p14, 0, r0, c0, c7, 0
1500 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1501 .global write_dbg_claimset
1504 mcr p14, 0, r0, c7, c8, 6
1507 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1508 .global write_dbg_bvr0
1511 mcr p14, 0, r0, c0, c0, 4
1514 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1515 .global write_dbg_bvr1
1518 mcr p14, 0, r0, c0, c1, 4
1521 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1522 .global write_dbg_bvr2
1525 mcr p14, 0, r0, c0, c2, 4
1528 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1529 .global write_dbg_bvr3
1532 mcr p14, 0, r0, c0, c3, 4
1535 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1536 .global write_dbg_bvr4
1539 mcr p14, 0, r0, c0, c4, 4
1542 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1543 .global write_dbg_bvr5
1546 mcr p14, 0, r0, c0, c5, 4
1549 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1550 .global write_dbg_bvr6
1553 mcr p14, 0, r0, c0, c6, 4
1556 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1557 .global write_dbg_bvr7
1560 mcr p14, 0, r0, c0, c7, 4
1563 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1564 .global write_dbg_bvr8
1567 mcr p14, 0, r0, c0, c8, 4
1570 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1571 .global write_dbg_bvr9
1574 mcr p14, 0, r0, c0, c9, 4
1577 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1578 .global write_dbg_bvr10
1581 mcr p14, 0, r0, c0, c10, 4
1584 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1585 .global write_dbg_bvr11
1588 mcr p14, 0, r0, c0, c11, 4
1591 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1592 .global write_dbg_bvr12
1595 mcr p14, 0, r0, c0, c12, 4
1598 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1599 .global write_dbg_bvr13
1602 mcr p14, 0, r0, c0, c13, 4
1605 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1606 .global write_dbg_bvr14
1609 mcr p14, 0, r0, c0, c14, 4
1612 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1613 .global write_dbg_bvr15
1616 mcr p14, 0, r0, c0, c15, 4
1619 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1620 .global write_dbg_bcr0
1623 mcr p14, 0, r0, c0, c0, 5
1626 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1627 .global write_dbg_bcr1
1630 mcr p14, 0, r0, c0, c1, 5
1633 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1634 .global write_dbg_bcr2
1637 mcr p14, 0, r0, c0, c2, 5
1640 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1641 .global write_dbg_bcr3
1644 mcr p14, 0, r0, c0, c3, 5
1647 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1648 .global write_dbg_bcr4
1651 mcr p14, 0, r0, c0, c4, 5
1654 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1655 .global write_dbg_bcr5
1658 mcr p14, 0, r0, c0, c5, 5
1661 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1662 .global write_dbg_bcr6
1665 mcr p14, 0, r0, c0, c6, 5
1668 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1669 .global write_dbg_bcr7
1672 mcr p14, 0, r0, c0, c7, 5
1675 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1676 .global write_dbg_bcr8
1679 mcr p14, 0, r0, c0, c8, 5
1682 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1683 .global write_dbg_bcr9
1686 mcr p14, 0, r0, c0, c9, 5
1689 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1690 .global write_dbg_bcr10
1693 mcr p14, 0, r0, c0, c10, 5
1696 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1697 .global write_dbg_bcr11
1700 mcr p14, 0, r0, c0, c11, 5
1703 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1704 .global write_dbg_bcr12
1707 mcr p14, 0, r0, c0, c12, 5
1710 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1711 .global write_dbg_bcr13
1714 mcr p14, 0, r0, c0, c13, 5
1717 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1718 .global write_dbg_bcr14
1721 mcr p14, 0, r0, c0, c14, 5
1724 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1725 .global write_dbg_bcr15
1728 mcr p14, 0, r0, c0, c15, 5
1731 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1732 .global write_dbg_wvr0
1735 mcr p14, 0, r0, c0, c0, 6
1738 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1739 .global write_dbg_wvr1
1742 mcr p14, 0, r0, c0, c1, 6
1745 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1746 .global write_dbg_wvr2
1749 mcr p14, 0, r0, c0, c2, 6
1752 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1753 .global write_dbg_wvr3
1756 mcr p14, 0, r0, c0, c3, 6
1759 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1760 .global write_dbg_wvr4
1763 mcr p14, 0, r0, c0, c4, 6
1766 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1767 .global write_dbg_wvr5
1770 mcr p14, 0, r0, c0, c5, 6
1773 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1774 .global write_dbg_wvr6
1777 mcr p14, 0, r0, c0, c6, 6
1780 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1781 .global write_dbg_wvr7
1784 mcr p14, 0, r0, c0, c7, 6
1787 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1788 .global write_dbg_wvr8
1791 mcr p14, 0, r0, c0, c8, 6
1794 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1795 .global write_dbg_wvr9
1798 mcr p14, 0, r0, c0, c9, 6
1801 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1802 .global write_dbg_wvr10
1805 mcr p14, 0, r0, c0, c10, 6
1808 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1809 .global write_dbg_wvr11
1812 mcr p14, 0, r0, c0, c11, 6
1815 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1816 .global write_dbg_wvr12
1819 mcr p14, 0, r0, c0, c12, 6
1822 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1823 .global write_dbg_wvr13
1826 mcr p14, 0, r0, c0, c13, 6
1829 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1830 .global write_dbg_wvr14
1833 mcr p14, 0, r0, c0, c14, 6
1836 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1837 .global write_dbg_wvr15
1840 mcr p14, 0, r0, c0, c15, 6
1843 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1844 .global write_dbg_wcr0
1847 mcr p14, 0, r0, c0, c0, 7
1850 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1851 .global write_dbg_wcr1
1854 mcr p14, 0, r0, c0, c1, 7
1857 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1858 .global write_dbg_wcr2
1861 mcr p14, 0, r0, c0, c2, 7
1864 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1865 .global write_dbg_wcr3
1868 mcr p14, 0, r0, c0, c3, 7
1871 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1872 .global write_dbg_wcr4
1875 mcr p14, 0, r0, c0, c4, 7
1878 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1879 .global write_dbg_wcr5
1882 mcr p14, 0, r0, c0, c5, 7
1885 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1886 .global write_dbg_wcr6
1889 mcr p14, 0, r0, c0, c6, 7
1892 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1893 .global write_dbg_wcr7
1896 mcr p14, 0, r0, c0, c7, 7
1899 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1900 .global write_dbg_wcr8
1903 mcr p14, 0, r0, c0, c8, 7
1906 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1907 .global write_dbg_wcr9
1910 mcr p14, 0, r0, c0, c9, 7
1913 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1914 .global write_dbg_wcr10
1917 mcr p14, 0, r0, c0, c10, 7
1920 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1921 .global write_dbg_wcr11
1924 mcr p14, 0, r0, c0, c11, 7
1927 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1928 .global write_dbg_wcr12
1931 mcr p14, 0, r0, c0, c12, 7
1934 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1935 .global write_dbg_wcr13
1938 mcr p14, 0, r0, c0, c13, 7
1941 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1942 .global write_dbg_wcr14
1945 mcr p14, 0, r0, c0, c14, 7
1948 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1949 .global write_dbg_wcr15
1952 mcr p14, 0, r0, c0, c15, 7
1955 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1956 .global write_dbg_bxvr0
1959 mcr p14, 0, r0, c1, c0, 1
1962 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1963 .global write_dbg_bxvr1
1966 mcr p14, 0, r0, c1, c1, 1
1969 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1970 .global write_dbg_bxvr2
1973 mcr p14, 0, r0, c1, c2, 1
1976 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1977 .global write_dbg_bxvr3
1980 mcr p14, 0, r0, c1, c3, 1
1983 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1984 .global write_dbg_bxvr4
1987 mcr p14, 0, r0, c1, c4, 1
1990 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1991 .global write_dbg_bxvr5
1994 mcr p14, 0, r0, c1, c5, 1
1997 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1998 .global write_dbg_bxvr6
2001 mcr p14, 0, r0, c1, c6, 1
2004 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2005 .global write_dbg_bxvr7
2008 mcr p14, 0, r0, c1, c7, 1
2011 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2012 .global write_dbg_bxvr8
2015 mcr p14, 0, r0, c1, c8, 1
2018 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2019 .global write_dbg_bxvr9
2022 mcr p14, 0, r0, c1, c9, 1
2025 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2026 .global write_dbg_bxvr10
2029 mcr p14, 0, r0, c1, c10, 1
2032 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2033 .global write_dbg_bxvr11
2036 mcr p14, 0, r0, c1, c11, 1
2039 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2040 .global write_dbg_bxvr12
2043 mcr p14, 0, r0, c1, c12, 1
2046 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2047 .global write_dbg_bxvr13
2050 mcr p14, 0, r0, c1, c13, 1
2053 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2054 .global write_dbg_bxvr14
2057 mcr p14, 0, r0, c1, c14, 1
2060 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2061 .global write_dbg_bxvr15
2064 mcr p14, 0, r0, c1, c15, 1
2067 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2068 .global read_id_pfr1
2071 mrc p15, 0, r0, c0, c1, 1
2074 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2075 .global invalidate_unified_TLB_inner_shareable
2076 invalidate_unified_TLB_inner_shareable:
2079 mcr p15, 0, r0, c8, c3, 0
2083 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2084 @ Function called with two arguments:
2085 @ r0 contains address to read control registers
2086 @ r1 is non-zero if we are Secure
2088 .global mt_restore_control_registers
2089 mt_restore_control_registers:
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
2097 @-----------------cannot use r3
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
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
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
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
2119 mcr p15,0,r1,c13,c0,1 @ CONTEXTIDR
2120 mcr p15,0,r2,c13,c0,2 @ TPIDRURW
2122 mcr p15,0,r1,c13,c0,3 @ TPIDRURO
2123 mcr p15,0,r2,c13,c0,4 @ TPIDRPRW
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
2129 mcrne p14,6,r1,c0,c0,0 @ TEECR
2130 mcrne p14,6,r2,c1,c0,0 @ TEEHBR
2133 mcr p14,7,r1,c1,c0,0 @ JOSCR
2134 mcr p14,7,r2,c2,c0,0 @ JMCR
2138 @-----------------can use r3
2144 mrc p15, 0, r3, c0, c0, 5
2157 adrl r3, new_stack_0
2160 adrl r3, new_stack_1
2163 adrl r3, new_stack_2
2166 adrl r3, new_stack_3
2174 add lr, lr, #PAGE_OFFSET
2175 @ sub lr, lr, #PHYS_OFFSET
2179 add r11, r11, #PAGE_OFFSET
2180 @ sub r11, r11, #PHYS_OFFSET
2184 mcr p15,0,r2,c1,c0,0 @ SCTLR - System Control Register
2202 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2203 @ workaround for ARM CA7 Errata 802022
2204 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2205 .global cpu_wake_up_errata_802022
2206 cpu_wake_up_errata_802022:
2215 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2239 mrc p15, 0, r0, c0, c0, 5
2252 adrl r0, new_stack_0
2255 adrl r0, new_stack_1
2258 adrl r0, new_stack_2
2261 adrl r0, new_stack_3
2267 @ sub r0, r0, #PAGE_OFFSET
2271 @ add r0, r0, #PHYS_OFFSET
2301 @ uart tx register, need update for diff project/platform
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
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