Define X-macros to generate tables for all user-facing CPU properties, including fractional properties.
Properties that map to fields that are not supported by the linux kernel (i.e. not in the ftr_bits array) are not included. Co-authored-by: Khushit Shah <[email protected]> Signed-off-by: Shaju Abraham <[email protected]> --- target/arm/arm-cpu-frac.inc.h | 34 +++++++ target/arm/arm-cpu-props.inc.h | 180 +++++++++++++++++++++++++++++++++ 2 files changed, 214 insertions(+) create mode 100644 target/arm/arm-cpu-frac.inc.h create mode 100644 target/arm/arm-cpu-props.inc.h diff --git a/target/arm/arm-cpu-frac.inc.h b/target/arm/arm-cpu-frac.inc.h new file mode 100644 index 0000000000..6c194daf7c --- /dev/null +++ b/target/arm/arm-cpu-frac.inc.h @@ -0,0 +1,34 @@ + +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +FRAC_TABLE_START(CSV2) +FRAC_VAL("0.0", 0, 0) +FRAC_VAL("1.0", 1, 0) +FRAC_VAL("1.1", 1, 1) +FRAC_VAL("1.2", 1, 2) +FRAC_VAL("2.0", 2, 0) +FRAC_VAL("3.0", 3, 0) +FRAC_TABLE_END(CSV2) + +FRAC_TABLE_START(MPAM) +FRAC_VAL("0.0", 0, 0) +FRAC_VAL("0.1", 0, 1) +FRAC_VAL("1.0", 1, 0) +FRAC_VAL("1.1", 1, 1) +FRAC_TABLE_END(MPAM) + +FRAC_TABLE_START(RAS) +FRAC_VAL("0.0", 0, 0) +FRAC_VAL("1.0", 1, 0) +FRAC_VAL("1.1", 1, 1) +FRAC_VAL("1.1_base", 2, 0) +FRAC_VAL("2.0", 3, 0) +FRAC_TABLE_END(RAS) + +FRAC_TABLE_START(NV) +FRAC_VAL("0.0", 0, 0) +FRAC_VAL("1.0", 1, 0) +FRAC_VAL("2.0", 2, 0) +FRAC_VAL("2.0_only", 2, 1) +FRAC_VAL("2.1", 2, 2) +FRAC_TABLE_END(NV) diff --git a/target/arm/arm-cpu-props.inc.h b/target/arm/arm-cpu-props.inc.h new file mode 100644 index 0000000000..13a82e5b22 --- /dev/null +++ b/target/arm/arm-cpu-props.inc.h @@ -0,0 +1,180 @@ + +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +ARM_PROP("feat_AES", STRING, ID_AA64ISAR0, AES) +ARM_PROP("feat_SHA1", STRING, ID_AA64ISAR0, SHA1) +ARM_PROP("feat_SHA2", STRING, ID_AA64ISAR0, SHA2) +ARM_PROP("feat_CRC32", STRING, ID_AA64ISAR0, CRC32) +ARM_PROP("feat_ATOMIC", STRING, ID_AA64ISAR0, ATOMIC) +ARM_PROP("feat_RDM", STRING, ID_AA64ISAR0, RDM) +ARM_PROP("feat_SHA3", STRING, ID_AA64ISAR0, SHA3) +ARM_PROP("feat_SM3", STRING, ID_AA64ISAR0, SM3) +ARM_PROP("feat_SM4", STRING, ID_AA64ISAR0, SM4) +ARM_PROP("feat_DP", STRING, ID_AA64ISAR0, DP) +ARM_PROP("feat_FHM", STRING, ID_AA64ISAR0, FHM) +ARM_PROP("feat_TS", STRING, ID_AA64ISAR0, TS) +ARM_PROP("feat_TLB", STRING, ID_AA64ISAR0, TLB) +ARM_PROP("feat_RNDR", STRING, ID_AA64ISAR0, RNDR) + +ARM_PROP("feat_DPB", STRING, ID_AA64ISAR1, DPB) +ARM_PROP("hw_prop_APA", STRING, ID_AA64ISAR1, APA) +ARM_PROP("hw_prop_API", STRING, ID_AA64ISAR1, API) +ARM_PROP("feat_JSCVT", STRING, ID_AA64ISAR1, JSCVT) +ARM_PROP("feat_FCMA", STRING, ID_AA64ISAR1, FCMA) +ARM_PROP("feat_LRCPC", STRING, ID_AA64ISAR1, LRCPC) +ARM_PROP("hw_prop_GPA", STRING, ID_AA64ISAR1, GPA) +ARM_PROP("hw_prop_GPI", STRING, ID_AA64ISAR1, GPI) +ARM_PROP("feat_FRINTTS", STRING, ID_AA64ISAR1, FRINTTS) +ARM_PROP("feat_SB", STRING, ID_AA64ISAR1, SB) +ARM_PROP("feat_SPECRES", STRING, ID_AA64ISAR1, SPECRES) +ARM_PROP("feat_BF16", STRING, ID_AA64ISAR1, BF16) +ARM_PROP("feat_DGH", STRING, ID_AA64ISAR1, DGH) +ARM_PROP("feat_I8MM", STRING, ID_AA64ISAR1, I8MM) +ARM_PROP("feat_XS", STRING, ID_AA64ISAR1, XS) +ARM_PROP("feat_LS64", STRING, ID_AA64ISAR1, LS64) + +ARM_PROP("feat_WFXT", STRING, ID_AA64ISAR2, WFXT) +ARM_PROP("feat_RPRES", STRING, ID_AA64ISAR2, RPRES) +ARM_PROP("hw_prop_GPA3", STRING, ID_AA64ISAR2, GPA3) +ARM_PROP("hw_prop_APA3", STRING, ID_AA64ISAR2, APA3) +ARM_PROP("feat_MOPS", STRING, ID_AA64ISAR2, MOPS) +ARM_PROP("feat_BC", STRING, ID_AA64ISAR2, BC) +ARM_PROP("feat_CLRBHB", STRING, ID_AA64ISAR2, CLRBHB) +ARM_PROP("feat_RPRFM", STRING, ID_AA64ISAR2, RPRFM) +ARM_PROP("feat_CSSC", STRING, ID_AA64ISAR2, CSSC) +ARM_PROP("feat_LUT", STRING, ID_AA64ISAR2, LUT) + +ARM_PROP("feat_FAMINMAX", STRING, ID_AA64ISAR3, FAMINMAX) +ARM_PROP("feat_LSFE", STRING, ID_AA64ISAR3, LSFE) +ARM_PROP("feat_FPRCVT", STRING, ID_AA64ISAR3, FPRCVT) + +ARM_PROP("el0_mode", STRING, ID_AA64PFR0, EL0) +ARM_PROP("el1_mode", STRING, ID_AA64PFR0, EL1) +ARM_PROP("el2_mode", STRING, ID_AA64PFR0, EL2) +ARM_PROP("el3_mode", STRING, ID_AA64PFR0, EL3) +ARM_PROP("feat_FP", STRING, ID_AA64PFR0, FP) +ARM_PROP("feat_AdvSIMD", STRING, ID_AA64PFR0, ADVSIMD) +ARM_PROP("feat_GIC", STRING, ID_AA64PFR0, GIC) +ARM_PROP("feat_SVE", STRING, ID_AA64PFR0, SVE) +ARM_PROP("feat_SEL2", STRING, ID_AA64PFR0, SEL2) +ARM_PROP("feat_AMU", STRING, ID_AA64PFR0, AMU) +ARM_PROP("feat_DIT", STRING, ID_AA64PFR0, DIT) +ARM_PROP("feat_CSV3", STRING, ID_AA64PFR0, CSV3) + +ARM_PROP("feat_BT", STRING, ID_AA64PFR1, BT) +ARM_PROP("feat_SSBS", STRING, ID_AA64PFR1, SSBS) +ARM_PROP("feat_MTE", STRING, ID_AA64PFR1, MTE) +ARM_PROP("feat_NMI", STRING, ID_AA64PFR1, NMI) +ARM_PROP("feat_MTE_FRAC", STRING, ID_AA64PFR1, MTE_FRAC) +ARM_PROP("feat_GCS", STRING, ID_AA64PFR1, GCS) +ARM_PROP("feat_DF2", STRING, ID_AA64PFR1, DF2) + +ARM_PROP("feat_MTESTOREONLY", STRING, ID_AA64PFR2, MTESTOREONLY) +ARM_PROP("feat_MTEFAR", STRING, ID_AA64PFR2, MTEFAR) +ARM_PROP("feat_FPMR", STRING, ID_AA64PFR2, FPMR) + +ARM_PROP("hw_prop_PARANGE", STRING, ID_AA64MMFR0, PARANGE) +ARM_PROP("hw_prop_ASIDBITS", STRING, ID_AA64MMFR0, ASIDBITS) +ARM_PROP("feat_BIGEND", STRING, ID_AA64MMFR0, BIGEND) +ARM_PROP("feat_SNSMEM", STRING, ID_AA64MMFR0, SNSMEM) +ARM_PROP("feat_BIGENDEL0", STRING, ID_AA64MMFR0, BIGENDEL0) +ARM_PROP("hw_prop_TGRAN16", STRING, ID_AA64MMFR0, TGRAN16) +ARM_PROP("hw_prop_TGRAN64", STRING, ID_AA64MMFR0, TGRAN64) +ARM_PROP("hw_prop_TGRAN4", STRING, ID_AA64MMFR0, TGRAN4) +ARM_PROP("hw_prop_TGRAN16_2", STRING, ID_AA64MMFR0, TGRAN16_2) +ARM_PROP("hw_prop_TGRAN64_2", STRING, ID_AA64MMFR0, TGRAN64_2) +ARM_PROP("hw_prop_TGRAN4_2", STRING, ID_AA64MMFR0, TGRAN4_2) +ARM_PROP("feat_EXS", STRING, ID_AA64MMFR0, EXS) +ARM_PROP("feat_FGT", STRING, ID_AA64MMFR0, FGT) +ARM_PROP("feat_ECV", STRING, ID_AA64MMFR0, ECV) + +ARM_PROP("feat_HAFDBS", STRING, ID_AA64MMFR1, HAFDBS) +ARM_PROP("hw_prop_VMIDBITS", STRING, ID_AA64MMFR1, VMIDBITS) +ARM_PROP("feat_VH", STRING, ID_AA64MMFR1, VH) +ARM_PROP("feat_HPDS", STRING, ID_AA64MMFR1, HPDS) +ARM_PROP("feat_LO", STRING, ID_AA64MMFR1, LO) +ARM_PROP("feat_PAN", STRING, ID_AA64MMFR1, PAN) +ARM_PROP("feat_SpecSEI", STRING, ID_AA64MMFR1, SPECSEI) +ARM_PROP("feat_XNX", STRING, ID_AA64MMFR1, XNX) +ARM_PROP("feat_TWED", STRING, ID_AA64MMFR1, TWED) +ARM_PROP("feat_ETS", STRING, ID_AA64MMFR1, ETS) +ARM_PROP("feat_HCX", STRING, ID_AA64MMFR1, HCX) +ARM_PROP("feat_AFP", STRING, ID_AA64MMFR1, AFP) +ARM_PROP("feat_TIDCP1", STRING, ID_AA64MMFR1, TIDCP1) +ARM_PROP("feat_ECBHB", STRING, ID_AA64MMFR1, ECBHB) + +ARM_PROP("feat_CNP", STRING, ID_AA64MMFR2, CNP) +ARM_PROP("feat_UAO", STRING, ID_AA64MMFR2, UAO) +ARM_PROP("feat_LSM", STRING, ID_AA64MMFR2, LSM) +ARM_PROP("feat_IESB", STRING, ID_AA64MMFR2, IESB) +ARM_PROP("hw_prop_VARANGE", STRING, ID_AA64MMFR2, VARANGE) +ARM_PROP("hw_prop_CCIDX", STRING, ID_AA64MMFR2, CCIDX) +ARM_PROP("hw_prop_ST", STRING, ID_AA64MMFR2, ST) +ARM_PROP("feat_AT", STRING, ID_AA64MMFR2, AT) +ARM_PROP("hw_prop_IDS", STRING, ID_AA64MMFR2, IDS) +ARM_PROP("hw_prop_FWB", STRING, ID_AA64MMFR2, FWB) +ARM_PROP("feat_TTL", STRING, ID_AA64MMFR2, TTL) +ARM_PROP("feat_BBM", STRING, ID_AA64MMFR2, BBM) +ARM_PROP("feat_EVT", STRING, ID_AA64MMFR2, EVT) +ARM_PROP("feat_E0PD", STRING, ID_AA64MMFR2, E0PD) + +ARM_PROP("feat_TCRX", STRING, ID_AA64MMFR3, TCRX) +ARM_PROP("feat_SCTLRX", STRING, ID_AA64MMFR3, SCTLRX) +ARM_PROP("feat_S1PIE", STRING, ID_AA64MMFR3, S1PIE) +ARM_PROP("feat_S1POE", STRING, ID_AA64MMFR3, S1POE) + +ARM_PROP("feat_E2H0", STRING, ID_AA64MMFR4, E2H0) + +ARM_PROP("feat_DBG", STRING, ID_AA64DFR0, DEBUGVER) +ARM_PROP("feat_PMU", STRING, ID_AA64DFR0, PMUVER) +ARM_PROP("hw_prop_BRPS", NUMERIC, ID_AA64DFR0, BRPS) +ARM_PROP("hw_prop_WRPs", NUMERIC, ID_AA64DFR0, WRPS) +ARM_PROP("hw_prop_CTX_CMPs", NUMERIC, ID_AA64DFR0, CTX_CMPS) +ARM_PROP("hw_prop_PMSVer", STRING, ID_AA64DFR0, PMSVER) +ARM_PROP("feat_DoubleLock", STRING, ID_AA64DFR0, DOUBLELOCK) + +ARM_PROP("hw_prop_SVEVer", STRING, ID_AA64ZFR0, SVEVER) +ARM_PROP("feat_SVE_AES", STRING, ID_AA64ZFR0, AES) +ARM_PROP("feat_SVE_ELTPERM", STRING, ID_AA64ZFR0, ELTPERM) +ARM_PROP("feat_SVE_BITPERM", STRING, ID_AA64ZFR0, BITPERM) +ARM_PROP("feat_SVE_BFLOAT16", STRING, ID_AA64ZFR0, BFLOAT16) +ARM_PROP("feat_SVE_B16B16", STRING, ID_AA64ZFR0, B16B16) +ARM_PROP("feat_SVE_SHA3", STRING, ID_AA64ZFR0, SHA3) +ARM_PROP("feat_SVE_SM4", STRING, ID_AA64ZFR0, SM4) +ARM_PROP("feat_SVE_I8MM", STRING, ID_AA64ZFR0, I8MM) +ARM_PROP("feat_SVE_F16MM", STRING, ID_AA64ZFR0, F16MM) +ARM_PROP("feat_SVE_F32MM", STRING, ID_AA64ZFR0, F32MM) +ARM_PROP("feat_SVE_F64MM", STRING, ID_AA64ZFR0, F64MM) + +ARM_PROP("feat_F8E5M2", BOOLEAN, ID_AA64FPFR0, F8E5M2) +ARM_PROP("feat_F8E4M3", BOOLEAN, ID_AA64FPFR0, F8E4M3) +ARM_PROP("feat_F8MM4", BOOLEAN, ID_AA64FPFR0, F8MM4) +ARM_PROP("feat_F8MM8", BOOLEAN, ID_AA64FPFR0, F8MM8) +ARM_PROP("feat_F8DP2", BOOLEAN, ID_AA64FPFR0, F8DP2) +ARM_PROP("feat_F8DP4", BOOLEAN, ID_AA64FPFR0, F8DP4) +ARM_PROP("feat_F8FMA", BOOLEAN, ID_AA64FPFR0, F8FMA) +ARM_PROP("feat_F8CVT", BOOLEAN, ID_AA64FPFR0, F8CVT) + +ARM_PROP("hw_prop_IMInline", NUMERIC, CTR_EL0, IMINLINE) +ARM_PROP("hw_prop_L1IP", STRING, CTR_EL0, L1IP) +ARM_PROP("hw_prop_DMInline", NUMERIC, CTR_EL0, DMINLINE) +ARM_PROP("hw_prop_ERG", NUMERIC, CTR_EL0, ERG) +ARM_PROP("hw_prop_CWG", NUMERIC, CTR_EL0, CWG) +ARM_PROP("hw_prop_IDC", BOOLEAN, CTR_EL0, IDC) +ARM_PROP("hw_prop_DIC", BOOLEAN, CTR_EL0, DIC) +ARM_PROP("hw_prop_BS", NUMERIC, DCZID_EL0, BS) +ARM_PROP("hw_prop_DZP", BOOLEAN, DCZID_EL0, DZP) + +ARM_PROP("cpu_revision", NUMERIC, MIDR, REVISION) +ARM_PROP("cpu_partnum", NUMERIC, MIDR, PARTNUM) +ARM_PROP("cpu_architecture", NUMERIC, MIDR, ARCHITECTURE) +ARM_PROP("cpu_variant", NUMERIC, MIDR, VARIANT) +ARM_PROP("cpu_implementer", NUMERIC, MIDR, IMPLEMENTER) +ARM_PROP("cpu_revidr", NUMERIC, REVIDR, VAL) +ARM_PROP("cpu_aidr", NUMERIC, AIDR, VAL) + +/* Fractional properties */ +ARM_FRACTIONAL_PROP("feat_CSV2", ID_AA64PFR0, CSV2, ID_AA64PFR1, CSV2_FRAC) +ARM_FRACTIONAL_PROP("feat_MPAM", ID_AA64PFR0, MPAM, ID_AA64PFR1, MPAM_FRAC) +ARM_FRACTIONAL_PROP("feat_RAS", ID_AA64PFR0, RAS, ID_AA64PFR1, RAS_FRAC) +ARM_FRACTIONAL_PROP("feat_NV", ID_AA64MMFR2, NV, ID_AA64MMFR4, NV_FRAC) -- 2.52.0
