@@ -3135,6 +3135,13 @@ static bool has_sve_feature(const struct arm64_cpu_capabilities *cap, int scope)
31353135}
31363136#endif
31373137
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+
31383145static const struct arm64_cpu_capabilities arm64_elf_hwcaps [] = {
31393146 HWCAP_CAP (ID_AA64ISAR0_EL1 , AES , PMULL , CAP_HWCAP , KERNEL_HWCAP_PMULL ),
31403147 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[] = {
32233230 HWCAP_CAP (ID_AA64ISAR2_EL1 , BC , IMP , CAP_HWCAP , KERNEL_HWCAP_HBC ),
32243231#ifdef CONFIG_ARM64_SME
32253232 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 ),
32513258#endif /* CONFIG_ARM64_SME */
32523259 HWCAP_CAP (ID_AA64FPFR0_EL1 , F8CVT , IMP , CAP_HWCAP , KERNEL_HWCAP_F8CVT ),
32533260 HWCAP_CAP (ID_AA64FPFR0_EL1 , F8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_F8FMA ),
0 commit comments