硅片勘误与软件权变措施

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