aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/arm64/silicon-errata.txt8
-rw-r--r--arch/arm64/Kconfig7
-rw-r--r--arch/arm64/include/asm/cpucaps.h2
-rw-r--r--arch/arm64/kernel/cpu_errata.c24
-rw-r--r--arch/arm64/kernel/entry.S4
5 files changed, 24 insertions, 21 deletions
diff --git a/Documentation/arm64/silicon-errata.txt b/Documentation/arm64/silicon-errata.txt
index b29a32805ad0..2735462d5958 100644
--- a/Documentation/arm64/silicon-errata.txt
+++ b/Documentation/arm64/silicon-errata.txt
@@ -58,14 +58,14 @@ stable kernels.
58| ARM | Cortex-A72 | #853709 | N/A | 58| ARM | Cortex-A72 | #853709 | N/A |
59| ARM | Cortex-A73 | #858921 | ARM64_ERRATUM_858921 | 59| ARM | Cortex-A73 | #858921 | ARM64_ERRATUM_858921 |
60| ARM | Cortex-A55 | #1024718 | ARM64_ERRATUM_1024718 | 60| ARM | Cortex-A55 | #1024718 | ARM64_ERRATUM_1024718 |
61| ARM | Cortex-A76 | #1188873 | ARM64_ERRATUM_1188873 | 61| ARM | Cortex-A76 | #1188873,1418040| ARM64_ERRATUM_1418040 |
62| ARM | Cortex-A76 | #1165522 | ARM64_ERRATUM_1165522 | 62| ARM | Cortex-A76 | #1165522 | ARM64_ERRATUM_1165522 |
63| ARM | Cortex-A76 | #1286807 | ARM64_ERRATUM_1286807 | 63| ARM | Cortex-A76 | #1286807 | ARM64_ERRATUM_1286807 |
64| ARM | Neoverse-N1 | #1188873 | ARM64_ERRATUM_1188873 |
65| ARM | Cortex-A76 | #1463225 | ARM64_ERRATUM_1463225 | 64| ARM | Cortex-A76 | #1463225 | ARM64_ERRATUM_1463225 |
66| ARM | MMU-500 | #841119,#826419 | N/A | 65| ARM | Neoverse-N1 | #1188873,1418040| ARM64_ERRATUM_1418040 |
66| ARM | MMU-500 | #841119,826419 | N/A |
67| | | | | 67| | | | |
68| Cavium | ThunderX ITS | #22375, #24313 | CAVIUM_ERRATUM_22375 | 68| Cavium | ThunderX ITS | #22375,24313 | CAVIUM_ERRATUM_22375 |
69| Cavium | ThunderX ITS | #23144 | CAVIUM_ERRATUM_23144 | 69| Cavium | ThunderX ITS | #23144 | CAVIUM_ERRATUM_23144 |
70| Cavium | ThunderX GICv3 | #23154 | CAVIUM_ERRATUM_23154 | 70| Cavium | ThunderX GICv3 | #23154 | CAVIUM_ERRATUM_23154 |
71| Cavium | ThunderX Core | #27456 | CAVIUM_ERRATUM_27456 | 71| Cavium | ThunderX Core | #27456 | CAVIUM_ERRATUM_27456 |
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 5d99f492869b..6a9544606da3 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -475,16 +475,15 @@ config ARM64_ERRATUM_1024718
475 475
476 If unsure, say Y. 476 If unsure, say Y.
477 477
478config ARM64_ERRATUM_1188873 478config ARM64_ERRATUM_1418040
479 bool "Cortex-A76/Neoverse-N1: MRC read following MRRC read of specific Generic Timer in AArch32 might give incorrect result" 479 bool "Cortex-A76/Neoverse-N1: MRC read following MRRC read of specific Generic Timer in AArch32 might give incorrect result"
480 default y 480 default y
481 depends on COMPAT 481 depends on COMPAT
482 select ARM_ARCH_TIMER_OOL_WORKAROUND
483 help 482 help
484 This option adds a workaround for ARM Cortex-A76/Neoverse-N1 483 This option adds a workaround for ARM Cortex-A76/Neoverse-N1
485 erratum 1188873. 484 errata 1188873 and 1418040.
486 485
487 Affected Cortex-A76/Neoverse-N1 cores (r0p0, r1p0, r2p0) could 486 Affected Cortex-A76/Neoverse-N1 cores (r0p0 to r3p1) could
488 cause register corruption when accessing the timer registers 487 cause register corruption when accessing the timer registers
489 from AArch32 userspace. 488 from AArch32 userspace.
490 489
diff --git a/arch/arm64/include/asm/cpucaps.h b/arch/arm64/include/asm/cpucaps.h
index 73faee64e498..33401ebc187c 100644
--- a/arch/arm64/include/asm/cpucaps.h
+++ b/arch/arm64/include/asm/cpucaps.h
@@ -53,7 +53,7 @@
53#define ARM64_HAS_STAGE2_FWB 32 53#define ARM64_HAS_STAGE2_FWB 32
54#define ARM64_HAS_CRC32 33 54#define ARM64_HAS_CRC32 33
55#define ARM64_SSBS 34 55#define ARM64_SSBS 34
56#define ARM64_WORKAROUND_1188873 35 56#define ARM64_WORKAROUND_1418040 35
57#define ARM64_HAS_SB 36 57#define ARM64_HAS_SB 36
58#define ARM64_WORKAROUND_1165522 37 58#define ARM64_WORKAROUND_1165522 37
59#define ARM64_HAS_ADDRESS_AUTH_ARCH 38 59#define ARM64_HAS_ADDRESS_AUTH_ARCH 38
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c
index ac6432bfc1e4..d61beedba101 100644
--- a/arch/arm64/kernel/cpu_errata.c
+++ b/arch/arm64/kernel/cpu_errata.c
@@ -698,12 +698,16 @@ static const struct midr_range workaround_clean_cache[] = {
698}; 698};
699#endif 699#endif
700 700
701#ifdef CONFIG_ARM64_ERRATUM_1188873 701#ifdef CONFIG_ARM64_ERRATUM_1418040
702static const struct midr_range erratum_1188873_list[] = { 702/*
703 /* Cortex-A76 r0p0 to r2p0 */ 703 * - 1188873 affects r0p0 to r2p0
704 MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 2, 0), 704 * - 1418040 affects r0p0 to r3p1
705 /* Neoverse-N1 r0p0 to r2p0 */ 705 */
706 MIDR_RANGE(MIDR_NEOVERSE_N1, 0, 0, 2, 0), 706static const struct midr_range erratum_1418040_list[] = {
707 /* Cortex-A76 r0p0 to r3p1 */
708 MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 3, 1),
709 /* Neoverse-N1 r0p0 to r3p1 */
710 MIDR_RANGE(MIDR_NEOVERSE_N1, 0, 0, 3, 1),
707 {}, 711 {},
708}; 712};
709#endif 713#endif
@@ -825,11 +829,11 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
825 .matches = has_ssbd_mitigation, 829 .matches = has_ssbd_mitigation,
826 .midr_range_list = arm64_ssb_cpus, 830 .midr_range_list = arm64_ssb_cpus,
827 }, 831 },
828#ifdef CONFIG_ARM64_ERRATUM_1188873 832#ifdef CONFIG_ARM64_ERRATUM_1418040
829 { 833 {
830 .desc = "ARM erratum 1188873", 834 .desc = "ARM erratum 1418040",
831 .capability = ARM64_WORKAROUND_1188873, 835 .capability = ARM64_WORKAROUND_1418040,
832 ERRATA_MIDR_RANGE_LIST(erratum_1188873_list), 836 ERRATA_MIDR_RANGE_LIST(erratum_1418040_list),
833 }, 837 },
834#endif 838#endif
835#ifdef CONFIG_ARM64_ERRATUM_1165522 839#ifdef CONFIG_ARM64_ERRATUM_1165522
diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
index 1a7811b7e3c4..cd0c7af8e4a8 100644
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -336,8 +336,8 @@ alternative_if ARM64_WORKAROUND_845719
336alternative_else_nop_endif 336alternative_else_nop_endif
337#endif 337#endif
3383: 3383:
339#ifdef CONFIG_ARM64_ERRATUM_1188873 339#ifdef CONFIG_ARM64_ERRATUM_1418040
340alternative_if_not ARM64_WORKAROUND_1188873 340alternative_if_not ARM64_WORKAROUND_1418040
341 b 4f 341 b 4f
342alternative_else_nop_endif 342alternative_else_nop_endif
343 /* 343 /*