arm64: Rename WORKAROUND_1165522 to SPECULATIVE_AT_VHE
authorSteven Price <steven.price@arm.com>
Mon, 16 Dec 2019 11:56:29 +0000 (11:56 +0000)
committerWill Deacon <will@kernel.org>
Thu, 16 Jan 2020 10:43:53 +0000 (10:43 +0000)
Cortex-A55 is affected by a similar erratum, so rename the existing
workaround for errarum 1165522 so it can be used for both errata.

Acked-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Steven Price <steven.price@arm.com>
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/Kconfig
arch/arm64/include/asm/cpucaps.h
arch/arm64/include/asm/kvm_host.h
arch/arm64/include/asm/kvm_hyp.h
arch/arm64/kernel/cpu_errata.c
arch/arm64/kvm/hyp/switch.c
arch/arm64/kvm/hyp/tlb.c

index b1b4476..b2f0df1 100644 (file)
@@ -514,9 +514,13 @@ config ARM64_ERRATUM_1418040
 
          If unsure, say Y.
 
+config ARM64_WORKAROUND_SPECULATIVE_AT_VHE
+       bool
+
 config ARM64_ERRATUM_1165522
        bool "Cortex-A76: Speculative AT instruction using out-of-context translation regime could cause subsequent request to generate an incorrect translation"
        default y
+       select ARM64_WORKAROUND_SPECULATIVE_AT_VHE
        help
          This option adds a workaround for ARM Cortex-A76 erratum 1165522.
 
index b926838..327a38a 100644 (file)
@@ -44,7 +44,7 @@
 #define ARM64_SSBS                             34
 #define ARM64_WORKAROUND_1418040               35
 #define ARM64_HAS_SB                           36
-#define ARM64_WORKAROUND_1165522               37
+#define ARM64_WORKAROUND_SPECULATIVE_AT_VHE    37
 #define ARM64_HAS_ADDRESS_AUTH_ARCH            38
 #define ARM64_HAS_ADDRESS_AUTH_IMP_DEF         39
 #define ARM64_HAS_GENERIC_AUTH_ARCH            40
index c61260c..2a5f588 100644 (file)
@@ -571,7 +571,7 @@ static inline bool kvm_arch_requires_vhe(void)
                return true;
 
        /* Some implementations have defects that confine them to VHE */
-       if (cpus_have_cap(ARM64_WORKAROUND_1165522))
+       if (cpus_have_cap(ARM64_WORKAROUND_SPECULATIVE_AT_VHE))
                return true;
 
        return false;
index 97f21cc..167a161 100644 (file)
@@ -95,7 +95,7 @@ static __always_inline void __hyp_text __load_guest_stage2(struct kvm *kvm)
         * before we can switch to the EL1/EL0 translation regime used by
         * the guest.
         */
-       asm(ALTERNATIVE("nop", "isb", ARM64_WORKAROUND_1165522));
+       asm(ALTERNATIVE("nop", "isb", ARM64_WORKAROUND_SPECULATIVE_AT_VHE));
 }
 
 #endif /* __ARM64_KVM_HYP_H__ */
index 85f4bec..7886ddb 100644 (file)
@@ -757,6 +757,16 @@ static const struct arm64_cpu_capabilities erratum_843419_list[] = {
 };
 #endif
 
+#ifdef CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT_VHE
+static const struct midr_range erratum_speculative_at_vhe_list[] = {
+#ifdef CONFIG_ARM64_ERRATUM_1165522
+       /* Cortex A76 r0p0 to r2p0 */
+       MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 2, 0),
+#endif
+       {},
+};
+#endif
+
 const struct arm64_cpu_capabilities arm64_errata[] = {
 #ifdef CONFIG_ARM64_WORKAROUND_CLEAN_CACHE
        {
@@ -883,12 +893,11 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
                ERRATA_MIDR_RANGE_LIST(erratum_1418040_list),
        },
 #endif
-#ifdef CONFIG_ARM64_ERRATUM_1165522
+#ifdef CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT_VHE
        {
-               /* Cortex-A76 r0p0 to r2p0 */
                .desc = "ARM erratum 1165522",
-               .capability = ARM64_WORKAROUND_1165522,
-               ERRATA_MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 2, 0),
+               .capability = ARM64_WORKAROUND_SPECULATIVE_AT_VHE,
+               ERRATA_MIDR_RANGE_LIST(erratum_speculative_at_vhe_list),
        },
 #endif
 #ifdef CONFIG_ARM64_ERRATUM_1463225
index 72fbbd8..eefcaa6 100644 (file)
@@ -162,7 +162,7 @@ static void deactivate_traps_vhe(void)
         * before we can switch to the EL2/EL0 translation regime used by
         * the host.
         */
-       asm(ALTERNATIVE("nop", "isb", ARM64_WORKAROUND_1165522));
+       asm(ALTERNATIVE("nop", "isb", ARM64_WORKAROUND_SPECULATIVE_AT_VHE));
 
        write_sysreg(CPACR_EL1_DEFAULT, cpacr_el1);
        write_sysreg(vectors, vbar_el1);
index c2bc17c..c827f3e 100644 (file)
@@ -23,7 +23,7 @@ static void __hyp_text __tlb_switch_to_guest_vhe(struct kvm *kvm,
 
        local_irq_save(cxt->flags);
 
-       if (cpus_have_const_cap(ARM64_WORKAROUND_1165522)) {
+       if (cpus_have_const_cap(ARM64_WORKAROUND_SPECULATIVE_AT_VHE)) {
                /*
                 * For CPUs that are affected by ARM erratum 1165522, we
                 * cannot trust stage-1 to be in a correct state at that
@@ -103,7 +103,7 @@ static void __hyp_text __tlb_switch_to_host_vhe(struct kvm *kvm,
        write_sysreg(HCR_HOST_VHE_FLAGS, hcr_el2);
        isb();
 
-       if (cpus_have_const_cap(ARM64_WORKAROUND_1165522)) {
+       if (cpus_have_const_cap(ARM64_WORKAROUND_SPECULATIVE_AT_VHE)) {
                /* Restore the registers to what they were */
                write_sysreg_el1(cxt->tcr, SYS_TCR);
                write_sysreg_el1(cxt->sctlr, SYS_SCTLR);