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 withso-called “errata”, which can cause it to deviate from the architectureunder specific circumstances. For hardware produced by ARM, theseerrata are broadly classified into the following categories:

Category AA critical error without a viable workaround.
Category BA significant or critical error with an acceptableworkaround.
Category CA minor error that is not expected to occur under normaloperation.

For more information, consult one of the “Software Developers ErrataNotice” documents available on infocenter.arm.com (registrationrequired).

As far as Linux is concerned, Category B errata may require some specialtreatment in the operating system. For example, avoiding a particularsequence of code, or configuring the processor in a particular way. Aless common situation may require similar actions in order to declassifya Category A erratum into a Category C erratum. These are collectivelyknown as “software workarounds” and are only required in the minority ofcases (e.g. those cases that both require a non-secure workaroundandcan be triggered by Linux).

For software workarounds that may adversely impact systems unaffected bythe erratum in question, a Kconfig entry is added under “KernelFeatures” -> “ARM errata workarounds via the alternatives framework”.These are enabled by default and patched in at runtime when an affectedCPU is detected. For less-intrusive workarounds, a Kconfig option is notavailable and the code is structured (preferably with a comment) in sucha way that the erratum will not be hit.

This approach can make it slightly onerous to determine exactly whicherrata are worked around in an arbitrary kernel source tree, so thisfile acts as a registry of software workarounds in the Linux Kernel andwill be updated when new workarounds are committed and backported tostable kernels.

ImplementorComponentErratum IDKconfig
AllwinnerA64/R18UNKNOWN1SUN50I_ERRATUM_UNKNOWN1
    
ARMCortex-A53#826319ARM64_ERRATUM_826319
ARMCortex-A53#827319ARM64_ERRATUM_827319
ARMCortex-A53#824069ARM64_ERRATUM_824069
ARMCortex-A53#819472ARM64_ERRATUM_819472
ARMCortex-A53#845719ARM64_ERRATUM_845719
ARMCortex-A53#843419ARM64_ERRATUM_843419
ARMCortex-A55#1024718ARM64_ERRATUM_1024718
ARMCortex-A55#1530923ARM64_ERRATUM_1530923
ARMCortex-A57#832075ARM64_ERRATUM_832075
ARMCortex-A57#852523N/A
ARMCortex-A57#834220ARM64_ERRATUM_834220
ARMCortex-A57#1319537ARM64_ERRATUM_1319367
ARMCortex-A72#853709N/A
ARMCortex-A72#1319367ARM64_ERRATUM_1319367
ARMCortex-A73#858921ARM64_ERRATUM_858921
ARMCortex-A76#1188873,1418040ARM64_ERRATUM_1418040
ARMCortex-A76#1165522ARM64_ERRATUM_1165522
ARMCortex-A76#1286807ARM64_ERRATUM_1286807
ARMCortex-A76#1463225ARM64_ERRATUM_1463225
ARMNeoverse-N1#1188873,1418040ARM64_ERRATUM_1418040
ARMNeoverse-N1#1349291N/A
ARMNeoverse-N1#1542419ARM64_ERRATUM_1542419
ARMMMU-500#841119,826419N/A
    
BroadcomBrahma-B53N/AARM64_ERRATUM_845719
BroadcomBrahma-B53N/AARM64_ERRATUM_843419
    
CaviumThunderX ITS#22375,24313CAVIUM_ERRATUM_22375
CaviumThunderX ITS#23144CAVIUM_ERRATUM_23144
CaviumThunderX GICv3#23154CAVIUM_ERRATUM_23154
CaviumThunderX GICv3#38539N/A
CaviumThunderX Core#27456CAVIUM_ERRATUM_27456
CaviumThunderX Core#30115CAVIUM_ERRATUM_30115
CaviumThunderX SMMUv2#27704N/A
CaviumThunderX2 SMMUv3#74N/A
CaviumThunderX2 SMMUv3#126N/A
CaviumThunderX2 Core#219CAVIUM_TX2_ERRATUM_219
    
MarvellARM-MMU-500#582743N/A
    
Freescale/NXPLS2080A/LS1043AA-008585FSL_ERRATUM_A008585
    
HisiliconHip0{5,6,7}#161010101HISILICON_ERRATUM_161010101
HisiliconHip0{6,7}#161010701N/A
HisiliconHip0{6,7}#161010803N/A
HisiliconHip07#161600802HISILICON_ERRATUM_161600802
HisiliconHip08 SMMU PMCG#162001800N/A
    
Qualcomm Tech.Kryo/Falkor v1E1003QCOM_FALKOR_ERRATUM_1003
Qualcomm Tech.Kryo/Falkor v1E1009QCOM_FALKOR_ERRATUM_1009
Qualcomm Tech.QDF2400 ITSE0065QCOM_QDF2400_ERRATUM_0065
Qualcomm Tech.Falkor v{1,2}E1041QCOM_FALKOR_ERRATUM_1041
Qualcomm Tech.Kryo4xx GoldN/AARM64_ERRATUM_1463225
Qualcomm Tech.Kryo4xx GoldN/AARM64_ERRATUM_1418040
Qualcomm Tech.Kryo4xx SilverN/AARM64_ERRATUM_1530923
Qualcomm Tech.Kryo4xx SilverN/AARM64_ERRATUM_1024718
    
FujitsuA64FXE#010001FUJITSU_ERRATUM_010001