summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/hwstub/stub/stmp/crt0.S16
1 files changed, 10 insertions, 6 deletions
diff --git a/utils/hwstub/stub/stmp/crt0.S b/utils/hwstub/stub/stmp/crt0.S
index f4a0c28..38b6f18 100644
--- a/utils/hwstub/stub/stmp/crt0.S
+++ b/utils/hwstub/stub/stmp/crt0.S
@@ -5,12 +5,10 @@
start:
sub r7, pc, #8 /* Copy running address */
msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */
- /* Disable MMU, disable caching and buffering;
- * use low exception range address */
- mrc p15, 0, r0, c1, c0, 0
- ldr r1, =0x3005
- bic r0, r1
- mcr p15, 0, r0, c1, c0, 0
+ /* The stub could be located at a virtual address so killing the MMU at
+ * this point would be mere suicide. We assume that the remap location
+ * is identically mapped and kill the MMU after the copy */
+
/* Relocate to right address */
mov r2, r7
ldr r3, =_copystart
@@ -25,6 +23,12 @@ start:
/* Jump to real location */
ldr pc, =remap
remap:
+ /* Disable MMU, disable caching and buffering;
+ * use low exception range address */
+ mrc p15, 0, r0, c1, c0, 0
+ ldr r1, =0x3005
+ bic r0, r1
+ mcr p15, 0, r0, c1, c0, 0
/* clear bss */
ldr r2, =bss_start
ldr r3, =bss_end