3-Arm CPU Specific Build Macros
引流关键词: 中断、同步异常、异步异常、irq、fiq、BL1,BL2,BL3,BL31,BL32,BL33,AP_BL1,AP_BL2,AP_BL3,AP_BL31,AP_BL32,AP_BL33,SCP_BL1,SCP_BL2,BL0,BL30, optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、内存管理、页表…
快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈
[专栏目录]-ATF/FF-A/specification学习
3. Arm CPU 特定的构建宏
本文档描述了 CPU 特定操作框架中存在的各种构建选项,以启用勘误表解决方法并启用平台上特定 CPU 的优化。
3.1。安全漏洞变通办法
TF-A 导出一系列构建标志,这些标志控制应在运行时应用哪些安全漏洞变通办法。
-
WORKAROUND_CVE_2017_5715:启用 CVE-2017-5715的安全解决方法。如果系统中的所有 PE 都不需要变通方法,则平台可以将此标志设置为 0。将此标志设置为 0 不会为未受影响的平台提供性能优势,它只是有助于遵守规范中有关变通方法发现的建议。默认为 1。
-
WORKAROUND_CVE_2018_3639:启用 CVE-2018-3639的安全解决方法。默认为 1。TF-A 项目建议即使在不受 CVE-2018-3639 影响的平台上也保持默认值 1,以符合规范中关于变通方法发现的建议。
-
DYNAMIC_WORKAROUND_CVE_2018_3639:启用 CVE-2018-3639 的动态缓解。如果目标平台包含至少 1 个需要动态缓解的 CPU,则此构建选项应设置为 1。默认为 0。
3.2. CPU 勘误表解决方法
TF-A 导出一系列构建标志,这些标志控制由重置处理程序应用于每个 CPU 的勘误解决方法。勘误表的详细信息可以在 Arm 发布的 CPU 特定勘误表文档中找到:
-
Cortex-A53 MPCore 软件开发人员勘误通知
-
Cortex-A57 MPCore 软件开发人员勘误通知
-
Cortex-A72 MPCore 软件开发人员勘误通知
勘误表变通办法是针对特定修订版或一组处理器修订版实施的。这在运行时由重置处理程序检查。每个勘误表解决方法都由其ID在处理器的勘误表通知文档中指定。用于启用/禁用勘误解决方法的定义格式为,其中 为例如CPU 。ERRATA__Processor nameA57Cortex_A57
有关如何编写勘误解决方法函数的信息,请参阅CPU 勘误状态报告。
默认情况下禁用所有解决方法。平台负责根据其要求通过在平台特定的 makefile 中定义勘误解决方法构建标志来启用这些解决方法。如果为错误的 CPU 版本启用了这些变通方法,则不会应用勘误表变通方法。在 DEBUG 构建中,这是通过向崩溃控制台打印警告来指示的。
在当前实现中,具有多个不同版本的处理器变体的平台没有可用的运行时机制来指定应启用或不启用哪些勘误表解决方法。
build flags 的值默认为 0,即禁用。值为 1 将启用它。
对于 Cortex-A9,定义了以下勘误构建标志:
- ERRATA_A9_794073:这会将勘误表 794073 解决方法应用于 Cortex-A9 CPU。这需要为 CPU 的所有版本启用。
对于 Cortex-A15,定义了以下勘误构建标志:
-
ERRATA_A15_816470:这会将勘误表 816470 解决方法应用于 Cortex-A15 CPU。这只需要为 CPU 的版本 >= r3p0 启用。
-
ERRATA_A15_827671:这会将勘误表 827671 解决方法应用于 Cortex-A15 CPU。这只需要为 CPU 的版本 >= r3p0 启用。
对于 Cortex-A17,定义了以下勘误表构建标志:
-
ERRATA_A17_852421:这会将勘误表 852421 解决方法应用于 Cortex-A17 CPU。仅需要为 CPU 的修订版 <= r1p2 启用此功能。
-
ERRATA_A17_852423:这会将勘误表 852423 解决方法应用于 Cortex-A17 CPU。仅需要为 CPU 的修订版 <= r1p2 启用此功能。
对于 Cortex-A35,定义了以下勘误表构建标志:
- ERRATA_A35_855472:这会将勘误表 855472 解决方法应用于 Cortex-A35 CPU。这只需要为 Cortex-A35 的 r0p0 版本启用。
对于 Cortex-A53,定义了以下勘误表构建标志:
-
ERRATA_A53_819472:这会将勘误表 819472 解决方法应用于所有 CPU。仅需要为 Cortex-A53 的修订版 <= r0p1 启用此功能。
-
ERRATA_A53_824069:这会将勘误表 824069 解决方法应用于所有 CPU。仅需要为 Cortex-A53 的修订版 <= r0p2 启用此功能。
-
ERRATA_A53_826319:这会将勘误表 826319 解决方法应用于 Cortex-A53 CPU。这仅需要为 CPU 的修订版 <= r0p2 启用。
-
ERRATA_A53_827319:这会将勘误表 827319 解决方法应用于所有 CPU。仅需要为 Cortex-A53 的修订版 <= r0p2 启用此功能。
-
- ERRATA_A53_835769:这将在编译和链接时将勘误表 835769 解决方法应用于 Cortex-A53 CPU。这需要为版本 <= r0p4 的某些变体启用。此解决方法可以导致链接器创建*.stub 节。
ERRATA_A53_836870:这会将勘误表 836870 解决方法应用于 Cortex-A53 CPU。仅需要为 CPU 的修订版 <= r0p3 启用此功能。从 r0p4 起,此勘误表在硬件中默认启用。
-
ERRATA_A53_843419:这将在链接时将勘误表 843419 解决方法应用于 Cortex-A53 CPU。这需要为版本 <= r0p4 的某些变体启用。这种解决方法可以导致链接器发出*.stub4kB 对齐的部分。
-
ERRATA_A53_855873:这会将勘误表 855873 解决方法应用于 Cortex-A53 CPU。尽管错误出现在 CPU 的每个修订版中,但此解决方法仅适用于从 r0p3 开始的 CPU,它在 CPUACTLR_EL1 中有一个小鸡位以启用硬件解决方法。CPU 的早期版本还有其他勘误表,需要在软件中使用相同的解决方法,因此无论如何都应该涵盖它们。
-
ERRATA_A53_1530924:这会将勘误表 1530924 解决方法应用于 Cortex-A53 CPU 的所有版本。
对于 Cortex-A55,定义了以下勘误构建标志:
-
ERRATA_A55_768277:这会将勘误表 768277 解决方法应用于 Cortex-A55 CPU。这只需要为 CPU 的版本 r0p0 启用。
-
ERRATA_A55_778703:这会将勘误表 778703 解决方法应用于 Cortex-A55 CPU。这只需要为 CPU 的版本 r0p0 启用。
-
ERRATA_A55_798797:这会将勘误表 798797 解决方法应用于 Cortex-A55 CPU。这只需要为 CPU 的版本 r0p0 启用。
-
ERRATA_A55_846532:这会将勘误表 846532 解决方法应用于 Cortex-A55 CPU。这仅需要为 CPU 的修订版 <= r0p1 启用。
-
ERRATA_A55_903758:这会将勘误表 903758 解决方法应用于 Cortex-A55 CPU。这仅需要为 CPU 的修订版 <= r0p1 启用。
-
ERRATA_A55_1221012:这会将勘误表 1221012 解决方法应用于 Cortex-A55 CPU。这仅需要为 CPU 的修订版 <= r1p0 启用。
-
ERRATA_A55_1530923:这会将勘误表 1530923 解决方法应用于 Cortex-A55 CPU 的所有版本。
对于 Cortex-A57,定义了以下勘误表构建标志:
-
ERRATA_A57_806969:这会将勘误表 806969 解决方法应用于 Cortex-A57 CPU。这只需要为 CPU 的版本 r0p0 启用。
-
ERRATA_A57_813419:这会将勘误表 813419 解决方法应用于 Cortex-A57 CPU。这只需要为 CPU 的版本 r0p0 启用。
-
ERRATA_A57_813420:这会将勘误表 813420 解决方法应用于 Cortex-A57 CPU。这只需要为 CPU 的版本 r0p0 启用。
-
ERRATA_A57_814670:这会将勘误表 814670 解决方法应用于 Cortex-A57 CPU。这只需要为 CPU 的版本 r0p0 启用。
-
ERRATA_A57_817169:这会将勘误表 817169 解决方法应用于 Cortex-A57 CPU。这仅需要为 CPU 的修订版 <= r0p1 启用。
-
ERRATA_A57_826974:这会将勘误表 826974 解决方法应用于 Cortex-A57 CPU。这仅需要为 CPU 的修订版 <= r1p1 启用。
-
ERRATA_A57_826977:这会将勘误表 826977 解决方法应用于 Cortex-A57 CPU。这仅需要为 CPU 的修订版 <= r1p1 启用。
-
ERRATA_A57_828024:这会将勘误表 828024 解决方法应用于 Cortex-A57 CPU。这仅需要为 CPU 的修订版 <= r1p1 启用。
-
ERRATA_A57_829520:这会将勘误表 829520 解决方法应用于 Cortex-A57 CPU。仅需要为 CPU 的修订版 <= r1p2 启用此功能。
-
ERRATA_A57_833471:这会将勘误表 833471 解决方法应用于 Cortex-A57 CPU。仅需要为 CPU 的修订版 <= r1p2 启用此功能。
-
ERRATA_A57_859972:这会将勘误表 859972 解决方法应用于 Cortex-A57 CPU。仅需要为 CPU 的修订版 <= r1p3 启用此功能。
-
ERRATA_A57_1319537:这会将勘误表 1319537 解决方法应用于 Cortex-A57 CPU 的所有版本。
对于 Cortex-A72,定义了以下勘误构建标志:
-
ERRATA_A72_859971:这会将勘误表 859971 解决方法应用于 Cortex-A72 CPU。仅需要为 CPU 的修订版 <= r0p3 启用此功能。
-
ERRATA_A72_1319367:这会将勘误表 1319367 解决方法应用于 Cortex-A72 CPU 的所有版本。
对于 Cortex-A73,定义了以下勘误表构建标志:
-
ERRATA_A73_852427:这会将勘误表 852427 解决方法应用于 Cortex-A73 CPU。这只需要为 CPU 的版本 r0p0 启用。
-
ERRATA_A73_855423:这会将勘误表 855423 解决方法应用于 Cortex-A73 CPU。这仅需要为 CPU 的修订版 <= r0p1 启用。
对于 Cortex-A75,定义了以下勘误表构建标志:
-
ERRATA_A75_764081:这会将勘误表 764081 解决方法应用于 Cortex-A75 CPU。这只需要为 CPU 的版本 r0p0 启用。
-
ERRATA_A75_790748:这将勘误表 790748 解决方法应用于 Cortex-A75
中央处理器。这只需要为 CPU 的版本 r0p0 启用。
对于 Cortex-A76,定义了以下勘误表构建标志:
-
ERRATA_A76_1073348:这会将勘误表 1073348 解决方法应用于 Cortex-A76 CPU。这仅需要为 CPU 的修订版 <= r1p0 启用。
-
ERRATA_A76_1130799:这会将勘误表 1130799 解决方法应用于 Cortex-A76 CPU。这仅需要为 CPU 的修订版 <= r2p0 启用。
-
ERRATA_A76_1220197:这会将勘误表 1220197 解决方法应用于 Cortex-A76 CPU。这仅需要为 CPU 的修订版 <= r2p0 启用。
-
ERRATA_A76_1257314:这会将勘误表 1257314 解决方法应用于 Cortex-A76 CPU。这仅需要为 CPU 的修订版 <= r3p0 启用。
-
ERRATA_A76_1262606:这会将勘误表 1262606 解决方法应用于 Cortex-A76 CPU。这仅需要为 CPU 的修订版 <= r3p0 启用。
-
ERRATA_A76_1262888:这会将勘误表 1262888 解决方法应用于 Cortex-A76 CPU。这仅需要为 CPU 的修订版 <= r3p0 启用。
-
ERRATA_A76_1275112:这会将勘误表 1275112 解决方法应用于 Cortex-A76 CPU。这仅需要为 CPU 的修订版 <= r3p0 启用。
-
ERRATA_A76_1791580:这会将勘误表 1791580 解决方法应用于 Cortex-A76 CPU。这仅需要为 CPU 的修订版 <= r4p0 启用。
-
ERRATA_A76_1165522:这会将勘误表 1165522 解决方法应用于 Cortex-A76 CPU 的所有版本。此勘误表在 r3p0 中已修复,但由于勘误表框架的限制,此勘误表适用于 Cortex-A76 CPU 的所有版本。
-
ERRATA_A76_1868343:这会将勘误表 1868343 解决方法应用于 Cortex-A76 CPU。这仅需要为 CPU 的修订版 <= r4p0 启用。
-
ERRATA_A76_1946160:这会将勘误表 1946160 解决方法应用于 Cortex-A76 CPU。这只需要为 CPU 的 r3p0 - r4p1 版本启用。
对于 Cortex-A77,定义了以下勘误表构建标志:
-
ERRATA_A77_1508412:这会将勘误表 1508412 解决方法应用于 Cortex-A77 CPU。这仅需要为 CPU 的修订版 <= r1p0 启用。
-
ERRATA_A77_1925769:这将勘误表 1925769 解决方法应用于 Cortex-A77 CPU。这仅需要为 CPU 的修订版 <= r1p1 启用。
-
ERRATA_A77_1946167:这会将勘误表 1946167 解决方法应用于 Cortex-A77 CPU。这仅需要为 CPU 的修订版 <= r1p1 启用。
-
ERRATA_A77_1791578:这会将勘误表 1791578 解决方法应用于 Cortex-A77 CPU。这需要为 r0p0、r1p0 和 r1p1 启用,它仍然是打开的。
对于 Cortex-A78,定义了以下勘误表构建标志:
-
ERRATA_A78_1688305:这会将勘误表 1688305 解决方法应用于 Cortex-A78 CPU。这只需要为 CPU 的版本 r0p0 - r1p0 启用。
-
ERRATA_A78_1941498:这会将勘误表 1941498 解决方法应用于 Cortex-A78 CPU。这需要为 CPU 的 r0p0、r1p0 和 r1p1 版本启用。
-
ERRATA_A78_1951500:这会将勘误表 1951500 解决方法应用于 Cortex-A78 CPU。这需要为修订版 r1p0 和 r1p1 启用,r0p0 有相同的问题,但该修订版没有解决方法。
-
ERRATA_A78_1821534:这会将勘误表 1821534 解决方法应用于 Cortex-A78 CPU。这需要为修订版 r0p0 和 r1p0 启用。
-
ERRATA_A78_1952683:这会将勘误表 1952683 解决方法应用于 Cortex-A78 CPU。这需要为版本 r0p0 启用,它在 r1p0 中是固定的。
-
ERRATA_A78_2132060:这会将勘误表 2132060 解决方法应用于 Cortex-A78 CPU。这需要为版本 r0p0、r1p0、r1p1 和 r1p2 启用。它仍然是开放的。
-
ERRATA_A78_2242635:这会将勘误表 2242635 解决方法应用于 Cortex-A78 CPU。这需要为版本 r1p0、r1p1 和 r1p2 启用。该问题存在于 r0p0 中,但没有解决方法。它仍然是开放的。
对于 Cortex-A78 AE,定义了以下勘误构建标志:
-
ERRATA_A78_AE_1941500这将勘误表 1941500 解决方法应用于 Cortex-A78
AE CPU。这需要为修订版 r0p0 和 r0p1 启用。此勘误表仍处于打开状态。 -
ERRATA_A78_AE_1951502:这会将勘误表 1951502 解决方法应用于 Cortex-A78 AE CPU。这需要为修订版 r0p0 和 r0p1 启用。此勘误表仍处于打开状态。
对于 Neoverse N1,定义了以下勘误构建标志:
-
ERRATA_N1_1073348:这会将勘误表 1073348 解决方法应用于 Neoverse-N1 CPU。这只需要为 CPU 的 r0p0 和 r1p0 版本启用。
-
ERRATA_N1_1130799:这会将勘误表 1130799 解决方法应用于 Neoverse-N1 CPU。这仅需要为 CPU 的修订版 <= r2p0 启用。
-
ERRATA_N1_1165347:这会将勘误表 1165347 解决方法应用于 Neoverse-N1 CPU。这仅需要为 CPU 的修订版 <= r2p0 启用。
-
ERRATA_N1_1207823:这会将勘误表 1207823 解决方法应用于 Neoverse-N1 CPU。这仅需要为 CPU 的修订版 <= r2p0 启用。
-
ERRATA_N1_1220197:这会将勘误表 1220197 解决方法应用于 Neoverse-N1 CPU。这仅需要为 CPU 的修订版 <= r2p0 启用。
-
ERRATA_N1_1257314:这会将勘误表 1257314 解决方法应用于 Neoverse-N1 CPU。这仅需要为 CPU 的修订版 <= r3p0 启用。
-
ERRATA_N1_1262606:这会将勘误表 1262606 解决方法应用于 Neoverse-N1 CPU。这仅需要为 CPU 的修订版 <= r3p0 启用。
-
ERRATA_N1_1262888:这会将勘误表 1262888 解决方法应用于 Neoverse-N1 CPU。这仅需要为 CPU 的修订版 <= r3p0 启用。
-
ERRATA_N1_1275112:这会将勘误表 1275112 解决方法应用于 Neoverse-N1 CPU。这仅需要为 CPU 的修订版 <= r3p0 启用。
-
ERRATA_N1_1315703:这会将勘误表 1315703 解决方法应用于 Neoverse-N1 CPU。这仅需要为 CPU 的修订版 <= r3p0 启用。
-
ERRATA_N1_1542419:这会将勘误表 1542419 解决方法应用于 Neoverse-N1 CPU。这只需要为 CPU 的 r3p0 - r4p0 版本启用。
-
ERRATA_N1_1868343:这会将勘误表 1868343 解决方法应用于 Neoverse-N1 CPU。这仅需要为 CPU 的修订版 <= r4p0 启用。
-
ERRATA_N1_1946160:这会将勘误表 1946160 解决方法应用于 Neoverse-N1 CPU。这需要为修订版 r3p0、r3p1、r4p0 和 r4p1 启用,对于修订版 r0p0、r1p0 和 r2p0,没有解决方法。
对于 Neoverse V1,定义了以下勘误构建标志:
-
ERRATA_V1_1774420:这会将勘误表 1774420 解决方法应用于 Neoverse-V1 CPU。这只需要为版本 r0p0 和 r1p0 启用,它在 r1p1 中是固定的。
-
ERRATA_V1_1791573:这会将勘误表 1791573 解决方法应用于 Neoverse-V1 CPU。这只需要为版本 r0p0 和 r1p0 启用,它在 r1p1 中是固定的。
-
ERRATA_V1_1852267:这会将勘误表 1852267 解决方法应用于 Neoverse-V1 CPU。这只需要为版本 r0p0 和 r1p0 启用,它在 r1p1 中是固定的。
-
ERRATA_V1_1925756:这会将勘误表 1925756 解决方法应用于 Neoverse-V1 CPU。这需要为 r0p0、r1p0 和 r1p1 启用,它仍然是打开的。
-
ERRATA_V1_1940577:这会将勘误表 1940577 解决方法应用于 Neoverse-V1 CPU。这只需要为 CPU 的 r1p0 和 r1p1 版本启用。
-
ERRATA_V1_1966096:这会将勘误表 1966096 解决方法应用于 Neoverse-V1 CPU。这需要为 CPU 的 r1p0 和 r1p1 版本启用,该问题也存在于 r0p0 中,但该版本没有解决方法。它仍然是开放的。
-
ERRATA_V1_2139242:这会将勘误表 2139242 解决方法应用于 Neoverse-V1 CPU。这需要为 CPU 的 r0p0、r1p0 和 r1p1 版本启用。它仍然是开放的。
-
ERRATA_V1_2108267:这会将勘误表 2108267 解决方法应用于 Neoverse-V1 CPU。这需要为 CPU 的 r0p0、r1p0 和 r1p1 版本启用。它仍然是开放的。
-
ERRATA_V1_2216392:这会将勘误表 2216392 解决方法应用于 Neoverse-V1 CPU。这需要为 CPU 的 r1p0 和 r1p1 版本启用,该问题也存在于 r0p0 中,但该版本没有解决方法。它仍然是开放的。
对于 Cortex-A710,定义了以下勘误表构建标志:
-
ERRATA_A710_1987031:这会将勘误表 1987031 解决方法应用于 Cortex-A710 CPU。这只需要为 CPU 的 r0p0、r1p0 和 r2p0 版本启用。它仍然是开放的。
-
ERRATA_A710_2081180:这会将勘误表 2081180 解决方法应用于 Cortex-A710 CPU。这只需要为 CPU 的 r0p0、r1p0 和 r2p0 版本启用。它仍然是开放的。
-
ERRATA_A710_2055002:这会将勘误表 2055002 解决方法应用于 Cortex-A710 CPU。这需要为 CPU 的 r1p0、r2p0 版本启用,并且仍然处于打开状态。
-
ERRATA_A710_2017096:这会将勘误表 2017096 解决方法应用于 Cortex-A710 CPU。这需要为 CPU 的修订版 r0p0、r1p0 和 r2p0 启用,并且仍然处于打开状态。
-
ERRATA_A710_2083908:这会将勘误表 2083908 解决方法应用于 Cortex-A710 CPU。这需要为 CPU 的 r2p0 版本启用,并且仍然处于打开状态。
-
ERRATA_A710_2058056:这会将勘误表 2058056 解决方法应用于 Cortex-A710 CPU。这需要为 CPU 的修订版 r0p0、r1p0 和 r2p0 启用,并且仍然处于打开状态。
对于 Neoverse N2,定义了以下勘误构建标志:
-
ERRATA_N2_2002655:这会将勘误表 2002655 解决方法应用于 Neoverse-N2 CPU。这需要为 CPU 的 r0p0 版本启用,它仍然是打开的。
-
ERRATA_N2_2067956:这会将勘误表 2067956 解决方法应用于 Neoverse-N2 CPU。这需要为 CPU 的修订版 r0p0 启用,并且仍然处于打开状态。
-
ERRATA_N2_2025414:这会将勘误表 2025414 解决方法应用于 Neoverse-N2 CPU。这需要为 CPU 的修订版 r0p0 启用,并且仍然处于打开状态。
-
ERRATA_N2_2189731:这会将勘误表 2189731 解决方法应用于 Neoverse-N2 CPU。这需要为 CPU 的修订版 r0p0 启用,并且仍然处于打开状态。
-
ERRATA_N2_2138956:这会将勘误表 2138956 解决方法应用于 Neoverse-N2 CPU。这需要为 CPU 的修订版 r0p0 启用,并且仍然处于打开状态。
-
ERRATA_N2_2138953:这会将勘误表 2138953 解决方法应用于 Neoverse-N2 CPU。这需要为 CPU 的修订版 r0p0 启用,并且仍然处于打开状态。
-
ERRATA_N2_2242415:这会将勘误表 2242415 解决方法应用于 Neoverse-N2 CPU。这需要为 CPU 的修订版 r0p0 启用,并且仍然处于打开状态。
-
ERRATA_N2_2138958:这会将勘误表 2138958 解决方法应用于 Neoverse-N2 CPU。这需要为 CPU 的修订版 r0p0 启用,并且仍然处于打开状态。
-
ERRATA_N2_2242400:这会将勘误表 2242400 解决方法应用于 Neoverse-N2 CPU。这需要为 CPU 的修订版 r0p0 启用,并且仍然处于打开状态。
-
ERRATA_N2_2280757:这会将勘误表 2280757 解决方法应用于 Neoverse-N2 CPU。这需要为 CPU 的修订版 r0p0 启用,并且仍然处于打开状态。
对于 Cortex-X2,定义了以下勘误构建标志:
-
ERRATA_X2_2002765:这会将勘误表 2002765 解决方法应用于 Cortex-X2 CPU。这需要为 CPU 的 r0p0、r1p0 和 r2p0 版本启用,它仍然是打开的。
-
ERRATA_X2_2058056:这会将勘误表 2058056 解决方法应用于 Cortex-X2 CPU。这需要为 CPU 的 r0p0、r1p0 和 r2p0 版本启用,它仍然是打开的。
-
ERRATA_X2_2083908:这会将勘误表 2083908 解决方法应用于 Cortex-X2 CPU。这需要为 CPU 的 r2p0 版本启用,它仍然是打开的。
3.3. DSU 勘误表解决方法
与 CPU 勘误表类似,TF-A 也实现了 DSU(DynamIQ 共享单元)勘误表的解决方法。DSU 勘误表详细信息可在相应的 Arm 文档中找到:
Arm DSU 软件开发人员勘误通知
每个勘误都由IDDSU 勘误通知文档中定义的 标识。因此,启用/禁用勘误解决方法的构建标志具有格式ERRATA_DSU_. DSU 勘误表变通办法的实现和应用逻辑类似于CPU 勘误表变通办法。
对于 DSU 勘误表,定义了以下构建标志:
-
ERRATA_DSU_798953:这适用于受影响的 DSU 配置的勘误表 798953 解决方法。此勘误表仅适用于修订版为 r0p0(在 r0p1 上已修复)的 DSU。但是,请注意,此解决方法会导致空闲时 DSU 功耗增加。
-
ERRATA_DSU_936184:这适用于受影响的 DSU 配置的勘误表 936184 解决方法。此勘误表仅适用于包含 ACP 接口且DSU 版本早于 r2p0 的 DSU(在 r2p0 上已修复)。但是,请注意,此解决方法会导致空闲时 DSU 功耗增加。
3.4. CPU 特定优化
本节介绍了 CPU 微架构允许的一些优化,平台可以根据需要启用这些优化。
-
SKIP_A57_L1_FLUSH_PWR_DWN:此标志通过不刷新 1 级数据缓存来优化 Cortex-A57 集群断电序列。L1 数据缓存和 L2 统一缓存包含在内。通过 set/way 刷新 L2 也会刷新来自 L1 的任何脏行。这是与 Cortex-A57 TRM 定义的断电序列的已知安全偏差。每个基于 Cortex-A57 的平台都必须自行决定是否使用优化。
-
A53_DISABLE_NON_TEMPORAL_HINT:此标志禁用缓存非临时提示。在 Cortex-A53 上实现的 LDNP/STNP 指令的行为方式与大多数程序员所期望的不同,并且很可能会导致使用它们的任何代码的速度显着下降。Armv8-A 架构(参见 Arm DDI 0487A.h,第 D3.4.3 节)允许内核忽略非时间提示,并将 LDNP/STNP 视为 LDP/STP。启用此标志会强制执行此行为。这仅需要为 CPU 的版本 <= r0p3 启用,并且默认启用。
-
A57_DISABLE_NON_TEMPORAL_HINT:此标志与 Cortex-A57 具有相同的行为 A53_DISABLE_NON_TEMPORAL_HINT。这需要仅针对 CPU 的修订版本 <= r1p2 启用,并且默认启用,如Cortex-A57 软件优化指南的“4.7 非临时加载/存储”部分中所建议的那样 。
-
‘‘A57_ENABLE_NON_CACHEABLE_LOAD_FWD’’:此标志启用不可缓存
Cortex-A57 CPU 的流增强功能。只有当他们的内存系统满足来自 Cortex-A57 处理器的高速缓存线填充请求是原子的要求时,平台才能设置该位。每个基于 Cortex-A57 的平台都必须自行决定是否使用优化。默认情况下禁用此标志。 -
NEOVERSE_Nx_EXTERNAL_LLC:此标志表示系统中存在外部最后一级缓存(LLC),并且主 CHI 接口上的 DataSource 字段指示何时从 LLC 返回数据。这用于控制 LL_CACHE* PMU 事件的计数方式。默认值为 0(禁用)。
总结
以上是生活随笔为你收集整理的3-Arm CPU Specific Build Macros的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 2-Authentication Fra
- 下一篇: 4.11-固件映像包 (FIP)