11-Reliability, Availability, and Serviceability (RAS) Extensions
引流关键词: 中断、同步异常、异步异常、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学习
11.可靠性、可用性和可服务性 (RAS) 扩展
本文档描述了TF-A对 Arm 可靠性、可用性和可服务性 (RAS) 扩展的支持。RAS 是 Armv8.2 及更高版本 CPU 的强制扩展,也是基本 Armv8.0 架构的可选扩展。
与EHF一起,对 RAS 扩展的支持启用了处理平台错误的固件优先范例:错误导致的异常被路由到 EL3 并在 EL3 中处理。所述错误是同步外部中止 (SEA)、异步外部中止(信号为 SError)、故障处理和错误恢复中断。EHF文档提到了各种错误处理用例。
关于 Arm RAS 扩展、标准错误记录的描述,以及 RAS 术语的准确定义,请参考 Arm 架构参考手册。本文档的其余部分假定您熟悉架构和术语。
11.1。概述
如上所述,TF-A中的 RAS 支持支持路由和处理由 EL3 中的平台错误导致的异常。它允许平台定义外部中止处理程序,并注册 RAS 节点和中断。RAS 框架还为访问 RAS 扩展引入的标准错误记录提供了帮助程序。
RAS_EXTENSION设置为的构建选项1包括运行时固件中的 RAS;EL3_EXCEPTION_HANDLING并且HANDLE_EA_EL3_FIRST还必须设置1。RAS_TRAP_LOWER_EL_ERR_ACCESS控制从较低 EL 对 RAS 错误记录寄存器的访问。
查看更多关于参与 RAS 框架的信息。
11.2. 平台 API
RAS 框架允许平台为外部中止、不可包含的错误、双重错误和由 EL3 执行引起的错误定义处理程序。请参阅RAS 移植指南。
11.3. 注册 RAS 错误记录
RAS 节点是系统中的组件,能够通过一种通知机制(SEA、SError 或中断)向 PE 发送错误信号。RAS 节点包含一个或多个错误记录,这些错误记录是节点通过其通告信号错误的各种属性的寄存器。Arm 建议以标准错误记录格式实现错误记录。RAS 架构允许通过系统或内存映射寄存器访问错误记录。
平台应枚举为每个错误记录提供的错误记录:
-
用于探测错误记录的处理程序;
-
当探测识别出错误时,一个处理程序来处理它;
-
对于内存映射错误记录,其基地址和大小(KB);对于系统寄存器访问记录,记录的开始索引和从该索引开始的连续记录数;
-
任何特定于节点的辅助数据。
通过提供此信息,当运行时固件接收到其中一种通知机制时,RAS 框架可以遍历并探测错误记录以查找错误,并调用适当的处理程序来处理它。
RAS 框架提供了用于填充错误记录信息的宏。宏是版本化的,撰写本文时的最新版本是 1。这些宏从其参数创建类型结构,然后将其传递给探测和错误处理程序。struct err_record_info
对于内存映射错误记录:
ERR_RECORD_MEMMAP_V1(base_addr, size_num_k, probe, handler, aux)
而且,对于系统寄存器:
ERR_RECORD_SYSREG_V1(idx_start, num_idx, probe, handler, aux)
探针处理程序必须具有以下原型:
typedef int (*err_record_probe_t)(const struct err_record_info *info,
int *probe_data);
如果检测到错误,则探测处理程序必须返回非零值,否则返回 0。probe_data输出参数可用于将探针产生的任何有用信息传递给错误处理程序(见下文)。例如,它可以返回记录的索引。
错误处理程序必须具有以下原型:
typedef int (*err_record_handler_t)(const struct err_record_info *info,
int probe_data, const struct err_handler_data *const data);
常量参数描述了错误的data各种属性,包括错误原因、异常综合症,以及flags来自 cookie顶级handle异常处理程序的参数。
该平台应使用上述宏填充一个数组,并使用宏将其注册到 RAS 框架REGISTER_ERR_RECORD_INFO(),并将描述记录的数组的名称传递给它。请注意,宏必须在定义数组的同一文件中使用。
11.3.1. 标准错误记录助手
TF-A RAS 框架为标准错误记录提供探针处理程序,用于内存映射和系统寄存器访问:
int ras_err_ser_probe_memmap(const struct err_record_info *info,
int *probe_data);
int ras_err_ser_probe_sysreg(const struct err_record_info *info,
int *probe_data);
当平台枚举错误记录时,对于那些标准错误记录格式的记录,这些助手可能会被使用而不是推出自己的。上面的两个助手:
在标准错误记录中检测到错误时返回非零值;
检测到错误时设置probe_data为错误记录的索引。
11.4. 注册 RAS 中断
RAS 节点可以通过引发故障处理和/或错误恢复中断向 PE 发出错误信号。为了使中断工作的固件优先处理范例,平台必须设置并注册EHF。请参阅与异常处理框架的交互。
对于每个 RAS 中断,平台必须提供 type 的结构:struct ras_interrupt
-
中断号;
-
关联的错误记录信息(对应的指针 );struct err_record_info
-
(可选)cookie。
平台需要定义一个 的数组,并使用宏将其注册到 RAS 框架 ,并传递数组的名称。请注意,宏必须在定义数组的同一文件中使用。struct ras_interruptREGISTER_RAS_INTERRUPTS()
的数组必须按照中断号的递增顺序进行排序。这允许快速查看处理程序以服务 RAS 中断。struct ras_interrupt
11.5。双重故障处理
当一个错误被通知给 PE 时,一个双重故障条件出现,同时处理先前通知的错误仍在进行中。当出现双重故障情况时,Arm RAS 扩展只需要处理程序执行系统的有序关闭,因为恢复可能是不可能的。
Armv8.4 的 RAS 扩展部分引入了新的架构特性来处理双重故障情况,特别是引入了寄存器位NMEA和 EASE位SCR_EL3。引入这些是为了帮助 EL3 软件运行其进入/退出例程的一部分,同时暂时屏蔽异常——这意味着,在此类系统中,外部 Aborts/SErrors 在发生时不会立即处理,而只会在异常再次被取消屏蔽后处理。
TF-A出于遗留原因,执行整个 EL3,所有异常都未屏蔽。这意味着所有路由到 EL3 的异常都会立即得到处理。因此, TF-A 能够在软件中检测双故障条件,而不需要 Armv8.4 双故障架构扩展的预期优势。
双重错误是致命的,并在平台双重错误处理程序处终止,并且不会返回。
11.6。参与 RAS 框架
启用 RAS 支持是由三个不同但相关的构建选项构建的平台选择:
-
RAS_EXTENSION=1在运行时固件中包含 RAS 框架;
-
EL3_EXCEPTION_HANDLING=1允许在 EL3 处处理异常。请参阅 与异常处理框架的交互;
-
HANDLE_EA_EL3_FIRST=1启用外部中止和 SError 到 EL3 的路由。
TF-A中的 RAS 支持引入了plat_ea_handlerEL3 中的 External Abort 处理程序的默认实现 。当RAS_EXTENSION 设置为 时1,它会首先调用ras_ea_handler()函数,该函数是顶级 RAS 异常处理程序。ras_ea_handler负责遍历平台提供的错误记录,探测它们,当发现错误时,查找并调用相应的错误处理程序。
请注意,如果平台选择覆盖该plat_ea_handler函数并打算使用 RAS 框架,则必须 ras_ea_handler()从内部显式调用。
同样,对于 RAS 中断,框架定义 ras_interrupt_handler(). RAS 框架安排在 EL3 发生 RAS 中断时调用它。该函数将平台提供的已排序中断数组一分为二,以查找与中断号相关的错误记录信息。然后调用该记录的错误处理程序来处理错误。
11.7。与异常处理框架的交互
如前面部分所述,RAS 框架与EHF交互以仲裁 RAS 异常的处理与其他路由到 EL3 的异常。这意味着平台必须划分优先级以处理 RAS 异常。然后,平台必须将宏定义PLAT_RAS_PRI为用于 RAS 异常的优先级。平台通常希望为 RAS 处理分配最高的安全优先级。
中断和非中断异常的处理遵循EHF 文档中概述的顺序。即,对于中断,优先级管理是隐含的;但对于非中断异常,它们使用EHF API是显式的。
相关文章
- Codeforces Round #307 (Div. 2) D. GukiZ and Binary Operations (矩阵高速幂)
- How to check the Shutdown and Startup Log in Windows 11/10
- 正则密码 Regex and Password complexity policy
- C# Programming Guide-->Statements, Expressions, and Operators-->Anonymous Functions
- B. Vanya and Books( Codeforces Round #308 (Div. 2) 简单题)
- English trip V2 - 11 Health and Well-being 健康和幸福 Teacher:Ginny Key: Verb + gerund(-ing) & verb + infinitive 动名词 & 动词+原型
- Andrew Ng机器学习公开课笔记 -- Mixtures of Gaussians and the EM algorithm
- Oracle ASM 翻译系列第二十四弹:ASM Internal ASM files number 10 and 11
- (IEEE Std 1685)IP-XACT Standard Structure for Packaging, Integrating, and Reusing IP within Tool Flo
- android and javascript
- SharePoint and Pwn :: Remote Code Execution Against
- HDU 5708 Alice and Bob (博弈,找规律)
- Hierarchy and examples of programming languages grouped by concepts --编程语言分类
- !HDU 1078 FatMouse and Cheese-dp-(记忆化搜索)
- Linking different libraries for Debug and Release builds in Cmake on windows?
- 《Learning both Weights and Connections for Efficient Neural Networks》论文笔记
- leetcode 121 Best Time to Buy and Sell Stock 买卖股票的最佳时机(简单)