Patch "[PATCH 085/135] arm64: Add workaround for Cavium erratum 27456" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
[PATCH 085/135] arm64: Add workaround for Cavium erratum 27456
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
0085-arm64-Add-workaround-for-Cavium-erratum-27456.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
94dcb20e9ee73a8752525d6acaf38e0dbba97d55Mon Sep 17 00:00:00 2001
From: Andrew Pinski <[email protected]>
Date: Wed, 24 Feb 2016 17:44:57 -0800
Subject: [PATCH 085/135] arm64: Add workaround for Cavium erratum 27456
[ Upstream commit 104a0c02e8b1936c049e18a6d4e4ab040fb61213 ]
On ThunderX T88 pass 1.x through 2.1 parts, broadcast TLBI instructions may cause the icache to become corrupted if it contains data for a non-current ASID.
This patch implements the workaround (which invalidates the local icache when switching the mm) by using code patching.
--- arch/arm64/Kconfig | 11 +++++++++++ arch/arm64/include/asm/cpufeature.h | 3 ++- arch/arm64/kernel/cpu_errata.c | 9 +++++++++ arch/arm64/mm/proc.S | 12 ++++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-)
arch/arm64/Kconfig +11 -0
@@ -401,6 +401,17 @@ config CAVIUM_ERRATUM_23154 If unsure, say Y. +config CAVIUM_ERRATUM_27456 + bool "Cavium erratum 27456: Broadcast TLBI instructions may cause icache corruption" + default y + help + On ThunderX T88 pass 1.x through 2.1 parts, broadcast TLBI + instructions may cause the icache to become corrupted if it + contains data for a non-current ASID. The fix is to + invalidate the icache when changing the mm context. + + If unsure, say Y. + endmenu
arch/arm64/include/asm/cpufeature.h +2 -1
@@ -30,8 +30,9 @@#define ARM64_HAS_LSE_ATOMICS 5#define ARM64_WORKAROUND_CAVIUM_23154 6#define ARM64_WORKAROUND_834220 7 +#define ARM64_WORKAROUND_CAVIUM_27456 8 -#define ARM64_NCAPS 8 +#define ARM64_NCAPS 9#ifndef __ASSEMBLY__
arch/arm64/kernel/cpu_errata.c +9 -0
@@ -100,6 +100,15 @@ const struct arm64_cpu_capabilities arm6 MIDR_RANGE(MIDR_THUNDERX, 0x00, 0x01), },#endif +#ifdef CONFIG_CAVIUM_ERRATUM_27456 + { +/* Cavium ThunderX, T88 pass 1.x - 2.1 */ + .desc = "Cavium erratum 27456", + .capability = ARM64_WORKAROUND_CAVIUM_27456, + MIDR_RANGE(MIDR_THUNDERX, 0x00, + (1 << MIDR_VARIANT_SHIFT) | 1), + }, +#endif { } };
arch/arm64/mm/proc.S +12 -0
@@ -25,6 +25,8 @@ #include <asm/hwcap.h> #include <asm/pgtable-hwdef.h> #include <asm/pgtable.h> +#include <asm/cpufeature.h> +#include <asm/alternative.h> #include "proc-macros.S"
@@ -137,7 +139,17 @@ ENTRY(cpu_do_switch_mm) bfi x0, x1, #48, #16 // set the ASID msr ttbr0_el1, x0 // set TTBR0 isb +alternative_if_not ARM64_WORKAROUND_CAVIUM_27456 ret + nop + nop + nop +alternative_else + ic iallu + dsb nsh + isb + ret +alternative_endif ENDPROC(cpu_do_switch_mm) .section ".text.init", #alloc, #execinstr
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/0085-arm64-Add-workaround-for-Cavium-erratum-27456.patch