|
@@ -65,11 +65,15 @@ is_kryo_midr(const struct arm64_cpu_capabilities *entry, int scope)
|
|
|
}
|
|
|
|
|
|
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);
|
|
@@ -615,7 +619,14 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
|
|
|
{
|
|
|
.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,
|
|
|
},
|