硅芯片勘误和软件规避方案¶
作者:Will Deacon <will.deacon@arm.com>
日期:2015 年 11 月 27 日
硬件经常在生产过程中出现所谓的“勘误”,这会使其在特定情况下偏离架构,这是一个不幸的事实。对于 ARM 生产的硬件,这些勘误通常分为以下几类
A 类
没有可行的规避方案的严重错误。
B 类
具有可接受的规避方案的重大或严重错误。
C 类
在正常操作下预计不会发生的轻微错误。
有关更多信息,请查阅 infocenter.arm.com 上提供的“软件开发人员勘误通知”文档之一(需要注册)。
就 Linux 而言,B 类勘误可能需要在操作系统中进行一些特殊处理。例如,避免特定的代码序列,或者以特定的方式配置处理器。一种不太常见的情况可能需要采取类似的措施,以便将 A 类勘误降级为 C 类勘误。这些统称为“软件规避方案”,仅在少数情况下才需要(例如,那些既需要非安全规避方案又可以由 Linux 触发的情况)。
对于可能对未受相关勘误影响的系统产生不利影响的软件规避方案,“内核功能”->“通过备用框架进行的 ARM 勘误规避方案”下添加了一个 Kconfig 条目。除了 Arm 认为“罕见”的勘误的规避方案外,这些方案默认启用,并在检测到受影响的 CPU 时在运行时进行修补。对于侵入性较小的规避方案,没有可用的 Kconfig 选项,并且代码的结构(最好带有注释)使不会触发勘误。
这种方法可能会使确定任意内核源代码树中实际规避了哪些勘误有点麻烦,因此该文件充当 Linux 内核中软件规避方案的注册表,并且将在提交新的规避方案并将其向后移植到稳定内核时进行更新。
实施者 |
组件 |
勘误 ID |
Kconfig |
---|---|---|---|
全志 |
A64/R18 |
UNKNOWN1 |
SUN50I_ERRATUM_UNKNOWN1 |
安培 |
AmpereOne |
AC03_CPU_38 |
AMPERE_ERRATUM_AC03_CPU_38 |
安培 |
AmpereOne AC04 |
AC04_CPU_10 |
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-A76 |
#3324349 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-A77 |
#1491015 |
N/A |
ARM |
Cortex-A77 |
#1508412 |
ARM64_ERRATUM_1508412 |
ARM |
Cortex-A77 |
#3324348 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-A78 |
#3324344 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-A78C |
#3324346,3324347 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-A710 |
#2119858 |
ARM64_ERRATUM_2119858 |
ARM |
Cortex-A710 |
#2054223 |
ARM64_ERRATUM_2054223 |
ARM |
Cortex-A710 |
#2224489 |
ARM64_ERRATUM_2224489 |
ARM |
Cortex-A710 |
#3324338 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-A715 |
#2645198 |
ARM64_ERRATUM_2645198 |
ARM |
Cortex-A715 |
#3456084 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-A720 |
#3456091 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-A725 |
#3456106 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-X1 |
#1502854 |
N/A |
ARM |
Cortex-X1 |
#3324344 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-X1C |
#3324346 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-X2 |
#2119858 |
ARM64_ERRATUM_2119858 |
ARM |
Cortex-X2 |
#2224489 |
ARM64_ERRATUM_2224489 |
ARM |
Cortex-X2 |
#3324338 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-X3 |
#3324335 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-X4 |
#3194386 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-X925 |
#3324334 |
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-N1 |
#3324349 |
ARM64_ERRATUM_3194386 |
ARM |
Neoverse-N2 |
#2139208 |
ARM64_ERRATUM_2139208 |
ARM |
Neoverse-N2 |
#2067961 |
ARM64_ERRATUM_2067961 |
ARM |
Neoverse-N2 |
#2253138 |
ARM64_ERRATUM_2253138 |
ARM |
Neoverse-N2 |
#3324339 |
ARM64_ERRATUM_3194386 |
ARM |
Neoverse-N3 |
#3456111 |
ARM64_ERRATUM_3194386 |
ARM |
Neoverse-V1 |
#1619801 |
N/A |
ARM |
Neoverse-V1 |
#3324341 |
ARM64_ERRATUM_3194386 |
ARM |
Neoverse-V2 |
#3324336 |
ARM64_ERRATUM_3194386 |
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 |
博通 |
Brahma-B53 |
N/A |
ARM64_ERRATUM_845719 |
博通 |
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 |
迈威 |
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 |
飞思卡尔/恩智浦 |
LS2080A/LS1043A |
A-008585 |
FSL_ERRATUM_A008585 |
海思 |
Hip0{5,6,7} |
#161010101 |
HISILICON_ERRATUM_161010101 |
海思 |
Hip0{6,7} |
#161010701 |
N/A |
海思 |
Hip0{6,7} |
#161010803 |
N/A |
海思 |
Hip07 |
#161600802 |
HISILICON_ERRATUM_161600802 |
海思 |
Hip08 SMMU PMCG |
#162001800 |
N/A |
海思 |
Hip{08,09,09A,10 ,10C,11} SMMU PMCG |
#162001900 |
N/A |
海思 |
Hip09 |
#162100801 |
HISILICON_ERRATUM_162100801 |
高通科技 |
Kryo/Falkor v1 |
E1003 |
QCOM_FALKOR_ERRATUM_1003 |
高通科技 |
Kryo/Falkor v1 |
E1009 |
QCOM_FALKOR_ERRATUM_1009 |
高通科技 |
QDF2400 ITS |
E0065 |
QCOM_QDF2400_ERRATUM_0065 |
高通科技 |
Falkor v{1,2} |
E1041 |
QCOM_FALKOR_ERRATUM_1041 |
高通科技 |
Kryo4xx Gold |
N/A |
ARM64_ERRATUM_1463225 |
高通科技 |
Kryo4xx Gold |
N/A |
ARM64_ERRATUM_1418040 |
高通科技 |
Kryo4xx Silver |
N/A |
ARM64_ERRATUM_1530923 |
高通科技 |
Kryo4xx Silver |
N/A |
ARM64_ERRATUM_1024718 |
高通科技 |
Kryo4xx Gold |
N/A |
ARM64_ERRATUM_1286807 |
瑞芯微 |
RK3588 |
#3588001 |
ROCKCHIP_ERRATUM_3588001 |
富士通 |
A64FX |
E#010001 |
FUJITSU_ERRATUM_010001 |
ASR |
ASR8601 |
#8601001 |
N/A |
微软 |
Azure Cobalt 100 |
#2139208 |
ARM64_ERRATUM_2139208 |
微软 |
Azure Cobalt 100 |
#2067961 |
ARM64_ERRATUM_2067961 |
微软 |
Azure Cobalt 100 |
#2253138 |
ARM64_ERRATUM_2253138 |
微软 |
Azure Cobalt 100 |
#3324339 |
ARM64_ERRATUM_3194386 |