Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 4 Sep 2025 16:28:46 GMT
From:      Andrew Turner <andrew@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: b3605a7bb6f8 - main - arm64: Add a macro to create cpu_feat
Message-ID:  <202509041628.584GSkpV033035@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by andrew:

URL: https://cgit.FreeBSD.org/src/commit/?id=b3605a7bb6f8c58d939e642671ce70b0ce39b95e

commit b3605a7bb6f8c58d939e642671ce70b0ce39b95e
Author:     Andrew Turner <andrew@FreeBSD.org>
AuthorDate: 2025-09-04 14:23:23 +0000
Commit:     Andrew Turner <andrew@FreeBSD.org>
CommitDate: 2025-09-04 14:25:41 +0000

    arm64: Add a macro to create cpu_feat
    
    This will be used later to extend cpu feature detection
    
    Reviewed by:    imp (earlier version)
    Sponsored by:   Arm Ltd
    Differential Revision:  https://reviews.freebsd.org/D52356
---
 sys/arm/arm/generic_timer.c  | 10 +++-------
 sys/arm64/arm64/identcpu.c   | 11 +++--------
 sys/arm64/arm64/machdep.c    | 10 +++-------
 sys/arm64/arm64/pmap.c       | 11 +++--------
 sys/arm64/arm64/ptrauth.c    | 11 +++--------
 sys/arm64/include/cpu_feat.h | 10 ++++++++++
 6 files changed, 25 insertions(+), 38 deletions(-)

diff --git a/sys/arm/arm/generic_timer.c b/sys/arm/arm/generic_timer.c
index a8c779dcba6d..841e5f9e96aa 100644
--- a/sys/arm/arm/generic_timer.c
+++ b/sys/arm/arm/generic_timer.c
@@ -901,13 +901,9 @@ wfxt_enable(const struct cpu_feat *feat __unused,
 	enable_wfxt = true;
 }
 
-static struct cpu_feat feat_wfxt = {
-	.feat_name		= "FEAT_WFXT",
-	.feat_check		= wfxt_check,
-	.feat_enable		= wfxt_enable,
-	.feat_flags		= CPU_FEAT_AFTER_DEV | CPU_FEAT_SYSTEM,
-};
-DATA_SET(cpu_feat_set, feat_wfxt);
+CPU_FEAT(feat_wfxt,
+    wfxt_check, NULL, wfxt_enable,
+    CPU_FEAT_AFTER_DEV | CPU_FEAT_SYSTEM);
 #endif
 
 static uint32_t
diff --git a/sys/arm64/arm64/identcpu.c b/sys/arm64/arm64/identcpu.c
index bcacea43ad2f..f823cbce37ed 100644
--- a/sys/arm64/arm64/identcpu.c
+++ b/sys/arm64/arm64/identcpu.c
@@ -2358,14 +2358,9 @@ user_ctr_enable(const struct cpu_feat *feat __unused,
 	isb();
 }
 
-static struct cpu_feat user_ctr = {
-	.feat_name		= "Trap CTR_EL0",
-	.feat_check		= user_ctr_check,
-	.feat_has_errata	= user_ctr_has_errata,
-	.feat_enable		= user_ctr_enable,
-	.feat_flags		= CPU_FEAT_AFTER_DEV | CPU_FEAT_PER_CPU,
-};
-DATA_SET(cpu_feat_set, user_ctr);
+CPU_FEAT(trap_ctr,
+    user_ctr_check, user_ctr_has_errata, user_ctr_enable,
+    CPU_FEAT_AFTER_DEV | CPU_FEAT_PER_CPU);
 
 static bool
 user_ctr_handler(uint64_t esr, struct trapframe *frame)
diff --git a/sys/arm64/arm64/machdep.c b/sys/arm64/arm64/machdep.c
index 53856dd90cae..8a83185df9b1 100644
--- a/sys/arm64/arm64/machdep.c
+++ b/sys/arm64/arm64/machdep.c
@@ -202,13 +202,9 @@ pan_enable(const struct cpu_feat *feat __unused,
 	    ".arch_extension nopan	\n");
 }
 
-static struct cpu_feat feat_pan = {
-	.feat_name		= "FEAT_PAN",
-	.feat_check		= pan_check,
-	.feat_enable		= pan_enable,
-	.feat_flags		= CPU_FEAT_EARLY_BOOT | CPU_FEAT_PER_CPU,
-};
-DATA_SET(cpu_feat_set, feat_pan);
+CPU_FEAT(feat_pan,
+    pan_check, NULL, pan_enable,
+    CPU_FEAT_EARLY_BOOT | CPU_FEAT_PER_CPU);
 
 bool
 has_hyp(void)
diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c
index ec89c4573799..77169e122106 100644
--- a/sys/arm64/arm64/pmap.c
+++ b/sys/arm64/arm64/pmap.c
@@ -1716,14 +1716,9 @@ pmap_dbm_enable(const struct cpu_feat *feat __unused,
 	isb();
 }
 
-static struct cpu_feat feat_dbm = {
-	.feat_name		= "FEAT_HAFDBS (DBM)",
-	.feat_check		= pmap_dbm_check,
-	.feat_has_errata	= pmap_dbm_has_errata,
-	.feat_enable		= pmap_dbm_enable,
-	.feat_flags		= CPU_FEAT_AFTER_DEV | CPU_FEAT_PER_CPU,
-};
-DATA_SET(cpu_feat_set, feat_dbm);
+CPU_FEAT(feat_hafdbs,
+    pmap_dbm_check, pmap_dbm_has_errata, pmap_dbm_enable,
+    CPU_FEAT_AFTER_DEV | CPU_FEAT_PER_CPU);
 
 /*
  *	Initialize the pmap module.
diff --git a/sys/arm64/arm64/ptrauth.c b/sys/arm64/arm64/ptrauth.c
index dbe0c69b8d60..7f7a1dd41d8d 100644
--- a/sys/arm64/arm64/ptrauth.c
+++ b/sys/arm64/arm64/ptrauth.c
@@ -155,14 +155,9 @@ ptrauth_enable(const struct cpu_feat *feat __unused,
 #endif
 }
 
-
-static struct cpu_feat feat_pauth = {
-	.feat_name		= "FEAT_PAuth",
-	.feat_check		= ptrauth_check,
-	.feat_enable		= ptrauth_enable,
-	.feat_flags		= CPU_FEAT_EARLY_BOOT | CPU_FEAT_SYSTEM,
-};
-DATA_SET(cpu_feat_set, feat_pauth);
+CPU_FEAT(feat_pauth,
+    ptrauth_check, NULL, ptrauth_enable,
+    CPU_FEAT_EARLY_BOOT | CPU_FEAT_SYSTEM);
 
 /* Copy the keys when forking a new process */
 void
diff --git a/sys/arm64/include/cpu_feat.h b/sys/arm64/include/cpu_feat.h
index 9fe6a9dd95d9..6a0b2d78f526 100644
--- a/sys/arm64/include/cpu_feat.h
+++ b/sys/arm64/include/cpu_feat.h
@@ -64,6 +64,16 @@ struct cpu_feat {
 };
 SET_DECLARE(cpu_feat_set, struct cpu_feat);
 
+#define	CPU_FEAT(name, check, has_errata, enable, flags)	\
+static struct cpu_feat name = {						\
+	.feat_name		= #name,				\
+	.feat_check		= check,				\
+	.feat_has_errata	= has_errata,				\
+	.feat_enable		= enable,				\
+	.feat_flags		= flags,				\
+};									\
+DATA_SET(cpu_feat_set, name)
+
 /*
  * Allow drivers to mark an erratum as worked around, e.g. the Errata
  * Management ABI may know the workaround isn't needed on a given system.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202509041628.584GSkpV033035>