zl程序教程

您现在的位置是:首页 >  其它

当前栏目

11-Reliability, Availability, and Serviceability (RAS) Extensions

and 11 Extensions Availability
2023-09-27 14:26:31 时间

引流关键词: 中断、同步异常、异步异常、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 错误记录寄存器的访问。

../_images/ras.svg

查看更多关于参与 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是显式的。