Commit a871d354 authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Will Deacon

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: default avatarCatalin Marinas <catalin.marinas@arm.com>
Tested-by: default avatarMark Rutland <mark.rutland@arm.com>
Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent a44ef517
...@@ -253,7 +253,7 @@ ENTRY(stext) ...@@ -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: ...@@ -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)
......
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