diff options
author | Catalin Marinas <catalin.marinas@arm.com> | 2007-06-01 12:13:59 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2007-06-02 16:31:43 -0400 |
commit | c7341d436a7a89dc26706386de0a301fc9dbe49a (patch) | |
tree | 38a77dfaa10676b0b329eff371d140a7435cc8f5 /arch/arm/boot | |
parent | f285e3d329ce68cc355fadf4ab2c8f34d7f264cb (diff) |
[ARM] 4392/2: 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: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/boot')
-rw-r--r-- | arch/arm/boot/compressed/head.S | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 2568d311be21..23348e9561b9 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -247,7 +247,7 @@ not_relocated: mov r0, #0 | |||
247 | mov r3, r7 | 247 | mov r3, r7 |
248 | bl decompress_kernel | 248 | bl decompress_kernel |
249 | 249 | ||
250 | add r0, r0, #127 | 250 | add r0, r0, #127 + 128 @ alignment + stack |
251 | bic r0, r0, #127 @ align the kernel length | 251 | bic r0, r0, #127 @ align the kernel length |
252 | /* | 252 | /* |
253 | * r0 = decompressed kernel length | 253 | * r0 = decompressed kernel length |
@@ -269,6 +269,7 @@ not_relocated: mov r0, #0 | |||
269 | stmia r1!, {r9 - r14} | 269 | stmia r1!, {r9 - r14} |
270 | cmp r2, r3 | 270 | cmp r2, r3 |
271 | blo 1b | 271 | blo 1b |
272 | add sp, r1, #128 @ relocate the stack | ||
272 | 273 | ||
273 | bl cache_clean_flush | 274 | bl cache_clean_flush |
274 | add pc, r5, r0 @ call relocation code | 275 | add pc, r5, r0 @ call relocation code |
@@ -476,6 +477,7 @@ __common_mmu_cache_on: | |||
476 | */ | 477 | */ |
477 | .align 5 | 478 | .align 5 |
478 | reloc_start: add r9, r5, r0 | 479 | reloc_start: add r9, r5, r0 |
480 | sub r9, r9, #128 @ do not copy the stack | ||
479 | debug_reloc_start | 481 | debug_reloc_start |
480 | mov r1, r4 | 482 | mov r1, r4 |
481 | 1: | 483 | 1: |
@@ -486,6 +488,7 @@ reloc_start: add r9, r5, r0 | |||
486 | 488 | ||
487 | cmp r5, r9 | 489 | cmp r5, r9 |
488 | blo 1b | 490 | blo 1b |
491 | add sp, r1, #128 @ relocate the stack | ||
489 | debug_reloc_end | 492 | debug_reloc_end |
490 | 493 | ||
491 | call_kernel: bl cache_clean_flush | 494 | call_kernel: bl cache_clean_flush |