|
@@ -373,15 +373,18 @@ void verify_local_cpu_errata_workarounds(void)
|
|
|
{
|
|
|
const struct arm64_cpu_capabilities *caps = arm64_errata;
|
|
|
|
|
|
- for (; caps->matches; caps++)
|
|
|
- if (!cpus_have_cap(caps->capability) &&
|
|
|
- caps->matches(caps, SCOPE_LOCAL_CPU)) {
|
|
|
+ for (; caps->matches; caps++) {
|
|
|
+ if (cpus_have_cap(caps->capability)) {
|
|
|
+ if (caps->enable)
|
|
|
+ caps->enable((void *)caps);
|
|
|
+ } else if (caps->matches(caps, SCOPE_LOCAL_CPU)) {
|
|
|
pr_crit("CPU%d: Requires work around for %s, not detected"
|
|
|
" at boot time\n",
|
|
|
smp_processor_id(),
|
|
|
caps->desc ? : "an erratum");
|
|
|
cpu_die_early();
|
|
|
}
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void update_cpu_errata_workarounds(void)
|