7-CPU Reset

引流关键词: 中断、同步异常、异步异常、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学习

请添加图片描述

7. CPU 复位

本文档描述了在可信固件-A (TF-A) 中处理 CPU 重置的框架的高级设计。它还描述了平台集成商如何在一定程度上根据系统配置定制此代码,从而简化和优化引导流程。

本文档应与固件设计 文档结合使用,该文档提供了有关复位代码的更多实施细节,特别是针对冷启动路径。

7.1。通用复位代码流程

TF-A 复位代码默认在 BL1 中实现。以下高级图表说明了这一点:
在这里插入图片描述

此图显示了默认的、未优化的复位流程。根据系统配置,其中一些步骤可能是不必要的。以下部分通过指示哪些构建选项排除哪些步骤来指导平台集成商,具体取决于平台的功能。

注意:如果 BL31 被用作 TF-A 入口点而不是 BL1,上图仍然适用,因为在这种情况下,所有这些操作都将发生在 BL31 中。更多信息请参考第 6 节“使用 BL31 入口点作为复位地址”。

7.2. 可编程CPU复位地址

默认情况下,TF-A 假定 CPU 复位地址不可编程。因此,所有 CPU 在复位时都从相同的地址(通常为地址 0)开始。然后需要进一步的逻辑来识别是冷启动还是热启动,以将 CPU 引导到正确的执行路径。

如果复位向量地址(反映在复位向量基地址寄存器 RVBAR_EL3中)是可编程的,那么可以使每个 CPU 在冷复位和热复位时都直接从正确的地址开始。因此,可以跳过引导类型检测,导致以下引导流程:

在这里插入图片描述

要启用此引导流程,请使用PROGRAMMABLE_RESET_ADDRESS=1. 此选项仅影响 TF-A 重置图像,默认为 BL1 或 BL31 如果 RESET_TO_BL31=1.

在 FVP 和 Juno 平台上,复位向量地址不可编程,因此两个端口都使用PROGRAMMABLE_RESET_ADDRESS=0.

7.3. 单 CPU 冷启动

默认情况下,TF-A 假设多个 CPU 可能会从复位状态释放。因此,冷启动代码必须仲裁对 CPU 之间共享的硬件资源的访问。这是通过将其中一个 CPU 指定为主 CPU 来完成的,该 CPU 负责初始化共享硬件并与其他 CPU 协调引导流程。

如果平台保证只会启动单个 CPU,则不需要仲裁。主/从 CPU 本身的概念不再适用。这将导致以下引导流程:

在这里插入图片描述

要启用此引导流程,请使用COLD_BOOT_SINGLE_CPU=1. 此选项仅影响 TF-A 重置图像,默认为 BL1 或 BL31 如果 RESET_TO_BL31=1.

在 FVP 和 Juno 平台上,虽然默认情况下只有一个内核通电,但有一些特定于平台的方法可以将任意数量的内核释放到复位状态。因此,两个平台端口都使用COLD_BOOT_SINGLE_CPU=0.

7.4. 可编程CPU复位地址,单CPU冷启动

显然,可以在具有可编程 CPU 复位地址并释放单个 CPU 复位的平台上结合这两种优化。这将导致以下引导流程:

在这里插入图片描述

COLD_BOOT_SINGLE_CPU=1 要启用此引导流程,请同时使用和编译 TF-A PROGRAMMABLE_RESET_ADDRESS=1。这些选项仅影响 TF-A 重置图像,默认为 BL1 或 BL31 如果RESET_TO_BL31=1.

7.5。使用 BL31 入口点作为复位地址

在某些平台上,应用处理器的运行时固件(BL3x 映像)由在 SoC 上的安全系统处理器上运行的某些固件加载,而不是由在主应用处理器上运行的 BL1 和 BL2 加载。对于这种类型的 SoC,希望应用处理器始终重置为 BL31,从而无需 BL1 和 BL2。

TF-A 提供了一个构建时选项,该选项RESET_TO_BL31在 BL31 入口点中包含一些额外的逻辑以支持此用例。

在此配置中,平台的可信引导固件必须确保 BL31 加载到其运行时地址,该地址必须与 CPU 的RVBAR_EL3 复位向量基地址匹配,然后才能启动应用处理器。此外,平台软件负责加载所需的其他 BL3x 图像,并将它们的入口点信息提供给 BL31。加载这些映像可能由 Trusted Boot Firmware 或 BL31 中的平台代码完成。

虽然 Arm FVP 平台不支持在运行时动态编程复位基址,但可以 RVBAR_EL3在启动时设置寄存器的初始值。此功能仅在 Base FVP 上提供。

它允许 Arm FVP 端口支持RESET_TO_BL31配置,在这种情况下,bl31.bin映像必须加载到其在 Trusted SRAM 中的运行地址,并且所有 CPU 复位向量都从默认值0x0更改为此运行地址。有关以这种方式运行 FVP 模型的详细信息,请参阅Arm 固定虚拟平台 (FVP) 。

虽然从技术上讲,可以在 SCP 固件中使用正确的支持对复位基地址进行编程,但目前尚未实现,因此 Juno 端口不支持该RESET_TO_BL31配置。

该RESET_TO_BL31配置需要对 BL31 功能进行一些添加和更改:

7.5.1. 引导路径的确定

在此配置中,BL31 使用与上述 BL1 相同的复位框架和代码。因此,它以相同的方式受 PROGRAMMABLE_RESET_ADDRESS和COLD_BOOT_SINGLE_CPU构建选项的影响。

在默认的、未优化的 BL31 重置流程中,在热启动时,CPU 通过平台定义的机制被定向到 PSCI 实现。在冷启动时,平台必须将所有辅助 CPU 置于安全状态,同时主 CPU 执行修改后的 BL31 初始化,如下所述。

7.5.2. 平台初始化

在此配置中,当 CPU 重置为 BL31 时,没有参数可以通过先前的引导阶段传递到寄存器中。相反,BL31 中的平台代码需要知道或能够确定 BL32(如果需要)和 BL33 图像的位置,并提供此信息以响应 bl31_plat_get_next_image_ep_info()功能。

此外,平台软件负责执行任何安全初始化,例如对 TrustZone 地址空间控制器进行编程。这可能由受信任的引导固件或 BL31 中的平台代码完成。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码改变世界ctw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值