summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Berger <opendmb@gmail.com>2019-10-31 17:47:23 -0400
committerWill Deacon <will@kernel.org>2019-11-01 06:47:37 -0400
commitbfc97f9f199cb041cf897af3af096540948cc705 (patch)
tree94f154a4e812fbd236a27b68f0be8e9287241bef
parent36c602dcdd872e9f9b91aae5266b6d7d72b69b96 (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.rst3
-rw-r--r--arch/arm64/include/asm/cputype.h2
-rw-r--r--arch/arm64/kernel/cpu_errata.c13
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
747static 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
746const struct arm64_cpu_capabilities arm64_errata[] = { 756const 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