From 81dfed27cf7ca1008b9cf21c084310eaeae082ac Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Tue, 4 Feb 2014 00:16:46 +0100 Subject: utils/hwstub: make stmp stub able to load in a MMU'ed environement In might be useful to load hwstub in an environment with the MMU active, in which case care must be taken on the order in which things are done. Mostly, one should not disable the MMU before moving stuff around. The code assumes the linking address (0 currently) is identity mapped. Change-Id: I8d54ce9e8cadcde2e08990353ca7a46803731ca7 --- utils/hwstub/stub/stmp/crt0.S | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'utils/hwstub/stub') diff --git a/utils/hwstub/stub/stmp/crt0.S b/utils/hwstub/stub/stmp/crt0.S index f4a0c28360..38b6f18ac5 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 -- cgit v1.2.3