return (need_wa > 0);
  }
  
 +static const __maybe_unused struct midr_range tx2_family_cpus[] = {
 +      MIDR_ALL_VERSIONS(MIDR_BRCM_VULCAN),
 +      MIDR_ALL_VERSIONS(MIDR_CAVIUM_THUNDERX2),
 +      {},
 +};
 +
 +static bool __maybe_unused
 +needs_tx2_tvm_workaround(const struct arm64_cpu_capabilities *entry,
 +                       int scope)
 +{
 +      int i;
 +
 +      if (!is_affected_midr_range_list(entry, scope) ||
 +          !is_hyp_mode_available())
 +              return false;
 +
 +      for_each_possible_cpu(i) {
 +              if (MPIDR_AFFINITY_LEVEL(cpu_logical_map(i), 0) != 0)
 +                      return true;
 +      }
 +
 +      return false;
 +}
 +
+ static bool __maybe_unused
+ has_neoverse_n1_erratum_1542419(const struct arm64_cpu_capabilities *entry,
+                               int scope)
+ {
+       u32 midr = read_cpuid_id();
+       bool has_dic = read_cpuid_cachetype() & BIT(CTR_DIC_SHIFT);
+       const struct midr_range range = MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N1);
+ 
+       WARN_ON(scope != SCOPE_LOCAL_CPU || preemptible());
+       return is_midr_in_range(midr, &range) && has_dic;
+ }
+ 
  #ifdef CONFIG_HARDEN_EL2_VECTORS
  
  static const struct midr_range arm64_harden_el2_vectors[] = {
                .matches = has_cortex_a76_erratum_1463225,
        },
  #endif
 +#ifdef CONFIG_CAVIUM_TX2_ERRATUM_219
 +      {
 +              .desc = "Cavium ThunderX2 erratum 219 (KVM guest sysreg trapping)",
 +              .capability = ARM64_WORKAROUND_CAVIUM_TX2_219_TVM,
 +              ERRATA_MIDR_RANGE_LIST(tx2_family_cpus),
 +              .matches = needs_tx2_tvm_workaround,
 +      },
 +      {
 +              .desc = "Cavium ThunderX2 erratum 219 (PRFM removal)",
 +              .capability = ARM64_WORKAROUND_CAVIUM_TX2_219_PRFM,
 +              ERRATA_MIDR_RANGE_LIST(tx2_family_cpus),
 +      },
++#endif
+ #ifdef CONFIG_ARM64_ERRATUM_1542419
+       {
+               /* we depend on the firmware portion for correctness */
+               .desc = "ARM erratum 1542419 (kernel portion)",
+               .capability = ARM64_WORKAROUND_1542419,
+               .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
+               .matches = has_neoverse_n1_erratum_1542419,
+               .cpu_enable = cpu_enable_trap_ctr_access,
+       },
  #endif
        {
        }