矽片勘誤和軟體解決方法¶
作者: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 |
Ampere |
AmpereOne |
AC03_CPU_38 |
AMPERE_ERRATUM_AC03_CPU_38 |
Ampere |
AmpereOne AC04 |
AC04_CPU_10 |
AMPERE_ERRATUM_AC03_CPU_38 |
Ampere |
AmpereOne AC04 |
AC04_CPU_23 |
AMPERE_ERRATUM_AC04_CPU_23 |
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 #562869,1047329 |
ARM_SMMU_MMU_500_CPRE_ERRATA |
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 |
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 |
飛思卡爾/NXP |
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 |
瑞芯微 |
RK3568 |
#3568002 |
ROCKCHIP_ERRATUM_3568002 |
富士通 |
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 |