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