Forum | Documentation | Website | Blog

Skip to content
Snippets Groups Projects
  • Mark Rutland's avatar
    arm64: errata: Unify speculative SSBS errata logic · ec768766
    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: default avatarMark 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: default avatarCatalin Marinas <catalin.marinas@arm.com>
    ec768766
Forked from BeagleBoard.org / Linux
45176 commits behind the upstream repository.
silicon-errata.rst 19.57 KiB

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