aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Turner <andrew@FreeBSD.org>2021-08-11 15:01:25 +0000
committerAndrew Turner <andrew@FreeBSD.org>2021-09-27 08:36:38 +0000
commit53192f33198ac8c225579934f258db115ae7139a (patch)
tree998f5d4f49ec70d67b962892c6822c611cc91cbf
parent273fef1f9b0f60ef37f85a6067299a07bca2ec82 (diff)
Read the arm64 midr register earlier
We use the midr_el1 register to decode which CPU type we are booting from. Read it on the secondary CPUs before waiting for the boot CPU to release us as it will need to use it before the release. Sponsored by: The FreeBSD Foundation (cherry picked from commit 6b22840ed0e8f9ceb34465987b8469a43ebb4582)
-rw-r--r--sys/arm64/arm64/mp_machdep.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/sys/arm64/arm64/mp_machdep.c b/sys/arm64/arm64/mp_machdep.c
index 3b1a8cc89cab..547bd576362e 100644
--- a/sys/arm64/arm64/mp_machdep.c
+++ b/sys/arm64/arm64/mp_machdep.c
@@ -239,6 +239,7 @@ init_secondary(uint64_t cpu)
* We need this before signalling the CPU is ready to
* let the boot CPU use the results.
*/
+ pcpup->pc_midr = get_midr();
identify_cpu(cpu);
/* Ensure the stores in identify_cpu have completed */
@@ -249,8 +250,6 @@ init_secondary(uint64_t cpu)
while (!atomic_load_int(&aps_ready))
__asm __volatile("wfe");
- pcpup->pc_midr = get_midr();
-
/* Initialize curthread */
KASSERT(PCPU_GET(idlethread) != NULL, ("no idle thread"));
pcpup->pc_curthread = pcpup->pc_idlethread;