aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/boot/compressed/head.S
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2007-06-01 12:13:59 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2007-06-02 16:31:43 -0400
commitc7341d436a7a89dc26706386de0a301fc9dbe49a (patch)
tree38a77dfaa10676b0b329eff371d140a7435cc8f5 /arch/arm/boot/compressed/head.S
parentf285e3d329ce68cc355fadf4ab2c8f34d7f264cb (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/compressed/head.S')
-rw-r--r--arch/arm/boot/compressed/head.S5
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
478reloc_start: add r9, r5, r0 479reloc_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
4811: 4831:
@@ -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
491call_kernel: bl cache_clean_flush 494call_kernel: bl cache_clean_flush