@@ -2804,6 +2804,13 @@ static bool has_sve_feature(const struct arm64_cpu_capabilities *cap, int scope)
28042804}
28052805#endif
28062806
2807+ #ifdef CONFIG_ARM64_SME
2808+ static bool has_sme_feature (const struct arm64_cpu_capabilities * cap , int scope )
2809+ {
2810+ return system_supports_sme () && has_user_cpuid_feature (cap , scope );
2811+ }
2812+ #endif
2813+
28072814static const struct arm64_cpu_capabilities arm64_elf_hwcaps [] = {
28082815 HWCAP_CAP (ID_AA64ISAR0_EL1 , AES , PMULL , CAP_HWCAP , KERNEL_HWCAP_PMULL ),
28092816 HWCAP_CAP (ID_AA64ISAR0_EL1 , AES , AES , CAP_HWCAP , KERNEL_HWCAP_AES ),
@@ -2875,20 +2882,20 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
28752882 HWCAP_CAP (ID_AA64ISAR2_EL1 , MOPS , IMP , CAP_HWCAP , KERNEL_HWCAP_MOPS ),
28762883 HWCAP_CAP (ID_AA64ISAR2_EL1 , BC , IMP , CAP_HWCAP , KERNEL_HWCAP_HBC ),
28772884#ifdef CONFIG_ARM64_SME
2878- HWCAP_CAP ( ID_AA64PFR1_EL1 , SME , IMP , CAP_HWCAP , KERNEL_HWCAP_SME ),
2879- HWCAP_CAP ( ID_AA64SMFR0_EL1 , FA64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_FA64 ),
2880- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SMEver , SME2p1 , CAP_HWCAP , KERNEL_HWCAP_SME2P1 ),
2881- HWCAP_CAP ( ID_AA64SMFR0_EL1 , SMEver , SME2 , CAP_HWCAP , KERNEL_HWCAP_SME2 ),
2882- HWCAP_CAP ( ID_AA64SMFR0_EL1 , I16I64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I64 ),
2883- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F64F64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F64F64 ),
2884- HWCAP_CAP ( ID_AA64SMFR0_EL1 , I16I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I32 ),
2885- HWCAP_CAP ( ID_AA64SMFR0_EL1 , B16B16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16B16 ),
2886- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F16F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F16 ),
2887- HWCAP_CAP (ID_AA64SMFR0_EL1 , I8I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I8I32 ),
2888- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F32 ),
2889- HWCAP_CAP ( ID_AA64SMFR0_EL1 , B16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16F32 ),
2890- HWCAP_CAP ( ID_AA64SMFR0_EL1 , BI32I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_BI32I32 ),
2891- HWCAP_CAP ( ID_AA64SMFR0_EL1 , F32F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F32F32 ),
2885+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64PFR1_EL1 , SME , IMP , CAP_HWCAP , KERNEL_HWCAP_SME ),
2886+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , FA64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_FA64 ),
2887+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SMEver , SME2p1 , CAP_HWCAP , KERNEL_HWCAP_SME2P1 ),
2888+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , SMEver , SME2 , CAP_HWCAP , KERNEL_HWCAP_SME2 ),
2889+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , I16I64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I64 ),
2890+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F64F64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F64F64 ),
2891+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , I16I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I32 ),
2892+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , B16B16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16B16 ),
2893+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F16F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F16 ),
2894+ HWCAP_CAP (ID_MATCH_ID ( has_sme_feature , AA64SMFR0_EL1 , I8I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I8I32 ),
2895+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F32 ),
2896+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , B16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16F32 ),
2897+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , BI32I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_BI32I32 ),
2898+ HWCAP_CAP_MATCH_ID ( has_sme_feature , ID_AA64SMFR0_EL1 , F32F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F32F32 ),
28922899#endif /* CONFIG_ARM64_SME */
28932900 {},
28942901};
0 commit comments