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.