Merge branch kvm-arm64/wfxt into kvmarm-master/next
[linux-2.6-microblaze.git] / arch / arm64 / kernel / cpuinfo.c
index 781eab3..8eff0a3 100644 (file)
@@ -98,6 +98,14 @@ static const char *const hwcap_str[] = {
        [KERNEL_HWCAP_AFP]              = "afp",
        [KERNEL_HWCAP_RPRES]            = "rpres",
        [KERNEL_HWCAP_MTE3]             = "mte3",
+       [KERNEL_HWCAP_SME]              = "sme",
+       [KERNEL_HWCAP_SME_I16I64]       = "smei16i64",
+       [KERNEL_HWCAP_SME_F64F64]       = "smef64f64",
+       [KERNEL_HWCAP_SME_I8I32]        = "smei8i32",
+       [KERNEL_HWCAP_SME_F16F32]       = "smef16f32",
+       [KERNEL_HWCAP_SME_B16F32]       = "smeb16f32",
+       [KERNEL_HWCAP_SME_F32F32]       = "smef32f32",
+       [KERNEL_HWCAP_SME_FA64]         = "smefa64",
        [KERNEL_HWCAP_WFXT]             = "wfxt",
 };
 
@@ -402,6 +410,7 @@ static void __cpuinfo_store_cpu(struct cpuinfo_arm64 *info)
        info->reg_id_aa64pfr0 = read_cpuid(ID_AA64PFR0_EL1);
        info->reg_id_aa64pfr1 = read_cpuid(ID_AA64PFR1_EL1);
        info->reg_id_aa64zfr0 = read_cpuid(ID_AA64ZFR0_EL1);
+       info->reg_id_aa64smfr0 = read_cpuid(ID_AA64SMFR0_EL1);
 
        if (id_aa64pfr1_mte(info->reg_id_aa64pfr1))
                info->reg_gmid = read_cpuid(GMID_EL1);
@@ -413,6 +422,10 @@ static void __cpuinfo_store_cpu(struct cpuinfo_arm64 *info)
            id_aa64pfr0_sve(info->reg_id_aa64pfr0))
                info->reg_zcr = read_zcr_features();
 
+       if (IS_ENABLED(CONFIG_ARM64_SME) &&
+           id_aa64pfr1_sme(info->reg_id_aa64pfr1))
+               info->reg_smcr = read_smcr_features();
+
        cpuinfo_detect_icache_policy(info);
 }