Commit 82e49588 authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Catalin Marinas

arm64: head: Move all finalise_el2 calls to after __enable_mmu

In the primary boot path, finalise_el2() is called much later than on
the secondary boot or resume-from-suspend paths, and this does not
appear to be intentional.

Since we aim to do as little as possible before enabling the MMU and
caches, align secondary and resume with primary boot, and defer the call
to after the MMU is turned on. This also removes the need to clean
finalise_el2() to the PoC once we enable support for booting with the
MMU on.
Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20230111102236.1430401-2-ardb@kernel.orgSigned-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent b7bfaa76
...@@ -587,7 +587,6 @@ SYM_FUNC_START_LOCAL(secondary_startup) ...@@ -587,7 +587,6 @@ SYM_FUNC_START_LOCAL(secondary_startup)
* Common entry point for secondary CPUs. * Common entry point for secondary CPUs.
*/ */
mov x20, x0 // preserve boot mode mov x20, x0 // preserve boot mode
bl finalise_el2
bl __cpu_secondary_check52bitva bl __cpu_secondary_check52bitva
#if VA_BITS > 48 #if VA_BITS > 48
ldr_l x0, vabits_actual ldr_l x0, vabits_actual
...@@ -603,6 +602,10 @@ SYM_FUNC_END(secondary_startup) ...@@ -603,6 +602,10 @@ SYM_FUNC_END(secondary_startup)
SYM_FUNC_START_LOCAL(__secondary_switched) SYM_FUNC_START_LOCAL(__secondary_switched)
mov x0, x20 mov x0, x20
bl set_cpu_boot_mode_flag bl set_cpu_boot_mode_flag
mov x0, x20
bl finalise_el2
str_l xzr, __early_cpu_boot_status, x3 str_l xzr, __early_cpu_boot_status, x3
adr_l x5, vectors adr_l x5, vectors
msr vbar_el1, x5 msr vbar_el1, x5
......
...@@ -100,7 +100,7 @@ SYM_FUNC_END(__cpu_suspend_enter) ...@@ -100,7 +100,7 @@ SYM_FUNC_END(__cpu_suspend_enter)
.pushsection ".idmap.text", "awx" .pushsection ".idmap.text", "awx"
SYM_CODE_START(cpu_resume) SYM_CODE_START(cpu_resume)
bl init_kernel_el bl init_kernel_el
bl finalise_el2 mov x19, x0 // preserve boot mode
#if VA_BITS > 48 #if VA_BITS > 48
ldr_l x0, vabits_actual ldr_l x0, vabits_actual
#endif #endif
...@@ -116,6 +116,9 @@ SYM_CODE_END(cpu_resume) ...@@ -116,6 +116,9 @@ SYM_CODE_END(cpu_resume)
.popsection .popsection
SYM_FUNC_START(_cpu_resume) SYM_FUNC_START(_cpu_resume)
mov x0, x19
bl finalise_el2
mrs x1, mpidr_el1 mrs x1, mpidr_el1
adr_l x8, mpidr_hash // x8 = struct mpidr_hash virt address adr_l x8, mpidr_hash // x8 = struct mpidr_hash virt address
......
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