@@ -3135,6 +3135,13 @@ static bool has_sve_feature(const struct arm64_cpu_capabilities *cap, int scope)
3135
3135
}
3136
3136
#endif
3137
3137
3138
+ #ifdef CONFIG_ARM64_SME
3139
+ static bool has_sme_feature (const struct arm64_cpu_capabilities * cap , int scope )
3140
+ {
3141
+ return system_supports_sme () && has_user_cpuid_feature (cap , scope );
3142
+ }
3143
+ #endif
3144
+
3138
3145
static const struct arm64_cpu_capabilities arm64_elf_hwcaps [] = {
3139
3146
HWCAP_CAP (ID_AA64ISAR0_EL1 , AES , PMULL , CAP_HWCAP , KERNEL_HWCAP_PMULL ),
3140
3147
HWCAP_CAP (ID_AA64ISAR0_EL1 , AES , AES , CAP_HWCAP , KERNEL_HWCAP_AES ),
@@ -3223,31 +3230,31 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
3223
3230
HWCAP_CAP (ID_AA64ISAR2_EL1 , BC , IMP , CAP_HWCAP , KERNEL_HWCAP_HBC ),
3224
3231
#ifdef CONFIG_ARM64_SME
3225
3232
HWCAP_CAP (ID_AA64PFR1_EL1 , SME , IMP , CAP_HWCAP , KERNEL_HWCAP_SME ),
3226
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , FA64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_FA64 ),
3227
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , LUTv2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_LUTV2 ),
3228
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SMEver , SME2p2 , CAP_HWCAP , KERNEL_HWCAP_SME2P2 ),
3229
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SMEver , SME2p1 , CAP_HWCAP , KERNEL_HWCAP_SME2P1 ),
3230
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SMEver , SME2 , CAP_HWCAP , KERNEL_HWCAP_SME2 ),
3231
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , I16I64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I64 ),
3232
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F64F64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F64F64 ),
3233
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , I16I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I32 ),
3234
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , B16B16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16B16 ),
3235
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F16F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F16 ),
3236
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F8F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F16 ),
3237
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F8F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F32 ),
3238
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , I8I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I8I32 ),
3239
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F32 ),
3240
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , B16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16F32 ),
3241
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , BI32I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_BI32I32 ),
3242
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F32F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F32F32 ),
3243
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SF8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8FMA ),
3244
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SF8DP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP4 ),
3245
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SF8DP2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP2 ),
3246
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SBitPerm , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SBITPERM ),
3247
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , AES , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_AES ),
3248
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SFEXPA , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SFEXPA ),
3249
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , STMOP , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_STMOP ),
3250
- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SMOP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SMOP4 ),
3233
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , FA64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_FA64 ),
3234
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , LUTv2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_LUTV2 ),
3235
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SMEver , SME2p2 , CAP_HWCAP , KERNEL_HWCAP_SME2P2 ),
3236
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SMEver , SME2p1 , CAP_HWCAP , KERNEL_HWCAP_SME2P1 ),
3237
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SMEver , SME2 , CAP_HWCAP , KERNEL_HWCAP_SME2 ),
3238
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , I16I64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I64 ),
3239
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F64F64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F64F64 ),
3240
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , I16I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I32 ),
3241
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , B16B16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16B16 ),
3242
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F16F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F16 ),
3243
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F8F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F16 ),
3244
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F8F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F32 ),
3245
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , I8I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I8I32 ),
3246
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F32 ),
3247
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , B16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16F32 ),
3248
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , BI32I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_BI32I32 ),
3249
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F32F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F32F32 ),
3250
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SF8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8FMA ),
3251
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SF8DP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP4 ),
3252
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SF8DP2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP2 ),
3253
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SBitPerm , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SBITPERM ),
3254
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , AES , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_AES ),
3255
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SFEXPA , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SFEXPA ),
3256
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , STMOP , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_STMOP ),
3257
+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SMOP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SMOP4 ),
3251
3258
#endif /* CONFIG_ARM64_SME */
3252
3259
HWCAP_CAP (ID_AA64FPFR0_EL1 , F8CVT , IMP , CAP_HWCAP , KERNEL_HWCAP_F8CVT ),
3253
3260
HWCAP_CAP (ID_AA64FPFR0_EL1 , F8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_F8FMA ),
0 commit comments