diff options
| -rw-r--r-- | Documentation/arm64/silicon-errata.txt | 8 | ||||
| -rw-r--r-- | arch/arm64/Kconfig | 7 | ||||
| -rw-r--r-- | arch/arm64/include/asm/cpucaps.h | 2 | ||||
| -rw-r--r-- | arch/arm64/kernel/cpu_errata.c | 24 | ||||
| -rw-r--r-- | arch/arm64/kernel/entry.S | 4 |
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 | ||
| 478 | config ARM64_ERRATUM_1188873 | 478 | config 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 |
| 702 | static 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), | 706 | static 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 | |||
| 336 | alternative_else_nop_endif | 336 | alternative_else_nop_endif |
| 337 | #endif | 337 | #endif |
| 338 | 3: | 338 | 3: |
| 339 | #ifdef CONFIG_ARM64_ERRATUM_1188873 | 339 | #ifdef CONFIG_ARM64_ERRATUM_1418040 |
| 340 | alternative_if_not ARM64_WORKAROUND_1188873 | 340 | alternative_if_not ARM64_WORKAROUND_1418040 |
| 341 | b 4f | 341 | b 4f |
| 342 | alternative_else_nop_endif | 342 | alternative_else_nop_endif |
| 343 | /* | 343 | /* |
