The branch main has been updated by andrew:

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

commit b3605a7bb6f8c58d939e642671ce70b0ce39b95e
Author:     Andrew Turner <and...@freebsd.org>
AuthorDate: 2025-09-04 14:23:23 +0000
Commit:     Andrew Turner <and...@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.

Reply via email to