@@ -268,6 +268,7 @@ static const struct arm64_ftr_bits ftr_id_aa64isar2[] = {
268268};
269269
270270static const struct arm64_ftr_bits ftr_id_aa64isar3 [] = {
271+ ARM64_FTR_BITS (FTR_VISIBLE , FTR_NONSTRICT , FTR_LOWER_SAFE , ID_AA64ISAR3_EL1_FPRCVT_SHIFT , 4 , 0 ),
271272 ARM64_FTR_BITS (FTR_VISIBLE , FTR_NONSTRICT , FTR_LOWER_SAFE , ID_AA64ISAR3_EL1_FAMINMAX_SHIFT , 4 , 0 ),
272273 ARM64_FTR_END ,
273274};
@@ -317,6 +318,8 @@ static const struct arm64_ftr_bits ftr_id_aa64zfr0[] = {
317318 FTR_STRICT , FTR_LOWER_SAFE , ID_AA64ZFR0_EL1_F64MM_SHIFT , 4 , 0 ),
318319 ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SVE ),
319320 FTR_STRICT , FTR_LOWER_SAFE , ID_AA64ZFR0_EL1_F32MM_SHIFT , 4 , 0 ),
321+ ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SVE ),
322+ FTR_STRICT , FTR_LOWER_SAFE , ID_AA64ZFR0_EL1_F16MM_SHIFT , 4 , 0 ),
320323 ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SVE ),
321324 FTR_STRICT , FTR_LOWER_SAFE , ID_AA64ZFR0_EL1_I8MM_SHIFT , 4 , 0 ),
322325 ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SVE ),
@@ -329,6 +332,8 @@ static const struct arm64_ftr_bits ftr_id_aa64zfr0[] = {
329332 FTR_STRICT , FTR_LOWER_SAFE , ID_AA64ZFR0_EL1_BF16_SHIFT , 4 , 0 ),
330333 ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SVE ),
331334 FTR_STRICT , FTR_LOWER_SAFE , ID_AA64ZFR0_EL1_BitPerm_SHIFT , 4 , 0 ),
335+ ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SVE ),
336+ FTR_STRICT , FTR_LOWER_SAFE , ID_AA64ZFR0_EL1_EltPerm_SHIFT , 4 , 0 ),
332337 ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SVE ),
333338 FTR_STRICT , FTR_LOWER_SAFE , ID_AA64ZFR0_EL1_AES_SHIFT , 4 , 0 ),
334339 ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SVE ),
@@ -373,6 +378,16 @@ static const struct arm64_ftr_bits ftr_id_aa64smfr0[] = {
373378 FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_SF8DP4_SHIFT , 1 , 0 ),
374379 ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
375380 FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_SF8DP2_SHIFT , 1 , 0 ),
381+ ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
382+ FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_SBitPerm_SHIFT , 1 , 0 ),
383+ ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
384+ FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_AES_SHIFT , 1 , 0 ),
385+ ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
386+ FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_SFEXPA_SHIFT , 1 , 0 ),
387+ ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
388+ FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_STMOP_SHIFT , 1 , 0 ),
389+ ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
390+ FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_SMOP4_SHIFT , 1 , 0 ),
376391 ARM64_FTR_END ,
377392};
378393
@@ -381,6 +396,8 @@ static const struct arm64_ftr_bits ftr_id_aa64fpfr0[] = {
381396 ARM64_FTR_BITS (FTR_VISIBLE , FTR_STRICT , FTR_EXACT , ID_AA64FPFR0_EL1_F8FMA_SHIFT , 1 , 0 ),
382397 ARM64_FTR_BITS (FTR_VISIBLE , FTR_STRICT , FTR_EXACT , ID_AA64FPFR0_EL1_F8DP4_SHIFT , 1 , 0 ),
383398 ARM64_FTR_BITS (FTR_VISIBLE , FTR_STRICT , FTR_EXACT , ID_AA64FPFR0_EL1_F8DP2_SHIFT , 1 , 0 ),
399+ ARM64_FTR_BITS (FTR_VISIBLE , FTR_STRICT , FTR_EXACT , ID_AA64FPFR0_EL1_F8MM8_SHIFT , 1 , 0 ),
400+ ARM64_FTR_BITS (FTR_VISIBLE , FTR_STRICT , FTR_EXACT , ID_AA64FPFR0_EL1_F8MM4_SHIFT , 1 , 0 ),
384401 ARM64_FTR_BITS (FTR_VISIBLE , FTR_STRICT , FTR_EXACT , ID_AA64FPFR0_EL1_F8E4M3_SHIFT , 1 , 0 ),
385402 ARM64_FTR_BITS (FTR_VISIBLE , FTR_STRICT , FTR_EXACT , ID_AA64FPFR0_EL1_F8E5M2_SHIFT , 1 , 0 ),
386403 ARM64_FTR_END ,
@@ -3092,19 +3109,24 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
30923109 HWCAP_CAP (ID_AA64MMFR2_EL1 , AT , IMP , CAP_HWCAP , KERNEL_HWCAP_USCAT ),
30933110#ifdef CONFIG_ARM64_SVE
30943111 HWCAP_CAP (ID_AA64PFR0_EL1 , SVE , IMP , CAP_HWCAP , KERNEL_HWCAP_SVE ),
3112+ HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , SVEver , SVE2p2 , CAP_HWCAP , KERNEL_HWCAP_SVE2P2 ),
30953113 HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , SVEver , SVE2p1 , CAP_HWCAP , KERNEL_HWCAP_SVE2P1 ),
30963114 HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , SVEver , SVE2 , CAP_HWCAP , KERNEL_HWCAP_SVE2 ),
30973115 HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , AES , IMP , CAP_HWCAP , KERNEL_HWCAP_SVEAES ),
30983116 HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , AES , PMULL128 , CAP_HWCAP , KERNEL_HWCAP_SVEPMULL ),
3117+ HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , AES , AES2 , CAP_HWCAP , KERNEL_HWCAP_SVE_AES2 ),
30993118 HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , BitPerm , IMP , CAP_HWCAP , KERNEL_HWCAP_SVEBITPERM ),
31003119 HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , B16B16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SVE_B16B16 ),
3120+ HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , B16B16 , BFSCALE , CAP_HWCAP , KERNEL_HWCAP_SVE_BFSCALE ),
31013121 HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , BF16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SVEBF16 ),
31023122 HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , BF16 , EBF16 , CAP_HWCAP , KERNEL_HWCAP_SVE_EBF16 ),
31033123 HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , SHA3 , IMP , CAP_HWCAP , KERNEL_HWCAP_SVESHA3 ),
31043124 HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , SM4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SVESM4 ),
31053125 HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , I8MM , IMP , CAP_HWCAP , KERNEL_HWCAP_SVEI8MM ),
31063126 HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , F32MM , IMP , CAP_HWCAP , KERNEL_HWCAP_SVEF32MM ),
31073127 HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , F64MM , IMP , CAP_HWCAP , KERNEL_HWCAP_SVEF64MM ),
3128+ HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , F16MM , IMP , CAP_HWCAP , KERNEL_HWCAP_SVE_F16MM ),
3129+ HWCAP_CAP_MATCH_ID (has_sve_feature , ID_AA64ZFR0_EL1 , EltPerm , IMP , CAP_HWCAP , KERNEL_HWCAP_SVE_ELTPERM ),
31083130#endif
31093131#ifdef CONFIG_ARM64_GCS
31103132 HWCAP_CAP (ID_AA64PFR1_EL1 , GCS , IMP , CAP_HWCAP , KERNEL_HWCAP_GCS ),
@@ -3124,6 +3146,7 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
31243146 HWCAP_CAP (ID_AA64MMFR0_EL1 , ECV , IMP , CAP_HWCAP , KERNEL_HWCAP_ECV ),
31253147 HWCAP_CAP (ID_AA64MMFR1_EL1 , AFP , IMP , CAP_HWCAP , KERNEL_HWCAP_AFP ),
31263148 HWCAP_CAP (ID_AA64ISAR2_EL1 , CSSC , IMP , CAP_HWCAP , KERNEL_HWCAP_CSSC ),
3149+ HWCAP_CAP (ID_AA64ISAR2_EL1 , CSSC , CMPBR , CAP_HWCAP , KERNEL_HWCAP_CMPBR ),
31273150 HWCAP_CAP (ID_AA64ISAR2_EL1 , RPRFM , IMP , CAP_HWCAP , KERNEL_HWCAP_RPRFM ),
31283151 HWCAP_CAP (ID_AA64ISAR2_EL1 , RPRES , IMP , CAP_HWCAP , KERNEL_HWCAP_RPRES ),
31293152 HWCAP_CAP (ID_AA64ISAR2_EL1 , WFxT , IMP , CAP_HWCAP , KERNEL_HWCAP_WFXT ),
@@ -3133,6 +3156,7 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
31333156 HWCAP_CAP (ID_AA64PFR1_EL1 , SME , IMP , CAP_HWCAP , KERNEL_HWCAP_SME ),
31343157 HWCAP_CAP (ID_AA64SMFR0_EL1 , FA64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_FA64 ),
31353158 HWCAP_CAP (ID_AA64SMFR0_EL1 , LUTv2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_LUTV2 ),
3159+ HWCAP_CAP (ID_AA64SMFR0_EL1 , SMEver , SME2p2 , CAP_HWCAP , KERNEL_HWCAP_SME2P2 ),
31363160 HWCAP_CAP (ID_AA64SMFR0_EL1 , SMEver , SME2p1 , CAP_HWCAP , KERNEL_HWCAP_SME2P1 ),
31373161 HWCAP_CAP (ID_AA64SMFR0_EL1 , SMEver , SME2 , CAP_HWCAP , KERNEL_HWCAP_SME2 ),
31383162 HWCAP_CAP (ID_AA64SMFR0_EL1 , I16I64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I64 ),
@@ -3150,6 +3174,13 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
31503174 HWCAP_CAP (ID_AA64SMFR0_EL1 , SF8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8FMA ),
31513175 HWCAP_CAP (ID_AA64SMFR0_EL1 , SF8DP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP4 ),
31523176 HWCAP_CAP (ID_AA64SMFR0_EL1 , SF8DP2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP2 ),
3177+ HWCAP_CAP (ID_AA64SMFR0_EL1 , SF8MM8 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8MM8 ),
3178+ HWCAP_CAP (ID_AA64SMFR0_EL1 , SF8MM4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8MM4 ),
3179+ HWCAP_CAP (ID_AA64SMFR0_EL1 , SBitPerm , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SBITPERM ),
3180+ HWCAP_CAP (ID_AA64SMFR0_EL1 , AES , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_AES ),
3181+ HWCAP_CAP (ID_AA64SMFR0_EL1 , SFEXPA , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SFEXPA ),
3182+ HWCAP_CAP (ID_AA64SMFR0_EL1 , STMOP , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_STMOP ),
3183+ HWCAP_CAP (ID_AA64SMFR0_EL1 , SMOP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SMOP4 ),
31533184#endif /* CONFIG_ARM64_SME */
31543185 HWCAP_CAP (ID_AA64FPFR0_EL1 , F8CVT , IMP , CAP_HWCAP , KERNEL_HWCAP_F8CVT ),
31553186 HWCAP_CAP (ID_AA64FPFR0_EL1 , F8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_F8FMA ),
0 commit comments