Commit 91387669 authored by Catalin Marinas's avatar Catalin Marinas

Do not corrupt the SP register in compressed/head.S

ARMv7 support code requires a valid stack for saving/restoring
registers as the whole D-cache flushing function is more complex. This
patch ensures that the SP register is not corrupted.
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent 3c592559
...@@ -257,16 +257,16 @@ not_relocated: mov r0, #0 ...@@ -257,16 +257,16 @@ not_relocated: mov r0, #0
* r6 = processor ID * r6 = processor ID
* r7 = architecture ID * r7 = architecture ID
* r8 = atags pointer * r8 = atags pointer
* r9-r14 = corrupted * r9-r12,r14 = corrupted
*/ */
add r1, r5, r0 @ end of decompressed kernel add r1, r5, r0 @ end of decompressed kernel
adr r2, reloc_start adr r2, reloc_start
ldr r3, LC1 ldr r3, LC1
add r3, r2, r3 add r3, r2, r3
1: ldmia r2!, {r9 - r14} @ copy relocation code 1: ldmia r2!, {r9 - r12, r14} @ copy relocation code
stmia r1!, {r9 - r14} stmia r1!, {r9 - r12, r14}
ldmia r2!, {r9 - r14} ldmia r2!, {r9 - r12, r14}
stmia r1!, {r9 - r14} stmia r1!, {r9 - r12, r14}
cmp r2, r3 cmp r2, r3
blo 1b blo 1b
...@@ -472,7 +472,7 @@ __common_mmu_cache_on: ...@@ -472,7 +472,7 @@ __common_mmu_cache_on:
* r6 = processor ID * r6 = processor ID
* r7 = architecture ID * r7 = architecture ID
* r8 = atags pointer * r8 = atags pointer
* r9-r14 = corrupted * r9-r12,r14 = corrupted
*/ */
.align 5 .align 5
reloc_start: add r9, r5, r0 reloc_start: add r9, r5, r0
...@@ -480,8 +480,8 @@ reloc_start: add r9, r5, r0 ...@@ -480,8 +480,8 @@ reloc_start: add r9, r5, r0
mov r1, r4 mov r1, r4
1: 1:
.rept 4 .rept 4
ldmia r5!, {r0, r2, r3, r10 - r14} @ relocate kernel ldmia r5!, {r0, r2, r3, r10 - r12, r14} @ relocate kernel
stmia r1!, {r0, r2, r3, r10 - r14} stmia r1!, {r0, r2, r3, r10 - r12, r14}
.endr .endr
cmp r5, r9 cmp r5, r9
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment