@@ -2959,6 +2959,13 @@ static bool has_sve_feature(const struct arm64_cpu_capabilities *cap, int scope)
29592959}
29602960#endif
29612961
2962+ #ifdef CONFIG_ARM64_SME
2963+ static bool has_sme_feature (const struct arm64_cpu_capabilities * cap , int scope )
2964+ {
2965+ return system_supports_sme () && has_user_cpuid_feature (cap , scope );
2966+ }
2967+ #endif
2968+
29622969static const struct arm64_cpu_capabilities arm64_elf_hwcaps [] = {
29632970 HWCAP_CAP (ID_AA64ISAR0_EL1 , AES , PMULL , CAP_HWCAP , KERNEL_HWCAP_PMULL ),
29642971 HWCAP_CAP (ID_AA64ISAR0_EL1 , AES , AES , CAP_HWCAP , KERNEL_HWCAP_AES ),
@@ -3037,25 +3044,25 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
30373044 HWCAP_CAP (ID_AA64ISAR2_EL1 , BC , IMP , CAP_HWCAP , KERNEL_HWCAP_HBC ),
30383045#ifdef CONFIG_ARM64_SME
30393046 HWCAP_CAP (ID_AA64PFR1_EL1 , SME , IMP , CAP_HWCAP , KERNEL_HWCAP_SME ),
3040- HWCAP_CAP ( ID_AA64SMFR0_EL1 , FA64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_FA64 ),
3041- HWCAP_CAP ( ID_AA64SMFR0_EL1 , LUTv2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_LUTV2 ),
3042- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SMEver , SME2p1 , CAP_HWCAP , KERNEL_HWCAP_SME2P1 ),
3043- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SMEver , SME2 , CAP_HWCAP , KERNEL_HWCAP_SME2 ),
3044- HWCAP_CAP ( ID_AA64SMFR0_EL1 , I16I64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I64 ),
3045- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F64F64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F64F64 ),
3046- HWCAP_CAP ( ID_AA64SMFR0_EL1 , I16I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I32 ),
3047- HWCAP_CAP ( ID_AA64SMFR0_EL1 , B16B16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16B16 ),
3048- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F16F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F16 ),
3049- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F8F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F16 ),
3050- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F8F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F32 ),
3051- HWCAP_CAP ( ID_AA64SMFR0_EL1 , I8I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I8I32 ),
3052- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F32 ),
3053- HWCAP_CAP ( ID_AA64SMFR0_EL1 , B16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16F32 ),
3054- HWCAP_CAP ( ID_AA64SMFR0_EL1 , BI32I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_BI32I32 ),
3055- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F32F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F32F32 ),
3056- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SF8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8FMA ),
3057- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SF8DP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP4 ),
3058- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SF8DP2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP2 ),
3047+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , FA64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_FA64 ),
3048+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , LUTv2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_LUTV2 ),
3049+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SMEver , SME2p1 , CAP_HWCAP , KERNEL_HWCAP_SME2P1 ),
3050+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SMEver , SME2 , CAP_HWCAP , KERNEL_HWCAP_SME2 ),
3051+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , I16I64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I64 ),
3052+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F64F64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F64F64 ),
3053+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , I16I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I32 ),
3054+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , B16B16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16B16 ),
3055+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F16F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F16 ),
3056+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F8F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F16 ),
3057+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F8F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F32 ),
3058+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , I8I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I8I32 ),
3059+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F32 ),
3060+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , B16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16F32 ),
3061+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , BI32I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_BI32I32 ),
3062+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F32F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F32F32 ),
3063+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SF8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8FMA ),
3064+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SF8DP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP4 ),
3065+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SF8DP2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP2 ),
30593066#endif /* CONFIG_ARM64_SME */
30603067 HWCAP_CAP (ID_AA64FPFR0_EL1 , F8CVT , IMP , CAP_HWCAP , KERNEL_HWCAP_F8CVT ),
30613068 HWCAP_CAP (ID_AA64FPFR0_EL1 , F8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_F8FMA ),
0 commit comments