arm64: remove __switch_data object from head.S
This removes the confusing __switch_data object from head.S, and replaces it with standard PC-relative references to the various symbols it encapsulates. Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Tested-by: Mark Rutland <mark.rutland@arm.com> Reviewed-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Will Deacon <will.deacon@arm.com>
This commit is contained in:
parent
a44ef51799
commit
a871d354f7
|
@ -253,7 +253,7 @@ ENTRY(stext)
|
|||
* On return, the CPU will be ready for the MMU to be turned on and
|
||||
* the TCR will have been set.
|
||||
*/
|
||||
ldr x27, __switch_data // address to jump to after
|
||||
ldr x27, =__mmap_switched // address to jump to after
|
||||
// MMU has been enabled
|
||||
adrp lr, __enable_mmu // return (PIC) address
|
||||
add lr, lr, #:lo12:__enable_mmu
|
||||
|
@ -420,35 +420,22 @@ __create_page_tables:
|
|||
ENDPROC(__create_page_tables)
|
||||
.ltorg
|
||||
|
||||
.align 3
|
||||
.type __switch_data, %object
|
||||
__switch_data:
|
||||
.quad __mmap_switched
|
||||
.quad __bss_start // x6
|
||||
.quad __bss_stop // x7
|
||||
.quad __fdt_pointer // x5
|
||||
.quad memstart_addr // x6
|
||||
.quad init_thread_union + THREAD_START_SP // sp
|
||||
|
||||
/*
|
||||
* The following fragment of code is executed with the MMU on in MMU mode, and
|
||||
* uses absolute addresses; this is not position independent.
|
||||
* The following fragment of code is executed with the MMU enabled.
|
||||
*/
|
||||
.set initial_sp, init_thread_union + THREAD_START_SP
|
||||
__mmap_switched:
|
||||
adr x3, __switch_data + 8
|
||||
adr_l x6, __bss_start
|
||||
adr_l x7, __bss_stop
|
||||
|
||||
ldp x6, x7, [x3], #16
|
||||
1: cmp x6, x7
|
||||
b.hs 2f
|
||||
str xzr, [x6], #8 // Clear BSS
|
||||
b 1b
|
||||
2:
|
||||
ldr x5, [x3], #8
|
||||
ldr x6, [x3], #8
|
||||
ldr x16, [x3]
|
||||
mov sp, x16
|
||||
str x21, [x5] // Save FDT pointer
|
||||
str x24, [x6] // Save PHYS_OFFSET
|
||||
adr_l sp, initial_sp, x4
|
||||
str_l x21, __fdt_pointer, x5 // Save FDT pointer
|
||||
str_l x24, memstart_addr, x6 // Save PHYS_OFFSET
|
||||
mov x29, #0
|
||||
b start_kernel
|
||||
ENDPROC(__mmap_switched)
|
||||
|
|
Loading…
Reference in New Issue