硅片勘误与软件权变措施¶
作者:Will Deacon <will.deacon@arm.com>
日期:2015年11月27日
硬件在生产时往往带有所谓的“勘误”(errata),这会在特定情况下导致其偏离架构规范,这是一个令人遗憾的事实。对于 ARM 生产的硬件,这些勘误大致可分为以下几类
A 类
没有可行变通方法的严重错误。
B 类
具有可接受变通方法的显著或严重错误。
C 类
在正常操作下预计不会发生的轻微错误。
欲了解更多信息,请查阅 infocenter.arm.com 上提供的任一“软件开发者勘误通知”(Software Developers Errata Notice)文档(需要注册)。
就 Linux 而言,B 类勘误可能需要在操作系统中进行一些特殊处理。例如,避免使用特定的代码序列,或者以特定方式配置处理器。较少见的情况可能需要采取类似的行动,以便将 A 类勘误降级为 C 类勘误。这些统称为“软件权变措施”(software workarounds),并且仅在少数情况下才需要(例如,既需要非安全变通方法*又*能被 Linux 触发的情况)。
对于可能会对不受该勘误影响的系统产生负面影响的软件权变措施,会在“内核特性”(Kernel Features)->“通过替代框架的 ARM 勘误权变措施”(ARM errata workarounds via the alternatives framework)下添加一个 Kconfig 条目。除了被 Arm 视为“罕见”的勘误权变措施外,这些默认都是启用的,并且在检测到受影响的 CPU 时会在运行时进行补丁修补。对于干扰较小的权变措施,则不提供 Kconfig 选项,而是通过特定的代码结构(最好带有注释)来避免触发该勘误。
这种方法使得要确切确定任意内核源码树中针对哪些勘误采取了权变措施变得有些繁琐,因此本文档充当了 Linux 内核中软件权变措施的注册表,当有新的权变措施被提交并向后移植到稳定版内核时,该文件将会被更新。
实现者 |
组件 |
勘误 ID |
Kconfig |
|---|---|---|---|
Allwinner |
A64/R18 |
UNKNOWN1 |
SUN50I_ERRATUM_UNKNOWN1 |
Ampere |
AmpereOne |
AC03_CPU_38 |
AMPERE_ERRATUM_AC03_CPU_38 |
Ampere |
AmpereOne |
AC03_CPU_57 |
不适用 |
Ampere |
AmpereOne AC04 |
AC04_CPU_10 |
AMPERE_ERRATUM_AC03_CPU_38 |
Ampere |
AmpereOne AC04 |
AC04_CPU_23 |
AMPERE_ERRATUM_AC04_CPU_23 |
Ampere |
AmpereOne AC04 |
AC04_CPU_29 |
不适用 |
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 |
不适用 |
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 |
不适用 |
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 |
不适用 |
ARM |
Cortex-A76 |
#3324349 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-A76 |
#4193800 |
ARM64_ERRATUM_4118414 |
ARM |
Cortex-A76AE |
#4193801 |
ARM64_ERRATUM_4118414 |
ARM |
Cortex-A77 |
#1491015 |
不适用 |
ARM |
Cortex-A77 |
#1508412 |
ARM64_ERRATUM_1508412 |
ARM |
Cortex-A77 |
#3324348 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-A77 |
#4193798 |
ARM64_ERRATUM_4118414 |
ARM |
Cortex-A78 |
#3324344 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-A78 |
#4193791 |
ARM64_ERRATUM_4118414 |
ARM |
Cortex-A78AE |
#4193793 |
ARM64_ERRATUM_4118414 |
ARM |
Cortex-A78C |
#3324346, #3324347 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-A78C |
#4193794 |
ARM64_ERRATUM_4118414 |
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-A710 |
#4193788 |
ARM64_ERRATUM_4118414 |
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 |
不适用 |
ARM |
Cortex-X1 |
#3324344 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-X1 |
#4193791 |
ARM64_ERRATUM_4118414 |
ARM |
Cortex-X1C |
#3324346 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-X1C |
#4193792 |
ARM64_ERRATUM_4118414 |
ARM |
Cortex-X2 |
#2119858 |
ARM64_ERRATUM_2119858 |
ARM |
Cortex-X2 |
#2224489 |
ARM64_ERRATUM_2224489 |
ARM |
Cortex-X2 |
#3324338 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-X2 |
#4193788 |
ARM64_ERRATUM_4118414 |
ARM |
Cortex-X3 |
#3324335 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-X3 |
#4193786 |
ARM64_ERRATUM_4118414 |
ARM |
Cortex-X4 |
#3194386 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-X4 |
#4118414 |
ARM64_ERRATUM_4118414 |
ARM |
Cortex-X925 |
#3324334 |
ARM64_ERRATUM_3194386 |
ARM |
Cortex-X925 |
#4193781 |
ARM64_ERRATUM_4118414 |
ARM |
Neoverse-N1 |
#1188873, #1418040 |
ARM64_ERRATUM_1418040 |
ARM |
Neoverse-N1 |
#1349291, #1490853 |
不适用 |
ARM |
Neoverse-N1 |
#1542419 |
ARM64_ERRATUM_1542419 |
ARM |
Neoverse-N1 |
#3324349 |
ARM64_ERRATUM_3194386 |
ARM |
Neoverse-N1 |
#4193800 |
ARM64_ERRATUM_4118414 |
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-N2 |
#4193789 |
ARM64_ERRATUM_4118414 |
ARM |
Neoverse-N3 |
#3456111 |
ARM64_ERRATUM_3194386 |
ARM |
Neoverse-V1 |
#1619801 |
不适用 |
ARM |
Neoverse-V1 |
#3324341 |
ARM64_ERRATUM_3194386 |
ARM |
Neoverse-V1 |
#4193790 |
ARM64_ERRATUM_4118414 |
ARM |
Neoverse-V2 |
#3324336 |
ARM64_ERRATUM_3194386 |
ARM |
Neoverse-V2 |
#4193787 |
ARM64_ERRATUM_4118414 |
ARM |
Neoverse-V3 |
#3312417 |
ARM64_ERRATUM_3194386 |
ARM |
Neoverse-V3 |
#4193784 |
ARM64_ERRATUM_4118414 |
ARM |
Neoverse-V3AE |
#3312417 |
ARM64_ERRATUM_3194386 |
ARM |
Neoverse-V3AE |
#4193784 |
ARM64_ERRATUM_4118414 |
ARM |
C1-Premium |
#4193780 |
ARM64_ERRATUM_4118414 |
ARM |
C1-Pro |
#4193714 |
ARM64_ERRATUM_4193714 |
ARM |
C1-Ultra |
#4193780 |
ARM64_ERRATUM_4118414 |
ARM |
MMU-500 |
#562869, #841119, #826419, #1047329 |
ARM_SMMU_MMU_500_CPRE_ERRATA |
ARM |
MMU-600 |
#1076982, #1209401 |
不适用 |
ARM |
MMU-700 |
#2133013, #2268618, #2812531, #3777127 |
不适用 |
ARM |
MMU L1 |
#3878312 |
不适用 |
ARM |
MMU S3 |
#3995052 |
不适用 |
ARM |
GIC-700 |
#2941627 |
ARM64_ERRATUM_2941627 |
ARM |
SI L1 |
#4311569 |
ARM64_ERRATUM_4311569 |
ARM |
CMN-650 |
#3642720 |
不适用 |
Broadcom |
Brahma-B53 |
不适用 |
ARM64_ERRATUM_845719 |
Broadcom |
Brahma-B53 |
不适用 |
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 |
不适用 |
Cavium |
ThunderX Core |
#27456 |
CAVIUM_ERRATUM_27456 |
Cavium |
ThunderX Core |
#30115 |
CAVIUM_ERRATUM_30115 |
Cavium |
ThunderX SMMUv2 |
#27704 |
不适用 |
Cavium |
ThunderX2 SMMUv3 |
#74, #126 |
不适用 |
Cavium |
ThunderX2 Core |
#219 |
CAVIUM_TX2_ERRATUM_219 |
Marvell |
ARM-MMU-500 |
#582743 |
不适用 |
NVIDIA |
Carmel Core |
不适用 |
NVIDIA_CARMEL_CNP_ERRATUM |
NVIDIA |
Olympus core |
T410-OLY-1029 |
ARM64_ERRATUM_4118414 |
NVIDIA |
T241 GICv3/4.x |
T241-FABRIC-4 |
不适用 |
NVIDIA |
T241 MPAM |
T241-MPAM-1, T241-MPAM-4, T241-MPAM-6 |
不适用 |
Freescale/NXP |
LS2080A/LS1043A |
A-008585 |
FSL_ERRATUM_A008585 |
Hisilicon |
Hip0{5,6,7} |
#161010101 |
HISILICON_ERRATUM_161010101 |
Hisilicon |
Hip0{6,7} |
#161010701, #161010803 |
不适用 |
Hisilicon |
Hip07 |
#161600802 |
HISILICON_ERRATUM_161600802 |
Hisilicon |
Hip08 SMMU PMCG |
#162001800 |
不适用 |
Hisilicon |
Hip{08,09,09A,10 ,10C,11} SMMU PMCG |
#162001900 |
不适用 |
Hisilicon |
Hip09 |
#162100801 |
HISILICON_ERRATUM_162100801 |
Hisilicon |
Hip09 |
#162100125 |
HISILICON_ERRATUM_162100125 |
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 |
不适用 |
ARM64_ERRATUM_1463225 |
Qualcomm Tech. |
Kryo4xx Gold |
不适用 |
ARM64_ERRATUM_1418040 |
Qualcomm Tech. |
Kryo4xx Silver |
不适用 |
ARM64_ERRATUM_1530923 |
Qualcomm Tech. |
Kryo4xx Silver |
不适用 |
ARM64_ERRATUM_1024718 |
Qualcomm Tech. |
Kryo4xx Gold |
不适用 |
ARM64_ERRATUM_1286807 |
Rockchip |
RK3588 |
#3588001 |
ROCKCHIP_ERRATUM_3588001 |
Rockchip |
RK3568 |
#3568002 |
ROCKCHIP_ERRATUM_3568002 |
Fujitsu |
A64FX |
E#010001 |
FUJITSU_ERRATUM_010001 |
ASR |
ASR8601 |
#8601001 |
不适用 |
Microsoft |
Azure Cobalt 100 |
#2139208 |
ARM64_ERRATUM_2139208 |
Microsoft |
Azure Cobalt 100 |
#2067961 |
ARM64_ERRATUM_2067961 |
Microsoft |
Azure Cobalt 100 |
#2253138 |
ARM64_ERRATUM_2253138 |
Microsoft |
Azure Cobalt 100 |
#3324339 |
ARM64_ERRATUM_3194386 |
Microsoft |
Azure Cobalt 100 |
#4193789 |
ARM64_ERRATUM_4118414 |