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
|
* On return, the CPU will be ready for the MMU to be turned on and
|
||||||
* the TCR will have been set.
|
* 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
|
// MMU has been enabled
|
||||||
adrp lr, __enable_mmu // return (PIC) address
|
adrp lr, __enable_mmu // return (PIC) address
|
||||||
add lr, lr, #:lo12:__enable_mmu
|
add lr, lr, #:lo12:__enable_mmu
|
||||||
|
@ -420,35 +420,22 @@ __create_page_tables:
|
||||||
ENDPROC(__create_page_tables)
|
ENDPROC(__create_page_tables)
|
||||||
.ltorg
|
.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
|
* The following fragment of code is executed with the MMU enabled.
|
||||||
* uses absolute addresses; this is not position independent.
|
|
||||||
*/
|
*/
|
||||||
|
.set initial_sp, init_thread_union + THREAD_START_SP
|
||||||
__mmap_switched:
|
__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
|
1: cmp x6, x7
|
||||||
b.hs 2f
|
b.hs 2f
|
||||||
str xzr, [x6], #8 // Clear BSS
|
str xzr, [x6], #8 // Clear BSS
|
||||||
b 1b
|
b 1b
|
||||||
2:
|
2:
|
||||||
ldr x5, [x3], #8
|
adr_l sp, initial_sp, x4
|
||||||
ldr x6, [x3], #8
|
str_l x21, __fdt_pointer, x5 // Save FDT pointer
|
||||||
ldr x16, [x3]
|
str_l x24, memstart_addr, x6 // Save PHYS_OFFSET
|
||||||
mov sp, x16
|
|
||||||
str x21, [x5] // Save FDT pointer
|
|
||||||
str x24, [x6] // Save PHYS_OFFSET
|
|
||||||
mov x29, #0
|
mov x29, #0
|
||||||
b start_kernel
|
b start_kernel
|
||||||
ENDPROC(__mmap_switched)
|
ENDPROC(__mmap_switched)
|
||||||
|
|
Loading…
Reference in New Issue