git: 353b6a5bcb5a - main - arm64: Add in_vhe() to find if the kernel is in VHE
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 21 Feb 2024 11:27:52 UTC
The branch main has been updated by andrew:
URL: https://cgit.FreeBSD.org/src/commit/?id=353b6a5bcb5ae6943903b38ebcc0922b059ff8b8
commit 353b6a5bcb5ae6943903b38ebcc0922b059ff8b8
Author: Andrew Turner <andrew@FreeBSD.org>
AuthorDate: 2024-01-11 17:01:52 +0000
Commit: Andrew Turner <andrew@FreeBSD.org>
CommitDate: 2024-02-21 11:26:29 +0000
arm64: Add in_vhe() to find if the kernel is in VHE
Add a function to support devices that may need to know if the kernel
has enabled the Armv8.1 Virtulization Host Extensions (FEAT_VHE).
Some devices, e.g. the generic timer, will need to know, e.g. use a
different interrupt.
Sponsored by: Arm Ltd
Differential Revision: https://reviews.freebsd.org/D43973
---
sys/arm64/arm64/machdep.c | 8 ++++++++
sys/arm64/include/machdep.h | 1 +
2 files changed, 9 insertions(+)
diff --git a/sys/arm64/arm64/machdep.c b/sys/arm64/arm64/machdep.c
index 9ce1c40b674c..c7f451543687 100644
--- a/sys/arm64/arm64/machdep.c
+++ b/sys/arm64/arm64/machdep.c
@@ -215,6 +215,14 @@ has_hyp(void)
return (boot_el == 2 && (hcr_el2 & HCR_E2H) == 0);
}
+bool
+in_vhe(void)
+{
+ /* If we are currently in EL2 then must be in VHE */
+ return ((READ_SPECIALREG(CurrentEL) & CURRENTEL_EL_MASK) ==
+ CURRENTEL_EL_EL2);
+}
+
static void
cpu_startup(void *dummy)
{
diff --git a/sys/arm64/include/machdep.h b/sys/arm64/include/machdep.h
index 80cb28bcfbeb..2f2960ae39f2 100644
--- a/sys/arm64/include/machdep.h
+++ b/sys/arm64/include/machdep.h
@@ -48,6 +48,7 @@ extern enum arm64_bus arm64_bus_method;
void dbg_init(void);
bool has_hyp(void);
+bool in_vhe(void);
void initarm(struct arm64_bootparams *);
vm_offset_t parse_boot_param(struct arm64_bootparams *abp);
#ifdef FDT