aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mm
diff options
context:
space:
mode:
authorNicolas Pitre <nicolas.pitre@linaro.org>2015-12-04 15:36:40 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2015-12-17 05:29:01 -0500
commitb563d0645123802448f9e8bf868c8bae552207ff (patch)
tree5992d691700d7370c51a4df03c74160faa2e444c /arch/arm/mm
parent437682eeab45ab8c8c1e027afd023e39f32f9032 (diff)
ARM: 8453/2: proc-v7.S: don't locate temporary stack space in .text section
The proc-v7.S code uses a small temporary stack to preserve register content in its setup code. This stack is located in the .text section which is normally meant to be read-only. Move that temporary stack to the .bss section and get its address in a position independent way, similarly to what we do in other parts of the kernel. While at it, one comments was updated to reflect reality, and the list of saved registers in the proc-v7.S case is updated to match the comment next to it for coherency. Signed-off-by: Nicolas Pitre <nico@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mm')
-rw-r--r--arch/arm/mm/proc-v7.S23
1 files changed, 16 insertions, 7 deletions
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index de2b246fed38..2d0ac32320e1 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -274,10 +274,12 @@ __v7_ca15mp_setup:
274__v7_b15mp_setup: 274__v7_b15mp_setup:
275__v7_ca17mp_setup: 275__v7_ca17mp_setup:
276 mov r10, #0 276 mov r10, #0
2771: adr r12, __v7_setup_stack @ the local stack 2771: adr r0, __v7_setup_stack_ptr
278 stmia r12, {r0-r5, lr} @ v7_invalidate_l1 touches r0-r6 278 ldr r12, [r0]
279 add r12, r12, r0 @ the local stack
280 stmia r12, {r1-r6, lr} @ v7_invalidate_l1 touches r0-r6
279 bl v7_invalidate_l1 281 bl v7_invalidate_l1
280 ldmia r12, {r0-r5, lr} 282 ldmia r12, {r1-r6, lr}
281#ifdef CONFIG_SMP 283#ifdef CONFIG_SMP
282 ALT_SMP(mrc p15, 0, r0, c1, c0, 1) 284 ALT_SMP(mrc p15, 0, r0, c1, c0, 1)
283 ALT_UP(mov r0, #(1 << 6)) @ fake it for UP 285 ALT_UP(mov r0, #(1 << 6)) @ fake it for UP
@@ -415,10 +417,12 @@ __v7_pj4b_setup:
415#endif /* CONFIG_CPU_PJ4B */ 417#endif /* CONFIG_CPU_PJ4B */
416 418
417__v7_setup: 419__v7_setup:
418 adr r12, __v7_setup_stack @ the local stack 420 adr r0, __v7_setup_stack_ptr
419 stmia r12, {r0-r5, lr} @ v7_invalidate_l1 touches r0-r6 421 ldr r12, [r0]
422 add r12, r12, r0 @ the local stack
423 stmia r12, {r1-r6, lr} @ v7_invalidate_l1 touches r0-r6
420 bl v7_invalidate_l1 424 bl v7_invalidate_l1
421 ldmia r12, {r0-r5, lr} 425 ldmia r12, {r1-r6, lr}
422 426
423__v7_setup_cont: 427__v7_setup_cont:
424 and r0, r9, #0xff000000 @ ARM? 428 and r0, r9, #0xff000000 @ ARM?
@@ -480,11 +484,16 @@ __errata_finish:
480 orr r0, r0, r6 @ set them 484 orr r0, r0, r6 @ set them
481 THUMB( orr r0, r0, #1 << 30 ) @ Thumb exceptions 485 THUMB( orr r0, r0, #1 << 30 ) @ Thumb exceptions
482 ret lr @ return to head.S:__ret 486 ret lr @ return to head.S:__ret
487
488 .align 2
489__v7_setup_stack_ptr:
490 .word __v7_setup_stack - .
483ENDPROC(__v7_setup) 491ENDPROC(__v7_setup)
484 492
493 .bss
485 .align 2 494 .align 2
486__v7_setup_stack: 495__v7_setup_stack:
487 .space 4 * 7 @ 12 registers 496 .space 4 * 7 @ 7 registers
488 497
489 __INITDATA 498 __INITDATA
490 499