-
Mark Rutland authored
Cortex-X4 erratum 3194386 and Neoverse-V3 erratum 3312417 are identical, with duplicate Kconfig text and some unsightly ifdeffery. While we try to share code behind CONFIG_ARM64_WORKAROUND_SPECULATIVE_SSBS, having separate options results in a fair amount of boilerplate code, and this will only get worse as we expand the set of affected CPUs. To reduce this boilerplate, unify the two behind a common Kconfig option. This removes the duplicate text and Kconfig logic, and removes the need for the intermediate ARM64_WORKAROUND_SPECULATIVE_SSBS option. The set of affected CPUs is described as a list so that this can easily be extended. I've used ARM64_ERRATUM_3194386 (matching the Neoverse-V3 erratum ID) as the common option, matching the way we use ARM64_ERRATUM_1319367 to cover Cortex-A57 erratum 1319537 and Cortex-A72 erratum 1319367. Signed-off-by:
Mark Rutland <mark.rutland@arm.com> Cc: James Morse <james.morse@arm.com> Cc: Will Deacon <wilL@kernel.org> Link: https://lore.kernel.org/r/20240603111812.1514101-5-mark.rutland@arm.com Signed-off-by:
Catalin Marinas <catalin.marinas@arm.com>
ec768766
Silicon Errata and Software Workarounds
Author: Will Deacon <will.deacon@arm.com>
Date : 27 November 2015
It is an unfortunate fact of life that hardware is often produced with so-called "errata", which can cause it to deviate from the architecture under specific circumstances. For hardware produced by ARM, these errata are broadly classified into the following categories:
Category A A critical error without a viable workaround. Category B A significant or critical error with an acceptable workaround. Category C A minor error that is not expected to occur under normal operation.
For more information, consult one of the "Software Developers Errata Notice" documents available on infocenter.arm.com (registration required).
As far as Linux is concerned, Category B errata may require some special treatment in the operating system. For example, avoiding a particular sequence of code, or configuring the processor in a particular way. A less common situation may require similar actions in order to declassify a Category A erratum into a Category C erratum. These are collectively known as "software workarounds" and are only required in the minority of cases (e.g. those cases that both require a non-secure workaround and can be triggered by Linux).
For software workarounds that may adversely impact systems unaffected by the erratum in question, a Kconfig entry is added under "Kernel Features" -> "ARM errata workarounds via the alternatives framework". With the exception of workarounds for errata deemed "rare" by Arm, these are enabled by default and patched in at runtime when an affected CPU is detected. For less-intrusive workarounds, a Kconfig option is not available and the code is structured (preferably with a comment) in such a way that the erratum will not be hit.
This approach can make it slightly onerous to determine exactly which errata are worked around in an arbitrary kernel source tree, so this file acts as a registry of software workarounds in the Linux Kernel and will be updated when new workarounds are committed and backported to stable kernels.
Implementor | Component | Erratum ID | Kconfig |
---|---|---|---|
Allwinner | A64/R18 | UNKNOWN1 | SUN50I_ERRATUM_UNKNOWN1 |
Ampere | AmpereOne | AC03_CPU_38 | AMPERE_ERRATUM_AC03_CPU_38 |
ARM | Cortex-A510 | #2457168 | ARM64_ERRATUM_2457168 |
ARM | Cortex-A510 | #2064142 | ARM64_ERRATUM_2064142 |
ARM | Cortex-A510 | #2038923 | ARM64_ERRATUM_2038923 |
ARM | Cortex-A510 | #1902691 | ARM64_ERRATUM_1902691 |
ARM | Cortex-A510 | #2051678 | ARM64_ERRATUM_2051678 |
ARM | Cortex-A510 | #2077057 | ARM64_ERRATUM_2077057 |
ARM | Cortex-A510 | #2441009 | ARM64_ERRATUM_2441009 |
ARM | Cortex-A510 | #2658417 | ARM64_ERRATUM_2658417 |
ARM | Cortex-A510 | #3117295 | ARM64_ERRATUM_3117295 |
ARM | Cortex-A520 | #2966298 | ARM64_ERRATUM_2966298 |
ARM | Cortex-A53 | #826319 | ARM64_ERRATUM_826319 |
ARM | Cortex-A53 | #827319 | ARM64_ERRATUM_827319 |
ARM | Cortex-A53 | #824069 | ARM64_ERRATUM_824069 |
ARM | Cortex-A53 | #819472 | ARM64_ERRATUM_819472 |
ARM | Cortex-A53 | #845719 | ARM64_ERRATUM_845719 |
ARM | Cortex-A53 | #843419 | ARM64_ERRATUM_843419 |
ARM | Cortex-A55 | #1024718 | ARM64_ERRATUM_1024718 |
ARM | Cortex-A55 | #1530923 | ARM64_ERRATUM_1530923 |
ARM | Cortex-A55 | #2441007 | ARM64_ERRATUM_2441007 |
ARM | Cortex-A57 | #832075 | ARM64_ERRATUM_832075 |
ARM | Cortex-A57 | #852523 | N/A |
ARM | Cortex-A57 | #834220 | ARM64_ERRATUM_834220 |
ARM | Cortex-A57 | #1319537 | ARM64_ERRATUM_1319367 |
ARM | Cortex-A57 | #1742098 | ARM64_ERRATUM_1742098 |
ARM | Cortex-A72 | #853709 | N/A |
ARM | Cortex-A72 | #1319367 | ARM64_ERRATUM_1319367 |
ARM | Cortex-A72 | #1655431 | ARM64_ERRATUM_1742098 |
ARM | Cortex-A73 | #858921 | ARM64_ERRATUM_858921 |
ARM | Cortex-A76 | #1188873,1418040 | ARM64_ERRATUM_1418040 |
ARM | Cortex-A76 | #1165522 | ARM64_ERRATUM_1165522 |
ARM | Cortex-A76 | #1286807 | ARM64_ERRATUM_1286807 |
ARM | Cortex-A76 | #1463225 | ARM64_ERRATUM_1463225 |
ARM | Cortex-A76 | #1490853 | N/A |
ARM | Cortex-A77 | #1491015 | N/A |
ARM | Cortex-A77 | #1508412 | ARM64_ERRATUM_1508412 |
ARM | Cortex-A710 | #2119858 | ARM64_ERRATUM_2119858 |
ARM | Cortex-A710 | #2054223 | ARM64_ERRATUM_2054223 |
ARM | Cortex-A710 | #2224489 | ARM64_ERRATUM_2224489 |
ARM | Cortex-A715 | #2645198 | ARM64_ERRATUM_2645198 |
ARM | Cortex-X1 | #1502854 | N/A |
ARM | Cortex-X2 | #2119858 | ARM64_ERRATUM_2119858 |
ARM | Cortex-X2 | #2224489 | ARM64_ERRATUM_2224489 |
ARM | Cortex-X4 | #3194386 | ARM64_ERRATUM_3194386 |
ARM | Neoverse-N1 | #1188873,1418040 | ARM64_ERRATUM_1418040 |
ARM | Neoverse-N1 | #1349291 | N/A |
ARM | Neoverse-N1 | #1490853 | N/A |
ARM | Neoverse-N1 | #1542419 | ARM64_ERRATUM_1542419 |
ARM | Neoverse-N2 | #2139208 | ARM64_ERRATUM_2139208 |
ARM | Neoverse-N2 | #2067961 | ARM64_ERRATUM_2067961 |
ARM | Neoverse-N2 | #2253138 | ARM64_ERRATUM_2253138 |
ARM | Neoverse-V1 | #1619801 | N/A |
ARM | Neoverse-V3 | #3312417 | ARM64_ERRATUM_3194386 |
ARM | MMU-500 | #841119,826419 | N/A |
ARM | MMU-600 | #1076982,1209401 | N/A |
ARM | MMU-700 | #2268618,2812531 | N/A |
ARM | GIC-700 | #2941627 | ARM64_ERRATUM_2941627 |
Broadcom | Brahma-B53 | N/A | ARM64_ERRATUM_845719 |
Broadcom | Brahma-B53 | N/A | ARM64_ERRATUM_843419 |
Cavium | ThunderX ITS | #22375,24313 | CAVIUM_ERRATUM_22375 |
Cavium | ThunderX ITS | #23144 | CAVIUM_ERRATUM_23144 |
Cavium | ThunderX GICv3 | #23154,38545 | CAVIUM_ERRATUM_23154 |
Cavium | ThunderX GICv3 | #38539 | N/A |
Cavium | ThunderX Core | #27456 | CAVIUM_ERRATUM_27456 |
Cavium | ThunderX Core | #30115 | CAVIUM_ERRATUM_30115 |
Cavium | ThunderX SMMUv2 | #27704 | N/A |
Cavium | ThunderX2 SMMUv3 | #74 | N/A |
Cavium | ThunderX2 SMMUv3 | #126 | N/A |
Cavium | ThunderX2 Core | #219 | CAVIUM_TX2_ERRATUM_219 |
Marvell | ARM-MMU-500 | #582743 | N/A |
NVIDIA | Carmel Core | N/A | NVIDIA_CARMEL_CNP_ERRATUM |
NVIDIA | T241 GICv3/4.x | T241-FABRIC-4 | N/A |
Freescale/NXP | LS2080A/LS1043A | A-008585 | FSL_ERRATUM_A008585 |
Hisilicon | Hip0{5,6,7} | #161010101 | HISILICON_ERRATUM_161010101 |
Hisilicon | Hip0{6,7} | #161010701 | N/A |
Hisilicon | Hip0{6,7} | #161010803 | N/A |
Hisilicon | Hip07 | #161600802 | HISILICON_ERRATUM_161600802 |
Hisilicon | Hip08 SMMU PMCG | #162001800 | N/A |
Hisilicon | Hip08 SMMU PMCG Hip09 SMMU PMCG | #162001900 | N/A |
Qualcomm Tech. | Kryo/Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 |
Qualcomm Tech. | Kryo/Falkor v1 | E1009 | QCOM_FALKOR_ERRATUM_1009 |
Qualcomm Tech. | QDF2400 ITS | E0065 | QCOM_QDF2400_ERRATUM_0065 |
Qualcomm Tech. | Falkor v{1,2} | E1041 | QCOM_FALKOR_ERRATUM_1041 |
Qualcomm Tech. | Kryo4xx Gold | N/A | ARM64_ERRATUM_1463225 |
Qualcomm Tech. | Kryo4xx Gold | N/A | ARM64_ERRATUM_1418040 |
Qualcomm Tech. | Kryo4xx Silver | N/A | ARM64_ERRATUM_1530923 |
Qualcomm Tech. | Kryo4xx Silver | N/A | ARM64_ERRATUM_1024718 |
Qualcomm Tech. | Kryo4xx Gold | N/A | ARM64_ERRATUM_1286807 |
Rockchip | RK3588 | #3588001 | ROCKCHIP_ERRATUM_3588001 |
Fujitsu | A64FX | E#010001 | FUJITSU_ERRATUM_010001 |
ASR | ASR8601 | #8601001 | N/A |
Microsoft | Azure Cobalt 100 | #2139208 | ARM64_ERRATUM_2139208 |
Microsoft | Azure Cobalt 100 | #2067961 | ARM64_ERRATUM_2067961 |
Microsoft | Azure Cobalt 100 | #2253138 | ARM64_ERRATUM_2253138 |