@@ -3122,6 +3122,13 @@ static bool has_sve_feature(const struct arm64_cpu_capabilities *cap, int scope)
31223122}
31233123#endif
31243124
3125+ #ifdef CONFIG_ARM64_SME
3126+ static bool has_sme_feature (const struct arm64_cpu_capabilities * cap , int scope )
3127+ {
3128+ return system_supports_sme () && has_user_cpuid_feature (cap , scope );
3129+ }
3130+ #endif
3131+
31253132static const struct arm64_cpu_capabilities arm64_elf_hwcaps [] = {
31263133 HWCAP_CAP (ID_AA64ISAR0_EL1 , AES , PMULL , CAP_HWCAP , KERNEL_HWCAP_PMULL ),
31273134 HWCAP_CAP (ID_AA64ISAR0_EL1 , AES , AES , CAP_HWCAP , KERNEL_HWCAP_AES ),
@@ -3210,31 +3217,31 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
32103217 HWCAP_CAP (ID_AA64ISAR2_EL1 , BC , IMP , CAP_HWCAP , KERNEL_HWCAP_HBC ),
32113218#ifdef CONFIG_ARM64_SME
32123219 HWCAP_CAP (ID_AA64PFR1_EL1 , SME , IMP , CAP_HWCAP , KERNEL_HWCAP_SME ),
3213- HWCAP_CAP ( ID_AA64SMFR0_EL1 , FA64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_FA64 ),
3214- HWCAP_CAP ( ID_AA64SMFR0_EL1 , LUTv2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_LUTV2 ),
3215- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SMEver , SME2p2 , CAP_HWCAP , KERNEL_HWCAP_SME2P2 ),
3216- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SMEver , SME2p1 , CAP_HWCAP , KERNEL_HWCAP_SME2P1 ),
3217- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SMEver , SME2 , CAP_HWCAP , KERNEL_HWCAP_SME2 ),
3218- HWCAP_CAP ( ID_AA64SMFR0_EL1 , I16I64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I64 ),
3219- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F64F64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F64F64 ),
3220- HWCAP_CAP ( ID_AA64SMFR0_EL1 , I16I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I32 ),
3221- HWCAP_CAP ( ID_AA64SMFR0_EL1 , B16B16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16B16 ),
3222- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F16F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F16 ),
3223- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F8F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F16 ),
3224- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F8F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F32 ),
3225- HWCAP_CAP ( ID_AA64SMFR0_EL1 , I8I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I8I32 ),
3226- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F32 ),
3227- HWCAP_CAP ( ID_AA64SMFR0_EL1 , B16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16F32 ),
3228- HWCAP_CAP ( ID_AA64SMFR0_EL1 , BI32I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_BI32I32 ),
3229- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F32F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F32F32 ),
3230- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SF8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8FMA ),
3231- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SF8DP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP4 ),
3232- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SF8DP2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP2 ),
3233- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SBitPerm , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SBITPERM ),
3234- HWCAP_CAP ( ID_AA64SMFR0_EL1 , AES , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_AES ),
3235- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SFEXPA , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SFEXPA ),
3236- HWCAP_CAP ( ID_AA64SMFR0_EL1 , STMOP , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_STMOP ),
3237- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SMOP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SMOP4 ),
3220+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , FA64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_FA64 ),
3221+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , LUTv2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_LUTV2 ),
3222+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SMEver , SME2p2 , CAP_HWCAP , KERNEL_HWCAP_SME2P2 ),
3223+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SMEver , SME2p1 , CAP_HWCAP , KERNEL_HWCAP_SME2P1 ),
3224+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SMEver , SME2 , CAP_HWCAP , KERNEL_HWCAP_SME2 ),
3225+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , I16I64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I64 ),
3226+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F64F64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F64F64 ),
3227+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , I16I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I32 ),
3228+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , B16B16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16B16 ),
3229+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F16F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F16 ),
3230+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F8F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F16 ),
3231+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F8F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F32 ),
3232+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , I8I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I8I32 ),
3233+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F32 ),
3234+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , B16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16F32 ),
3235+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , BI32I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_BI32I32 ),
3236+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F32F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F32F32 ),
3237+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SF8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8FMA ),
3238+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SF8DP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP4 ),
3239+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SF8DP2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP2 ),
3240+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SBitPerm , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SBITPERM ),
3241+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , AES , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_AES ),
3242+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SFEXPA , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SFEXPA ),
3243+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , STMOP , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_STMOP ),
3244+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SMOP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SMOP4 ),
32383245#endif /* CONFIG_ARM64_SME */
32393246 HWCAP_CAP (ID_AA64FPFR0_EL1 , F8CVT , IMP , CAP_HWCAP , KERNEL_HWCAP_F8CVT ),
32403247 HWCAP_CAP (ID_AA64FPFR0_EL1 , F8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_F8FMA ),
0 commit comments