aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/arm64/silicon-errata.txt1
-rw-r--r--arch/arm64/Kconfig11
-rw-r--r--arch/arm64/kernel/cpu_errata.c13
3 files changed, 18 insertions, 7 deletions
diff --git a/Documentation/arm64/silicon-errata.txt b/Documentation/arm64/silicon-errata.txt
index d1e2bb801e1b..d5a124d7e242 100644
--- a/Documentation/arm64/silicon-errata.txt
+++ b/Documentation/arm64/silicon-errata.txt
@@ -61,6 +61,7 @@ stable kernels.
61| ARM | Cortex-A76 | #1188873 | ARM64_ERRATUM_1188873 | 61| ARM | Cortex-A76 | #1188873 | ARM64_ERRATUM_1188873 |
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 |
64| ARM | MMU-500 | #841119,#826419 | N/A | 65| ARM | MMU-500 | #841119,#826419 | N/A |
65| | | | | 66| | | | |
66| Cavium | ThunderX ITS | #22375, #24313 | CAVIUM_ERRATUM_22375 | 67| Cavium | ThunderX ITS | #22375, #24313 | CAVIUM_ERRATUM_22375 |
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 560f2a860637..fcda4e21fa8f 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -475,16 +475,17 @@ config ARM64_ERRATUM_1024718
475 If unsure, say Y. 475 If unsure, say Y.
476 476
477config ARM64_ERRATUM_1188873 477config ARM64_ERRATUM_1188873
478 bool "Cortex-A76: MRC read following MRRC read of specific Generic Timer in AArch32 might give incorrect result" 478 bool "Cortex-A76/Neoverse-N1: MRC read following MRRC read of specific Generic Timer in AArch32 might give incorrect result"
479 default y 479 default y
480 depends on COMPAT 480 depends on COMPAT
481 select ARM_ARCH_TIMER_OOL_WORKAROUND 481 select ARM_ARCH_TIMER_OOL_WORKAROUND
482 help 482 help
483 This option adds work arounds for ARM Cortex-A76 erratum 1188873 483 This option adds work arounds for ARM Cortex-A76/Neoverse-N1
484 erratum 1188873
484 485
485 Affected Cortex-A76 cores (r0p0, r1p0, r2p0) could cause 486 Affected Cortex-A76/Neoverse-N1 cores (r0p0, r1p0, r2p0) could
486 register corruption when accessing the timer registers from 487 cause register corruption when accessing the timer registers
487 AArch32 userspace. 488 from AArch32 userspace.
488 489
489 If unsure, say Y. 490 If unsure, say Y.
490 491
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c
index 9950bb0cbd52..06f1c8aae1dc 100644
--- a/arch/arm64/kernel/cpu_errata.c
+++ b/arch/arm64/kernel/cpu_errata.c
@@ -603,6 +603,16 @@ static const struct midr_range workaround_clean_cache[] = {
603}; 603};
604#endif 604#endif
605 605
606#ifdef CONFIG_ARM64_ERRATUM_1188873
607static const struct midr_range erratum_1188873_list[] = {
608 /* Cortex-A76 r0p0 to r2p0 */
609 MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 2, 0),
610 /* Neoverse-N1 r0p0 to r2p0 */
611 MIDR_RANGE(MIDR_NEOVERSE_N1, 0, 0, 2, 0),
612 {},
613};
614#endif
615
606const struct arm64_cpu_capabilities arm64_errata[] = { 616const struct arm64_cpu_capabilities arm64_errata[] = {
607#ifdef CONFIG_ARM64_WORKAROUND_CLEAN_CACHE 617#ifdef CONFIG_ARM64_WORKAROUND_CLEAN_CACHE
608 { 618 {
@@ -725,10 +735,9 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
725#endif 735#endif
726#ifdef CONFIG_ARM64_ERRATUM_1188873 736#ifdef CONFIG_ARM64_ERRATUM_1188873
727 { 737 {
728 /* Cortex-A76 r0p0 to r2p0 */
729 .desc = "ARM erratum 1188873", 738 .desc = "ARM erratum 1188873",
730 .capability = ARM64_WORKAROUND_1188873, 739 .capability = ARM64_WORKAROUND_1188873,
731 ERRATA_MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 2, 0), 740 ERRATA_MIDR_RANGE_LIST(erratum_1188873_list),
732 }, 741 },
733#endif 742#endif
734#ifdef CONFIG_ARM64_ERRATUM_1165522 743#ifdef CONFIG_ARM64_ERRATUM_1165522