Commit d0776aff authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Russell King

ARM: 8324/1: move cpu_resume() to .text section

Move cpu_resume() to the .text section where it belongs. Change
the adr reference to sleep_save_sp to an explicit PC relative
reference so sleep_save_sp itself can remain in .data.

This helps prevent linker failure on large kernels, as the code
in the .data section may be too far away to be in range for normal
b/bl instructions.
Reviewed-by: default avatarNicolas Pitre <nico@linaro.org>
Tested-by: default avatarSudeep Holla <sudeep.holla@arm.com>
Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 02e541db
...@@ -116,14 +116,7 @@ cpu_resume_after_mmu: ...@@ -116,14 +116,7 @@ cpu_resume_after_mmu:
ldmfd sp!, {r4 - r11, pc} ldmfd sp!, {r4 - r11, pc}
ENDPROC(cpu_resume_after_mmu) ENDPROC(cpu_resume_after_mmu)
/* .text
* Note: Yes, part of the following code is located into the .data section.
* This is to allow sleep_save_sp to be accessed with a relative load
* while we can't rely on any MMU translation. We could have put
* sleep_save_sp in the .text section as well, but some setups might
* insist on it to be truly read-only.
*/
.data
.align .align
ENTRY(cpu_resume) ENTRY(cpu_resume)
ARM_BE8(setend be) @ ensure we are in BE mode ARM_BE8(setend be) @ ensure we are in BE mode
...@@ -145,6 +138,8 @@ ARM_BE8(setend be) @ ensure we are in BE mode ...@@ -145,6 +138,8 @@ ARM_BE8(setend be) @ ensure we are in BE mode
compute_mpidr_hash r1, r4, r5, r6, r0, r3 compute_mpidr_hash r1, r4, r5, r6, r0, r3
1: 1:
adr r0, _sleep_save_sp adr r0, _sleep_save_sp
ldr r2, [r0]
add r0, r0, r2
ldr r0, [r0, #SLEEP_SAVE_SP_PHYS] ldr r0, [r0, #SLEEP_SAVE_SP_PHYS]
ldr r0, [r0, r1, lsl #2] ldr r0, [r0, r1, lsl #2]
...@@ -156,10 +151,12 @@ THUMB( bx r3 ) ...@@ -156,10 +151,12 @@ THUMB( bx r3 )
ENDPROC(cpu_resume) ENDPROC(cpu_resume)
.align 2 .align 2
_sleep_save_sp:
.long sleep_save_sp - .
mpidr_hash_ptr: mpidr_hash_ptr:
.long mpidr_hash - . @ mpidr_hash struct offset .long mpidr_hash - . @ mpidr_hash struct offset
.data
.type sleep_save_sp, #object .type sleep_save_sp, #object
ENTRY(sleep_save_sp) ENTRY(sleep_save_sp)
_sleep_save_sp:
.space SLEEP_SAVE_SP_SZ @ struct sleep_save_sp .space SLEEP_SAVE_SP_SZ @ struct sleep_save_sp
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