硅芯片勘误和软件规避方案

作者: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