}
 
 static bool
-has_mismatched_cache_line_size(const struct arm64_cpu_capabilities *entry,
-                               int scope)
+has_mismatched_cache_type(const struct arm64_cpu_capabilities *entry,
+                         int scope)
 {
        u64 mask = CTR_CACHE_MINLINE_MASK;
 
+       /* Skip matching the min line sizes for cache type check */
+       if (entry->capability == ARM64_MISMATCHED_CACHE_TYPE)
+               mask ^= arm64_ftr_reg_ctrel0.strict_mask;
+
        WARN_ON(scope != SCOPE_LOCAL_CPU || preemptible());
        return (read_cpuid_cachetype() & mask) !=
               (arm64_ftr_reg_ctrel0.sys_val & mask);
        {
                .desc = "Mismatched cache line size",
                .capability = ARM64_MISMATCHED_CACHE_LINE_SIZE,
-               .matches = has_mismatched_cache_line_size,
+               .matches = has_mismatched_cache_type,
+               .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
+               .cpu_enable = cpu_enable_trap_ctr_access,
+       },
+       {
+               .desc = "Mismatched cache type",
+               .capability = ARM64_MISMATCHED_CACHE_TYPE,
+               .matches = has_mismatched_cache_type,
                .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
                .cpu_enable = cpu_enable_trap_ctr_access,
        },