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 中的平臺代碼完成。
總結
以上是生活随笔為你收集整理的7-CPU Reset的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6-PSCI Power Domain
- 下一篇: 8-Trusted Board Boot