git: d95b62db76b9 - main - arm64: Add a wfe function
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 21 Sep 2026 15:26:05 UTC
The branch main has been updated by andrew:
URL: https://cgit.FreeBSD.org/src/commit/?id=d95b62db76b9bb4d51bc5e555b26a3aaf8afa44a
commit d95b62db76b9bb4d51bc5e555b26a3aaf8afa44a
Author: Andrew Turner <andrew@FreeBSD.org>
AuthorDate: 2026-09-18 11:27:25 +0000
Commit: Andrew Turner <andrew@FreeBSD.org>
CommitDate: 2026-09-18 11:27:25 +0000
arm64: Add a wfe function
And replace inline assembly
Sponsored by: Arm Ltd
Differential Revision: https://reviews.freebsd.org/D59482
---
sys/arm64/arm64/mp_machdep.c | 6 +++---
sys/arm64/include/cpufunc.h | 6 ++++++
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/sys/arm64/arm64/mp_machdep.c b/sys/arm64/arm64/mp_machdep.c
index 0bdd2ecfd8a7..30f4b30e64a7 100644
--- a/sys/arm64/arm64/mp_machdep.c
+++ b/sys/arm64/arm64/mp_machdep.c
@@ -265,7 +265,7 @@ init_secondary(uint64_t cpu)
/* Wait for devices to be ready */
while (!atomic_load_int(&aps_after_dev))
- __asm __volatile("wfe");
+ wfe();
install_cpu_errata();
enable_cpu_feat(CPU_FEAT_AFTER_DEV);
@@ -275,7 +275,7 @@ init_secondary(uint64_t cpu)
/* Wait until we can run the scheduler */
while (!atomic_load_int(&aps_ready))
- __asm __volatile("wfe");
+ wfe();
/* Initialize curthread */
KASSERT(PCPU_GET(idlethread) != NULL, ("no idle thread"));
@@ -508,7 +508,7 @@ enable_cpu_spin(uint64_t cpu, vm_paddr_t entry, vm_paddr_t release_paddr)
/* Wait for the target CPU to start */
while (atomic_load_64(&ap_cpuid) != 0)
- __asm __volatile("wfe");
+ wfe();
return (0);
}
diff --git a/sys/arm64/include/cpufunc.h b/sys/arm64/include/cpufunc.h
index f600b30edf5f..91e6ad3d8cde 100644
--- a/sys/arm64/include/cpufunc.h
+++ b/sys/arm64/include/cpufunc.h
@@ -165,6 +165,12 @@ invalidate_local_icache(void)
"isb \n");
}
+static __inline void
+wfe(void)
+{
+ __asm __volatile("wfe");
+}
+
static __inline void
wfet(uint64_t val)
{