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

arm64: kernel: use literal for relocated address of __secondary_switched

We can simply use a relocated 64-bit literal to store the address of
__secondary_switched(), and the relocation code will ensure that it
holds the correct value at secondary entry time, as long as we make sure
that the literal is not dereferenced until after we have enabled the MMU.

So jump via a small __secondary_switch() function covered by the ID map
that performs the literal load and branch-to-register.
Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Acked-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 190c056f
...@@ -468,9 +468,7 @@ __mmap_switched: ...@@ -468,9 +468,7 @@ __mmap_switched:
str x15, [x11, x23] str x15, [x11, x23]
b 0b b 0b
2: adr_l x8, kimage_vaddr // make relocated kimage_vaddr 2:
dc cvac, x8 // value visible to secondaries
dsb sy // with MMU off
#endif #endif
adr_l sp, initial_sp, x4 adr_l sp, initial_sp, x4
...@@ -699,12 +697,9 @@ secondary_startup: ...@@ -699,12 +697,9 @@ secondary_startup:
adrp x26, swapper_pg_dir adrp x26, swapper_pg_dir
bl __cpu_setup // initialise processor bl __cpu_setup // initialise processor
ldr x8, kimage_vaddr adr_l x27, __secondary_switch // address to jump to after enabling the MMU
ldr w9, 0f
sub x27, x8, w9, sxtw // address to jump to after enabling the MMU
b __enable_mmu b __enable_mmu
ENDPROC(secondary_startup) ENDPROC(secondary_startup)
0: .long (_text - TEXT_OFFSET) - __secondary_switched
__secondary_switched: __secondary_switched:
adr_l x5, vectors adr_l x5, vectors
...@@ -806,3 +801,8 @@ __no_granule_support: ...@@ -806,3 +801,8 @@ __no_granule_support:
wfi wfi
b 1b b 1b
ENDPROC(__no_granule_support) ENDPROC(__no_granule_support)
__secondary_switch:
ldr x8, =__secondary_switched
br x8
ENDPROC(__secondary_switch)
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