diff options
author | Doug Berger <opendmb@gmail.com> | 2019-10-31 17:47:23 -0400 |
---|---|---|
committer | Will Deacon <will@kernel.org> | 2019-11-01 06:47:37 -0400 |
commit | bfc97f9f199cb041cf897af3af096540948cc705 (patch) | |
tree | 94f154a4e812fbd236a27b68f0be8e9287241bef | |
parent | 36c602dcdd872e9f9b91aae5266b6d7d72b69b96 (diff) |
arm64: apply ARM64_ERRATUM_845719 workaround for Brahma-B53 core
The Broadcom Brahma-B53 core is susceptible to the issue described by
ARM64_ERRATUM_845719 so this commit enables the workaround to be applied
when executing on that core.
Since there are now multiple entries to match, we must convert the
existing ARM64_ERRATUM_845719 into an erratum list.
Signed-off-by: Doug Berger <opendmb@gmail.com>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Will Deacon <will@kernel.org>
-rw-r--r-- | Documentation/arm64/silicon-errata.rst | 3 | ||||
-rw-r--r-- | arch/arm64/include/asm/cputype.h | 2 | ||||
-rw-r--r-- | arch/arm64/kernel/cpu_errata.c | 13 |
3 files changed, 16 insertions, 2 deletions
diff --git a/Documentation/arm64/silicon-errata.rst b/Documentation/arm64/silicon-errata.rst index 25d62272de73..189a1768e26a 100644 --- a/Documentation/arm64/silicon-errata.rst +++ b/Documentation/arm64/silicon-errata.rst | |||
@@ -91,6 +91,9 @@ stable kernels. | |||
91 | | ARM | MMU-500 | #841119,826419 | N/A | | 91 | | ARM | MMU-500 | #841119,826419 | N/A | |
92 | +----------------+-----------------+-----------------+-----------------------------+ | 92 | +----------------+-----------------+-----------------+-----------------------------+ |
93 | +----------------+-----------------+-----------------+-----------------------------+ | 93 | +----------------+-----------------+-----------------+-----------------------------+ |
94 | | Broadcom | Brahma-B53 | N/A | ARM64_ERRATUM_845719 | | ||
95 | +----------------+-----------------+-----------------+-----------------------------+ | ||
96 | +----------------+-----------------+-----------------+-----------------------------+ | ||
94 | | Cavium | ThunderX ITS | #22375,24313 | CAVIUM_ERRATUM_22375 | | 97 | | Cavium | ThunderX ITS | #22375,24313 | CAVIUM_ERRATUM_22375 | |
95 | +----------------+-----------------+-----------------+-----------------------------+ | 98 | +----------------+-----------------+-----------------+-----------------------------+ |
96 | | Cavium | ThunderX ITS | #23144 | CAVIUM_ERRATUM_23144 | | 99 | | Cavium | ThunderX ITS | #23144 | CAVIUM_ERRATUM_23144 | |
diff --git a/arch/arm64/include/asm/cputype.h b/arch/arm64/include/asm/cputype.h index b1454d117cd2..aca07c2f6e6e 100644 --- a/arch/arm64/include/asm/cputype.h +++ b/arch/arm64/include/asm/cputype.h | |||
@@ -79,6 +79,7 @@ | |||
79 | #define CAVIUM_CPU_PART_THUNDERX_83XX 0x0A3 | 79 | #define CAVIUM_CPU_PART_THUNDERX_83XX 0x0A3 |
80 | #define CAVIUM_CPU_PART_THUNDERX2 0x0AF | 80 | #define CAVIUM_CPU_PART_THUNDERX2 0x0AF |
81 | 81 | ||
82 | #define BRCM_CPU_PART_BRAHMA_B53 0x100 | ||
82 | #define BRCM_CPU_PART_VULCAN 0x516 | 83 | #define BRCM_CPU_PART_VULCAN 0x516 |
83 | 84 | ||
84 | #define QCOM_CPU_PART_FALKOR_V1 0x800 | 85 | #define QCOM_CPU_PART_FALKOR_V1 0x800 |
@@ -105,6 +106,7 @@ | |||
105 | #define MIDR_THUNDERX_81XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_81XX) | 106 | #define MIDR_THUNDERX_81XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_81XX) |
106 | #define MIDR_THUNDERX_83XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_83XX) | 107 | #define MIDR_THUNDERX_83XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_83XX) |
107 | #define MIDR_CAVIUM_THUNDERX2 MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX2) | 108 | #define MIDR_CAVIUM_THUNDERX2 MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX2) |
109 | #define MIDR_BRAHMA_B53 MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_BRAHMA_B53) | ||
108 | #define MIDR_BRCM_VULCAN MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_VULCAN) | 110 | #define MIDR_BRCM_VULCAN MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_VULCAN) |
109 | #define MIDR_QCOM_FALKOR_V1 MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_FALKOR_V1) | 111 | #define MIDR_QCOM_FALKOR_V1 MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_FALKOR_V1) |
110 | #define MIDR_QCOM_FALKOR MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_FALKOR) | 112 | #define MIDR_QCOM_FALKOR MIDR_CPU_MODEL(ARM_CPU_IMP_QCOM, QCOM_CPU_PART_FALKOR) |
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index 091e3ec0f420..b5eeba7f5d84 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c | |||
@@ -743,6 +743,16 @@ static const struct midr_range erratum_1418040_list[] = { | |||
743 | }; | 743 | }; |
744 | #endif | 744 | #endif |
745 | 745 | ||
746 | #ifdef CONFIG_ARM64_ERRATUM_845719 | ||
747 | static const struct midr_range erratum_845719_list[] = { | ||
748 | /* Cortex-A53 r0p[01234] */ | ||
749 | MIDR_REV_RANGE(MIDR_CORTEX_A53, 0, 0, 4), | ||
750 | /* Brahma-B53 r0p[0] */ | ||
751 | MIDR_REV(MIDR_BRAHMA_B53, 0, 0), | ||
752 | {}, | ||
753 | }; | ||
754 | #endif | ||
755 | |||
746 | const struct arm64_cpu_capabilities arm64_errata[] = { | 756 | const struct arm64_cpu_capabilities arm64_errata[] = { |
747 | #ifdef CONFIG_ARM64_WORKAROUND_CLEAN_CACHE | 757 | #ifdef CONFIG_ARM64_WORKAROUND_CLEAN_CACHE |
748 | { | 758 | { |
@@ -783,10 +793,9 @@ const struct arm64_cpu_capabilities arm64_errata[] = { | |||
783 | #endif | 793 | #endif |
784 | #ifdef CONFIG_ARM64_ERRATUM_845719 | 794 | #ifdef CONFIG_ARM64_ERRATUM_845719 |
785 | { | 795 | { |
786 | /* Cortex-A53 r0p[01234] */ | ||
787 | .desc = "ARM erratum 845719", | 796 | .desc = "ARM erratum 845719", |
788 | .capability = ARM64_WORKAROUND_845719, | 797 | .capability = ARM64_WORKAROUND_845719, |
789 | ERRATA_MIDR_REV_RANGE(MIDR_CORTEX_A53, 0, 0, 4), | 798 | ERRATA_MIDR_RANGE_LIST(erratum_845719_list), |
790 | }, | 799 | }, |
791 | #endif | 800 | #endif |
792 | #ifdef CONFIG_CAVIUM_ERRATUM_23154 | 801 | #ifdef CONFIG_CAVIUM_ERRATUM_23154 |