7-CPU Reset
引流關(guān)鍵詞: 中斷、同步異常、異步異常、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、安全、內(nèi)存管理、頁表…
快速鏈接:
.
👉👉👉 個人博客筆記導(dǎo)讀目錄(全部) 👈👈👈
[專欄目錄]-ATF/FF-A/specification學(xué)習(xí)
7. CPU 復(fù)位
本文檔描述了在可信固件-A (TF-A) 中處理 CPU 重置的框架的高級設(shè)計。它還描述了平臺集成商如何在一定程度上根據(jù)系統(tǒng)配置定制此代碼,從而簡化和優(yōu)化引導(dǎo)流程。
本文檔應(yīng)與固件設(shè)計 文檔結(jié)合使用,該文檔提供了有關(guān)復(fù)位代碼的更多實(shí)施細(xì)節(jié),特別是針對冷啟動路徑。
7.1。通用復(fù)位代碼流程
TF-A 復(fù)位代碼默認(rèn)在 BL1 中實(shí)現(xiàn)。以下高級圖表說明了這一點(diǎn):
此圖顯示了默認(rèn)的、未優(yōu)化的復(fù)位流程。根據(jù)系統(tǒng)配置,其中一些步驟可能是不必要的。以下部分通過指示哪些構(gòu)建選項排除哪些步驟來指導(dǎo)平臺集成商,具體取決于平臺的功能。
注意:如果 BL31 被用作 TF-A 入口點(diǎn)而不是 BL1,上圖仍然適用,因為在這種情況下,所有這些操作都將發(fā)生在 BL31 中。更多信息請參考第 6 節(jié)“使用 BL31 入口點(diǎn)作為復(fù)位地址”。
7.2. 可編程CPU復(fù)位地址
默認(rèn)情況下,TF-A 假定 CPU 復(fù)位地址不可編程。因此,所有 CPU 在復(fù)位時都從相同的地址(通常為地址 0)開始。然后需要進(jìn)一步的邏輯來識別是冷啟動還是熱啟動,以將 CPU 引導(dǎo)到正確的執(zhí)行路徑。
如果復(fù)位向量地址(反映在復(fù)位向量基地址寄存器 RVBAR_EL3中)是可編程的,那么可以使每個 CPU 在冷復(fù)位和熱復(fù)位時都直接從正確的地址開始。因此,可以跳過引導(dǎo)類型檢測,導(dǎo)致以下引導(dǎo)流程:
要啟用此引導(dǎo)流程,請使用PROGRAMMABLE_RESET_ADDRESS=1. 此選項僅影響 TF-A 重置圖像,默認(rèn)為 BL1 或 BL31 如果 RESET_TO_BL31=1.
在 FVP 和 Juno 平臺上,復(fù)位向量地址不可編程,因此兩個端口都使用PROGRAMMABLE_RESET_ADDRESS=0.
7.3. 單 CPU 冷啟動
默認(rèn)情況下,TF-A 假設(shè)多個 CPU 可能會從復(fù)位狀態(tài)釋放。因此,冷啟動代碼必須仲裁對 CPU 之間共享的硬件資源的訪問。這是通過將其中一個 CPU 指定為主 CPU 來完成的,該 CPU 負(fù)責(zé)初始化共享硬件并與其他 CPU 協(xié)調(diào)引導(dǎo)流程。
如果平臺保證只會啟動單個 CPU,則不需要仲裁。主/從 CPU 本身的概念不再適用。這將導(dǎo)致以下引導(dǎo)流程:
要啟用此引導(dǎo)流程,請使用COLD_BOOT_SINGLE_CPU=1. 此選項僅影響 TF-A 重置圖像,默認(rèn)為 BL1 或 BL31 如果 RESET_TO_BL31=1.
在 FVP 和 Juno 平臺上,雖然默認(rèn)情況下只有一個內(nèi)核通電,但有一些特定于平臺的方法可以將任意數(shù)量的內(nèi)核釋放到復(fù)位狀態(tài)。因此,兩個平臺端口都使用COLD_BOOT_SINGLE_CPU=0.
7.4. 可編程CPU復(fù)位地址,單CPU冷啟動
顯然,可以在具有可編程 CPU 復(fù)位地址并釋放單個 CPU 復(fù)位的平臺上結(jié)合這兩種優(yōu)化。這將導(dǎo)致以下引導(dǎo)流程:
COLD_BOOT_SINGLE_CPU=1 要啟用此引導(dǎo)流程,請同時使用和編譯 TF-A PROGRAMMABLE_RESET_ADDRESS=1。這些選項僅影響 TF-A 重置圖像,默認(rèn)為 BL1 或 BL31 如果RESET_TO_BL31=1.
7.5。使用 BL31 入口點(diǎn)作為復(fù)位地址
在某些平臺上,應(yīng)用處理器的運(yùn)行時固件(BL3x 映像)由在 SoC 上的安全系統(tǒng)處理器上運(yùn)行的某些固件加載,而不是由在主應(yīng)用處理器上運(yùn)行的 BL1 和 BL2 加載。對于這種類型的 SoC,希望應(yīng)用處理器始終重置為 BL31,從而無需 BL1 和 BL2。
TF-A 提供了一個構(gòu)建時選項,該選項RESET_TO_BL31在 BL31 入口點(diǎn)中包含一些額外的邏輯以支持此用例。
在此配置中,平臺的可信引導(dǎo)固件必須確保 BL31 加載到其運(yùn)行時地址,該地址必須與 CPU 的RVBAR_EL3 復(fù)位向量基地址匹配,然后才能啟動應(yīng)用處理器。此外,平臺軟件負(fù)責(zé)加載所需的其他 BL3x 圖像,并將它們的入口點(diǎn)信息提供給 BL31。加載這些映像可能由 Trusted Boot Firmware 或 BL31 中的平臺代碼完成。
雖然 Arm FVP 平臺不支持在運(yùn)行時動態(tài)編程復(fù)位基址,但可以 RVBAR_EL3在啟動時設(shè)置寄存器的初始值。此功能僅在 Base FVP 上提供。
它允許 Arm FVP 端口支持RESET_TO_BL31配置,在這種情況下,bl31.bin映像必須加載到其在 Trusted SRAM 中的運(yùn)行地址,并且所有 CPU 復(fù)位向量都從默認(rèn)值0x0更改為此運(yùn)行地址。有關(guān)以這種方式運(yùn)行 FVP 模型的詳細(xì)信息,請參閱Arm 固定虛擬平臺 (FVP) 。
雖然從技術(shù)上講,可以在 SCP 固件中使用正確的支持對復(fù)位基地址進(jìn)行編程,但目前尚未實(shí)現(xiàn),因此 Juno 端口不支持該RESET_TO_BL31配置。
該RESET_TO_BL31配置需要對 BL31 功能進(jìn)行一些添加和更改:
7.5.1. 引導(dǎo)路徑的確定
在此配置中,BL31 使用與上述 BL1 相同的復(fù)位框架和代碼。因此,它以相同的方式受 PROGRAMMABLE_RESET_ADDRESS和COLD_BOOT_SINGLE_CPU構(gòu)建選項的影響。
在默認(rèn)的、未優(yōu)化的 BL31 重置流程中,在熱啟動時,CPU 通過平臺定義的機(jī)制被定向到 PSCI 實(shí)現(xiàn)。在冷啟動時,平臺必須將所有輔助 CPU 置于安全狀態(tài),同時主 CPU 執(zhí)行修改后的 BL31 初始化,如下所述。
7.5.2. 平臺初始化
在此配置中,當(dāng) CPU 重置為 BL31 時,沒有參數(shù)可以通過先前的引導(dǎo)階段傳遞到寄存器中。相反,BL31 中的平臺代碼需要知道或能夠確定 BL32(如果需要)和 BL33 圖像的位置,并提供此信息以響應(yīng) bl31_plat_get_next_image_ep_info()功能。
此外,平臺軟件負(fù)責(zé)執(zhí)行任何安全初始化,例如對 TrustZone 地址空間控制器進(jìn)行編程。這可能由受信任的引導(dǎo)固件或 BL31 中的平臺代碼完成。
總結(jié)
以上是生活随笔為你收集整理的7-CPU Reset的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6-PSCI Power Domain
- 下一篇: 8-Trusted Board Boot