03-Arm SiP Services
關鍵詞: TF-A,TF-M,ATF,TrustedFirmware,trustzone,TEE,optee,trusty,tlk,lk,armv8,armv9,arm,secureboot,BL31,BL32,BL1,BL2,hypervisor,終端安全,secureboot,security,virtulization
快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈
👉[專欄目錄]-ATF/FF-A/specification學習👈
目錄
- 3.1. Performance Measurement Framework (PMF)
- 3.2. Execution State Switching service
- 3.2.1. ARM_SIP_SVC_EXE_STATE_SWITCH
- 3.3. DebugFS interface
本文列舉并描述了 Arm SiP(Silicon Provider)服務。
SiP 服務是由芯片實施者或平臺提供商提供的非標準、特定于平臺的服務。 它們通過從低于 EL3 的異常級別執行的 SMC(“SMC 調用”)指令訪問。 SMC 要求 SiP 服務:
遵從SMC Calling Convention規范,使用屬于 SiP 范圍的 SMC 功能 ID,對于 64 位調用,它們是 0xc2000000 - 0xc200ffff,對于 32 位調用,它們是 0x82000000 - 0x8200ffff。
Arm SiP 提供以下服務:
- Performance Measurement Framework (PMF)
- Execution State Switching service
- DebugFS interface
Arm SiP 服務定義位于 arm_sip_svc.h 頭文件中。
3.1. Performance Measurement Framework (PMF)
性能測量框架(Performance Measurement Framework)允許調用者檢索在 TF-A 執行中在不同路徑上捕獲的時間戳。
3.2. Execution State Switching service
執行狀態切換服務為非安全的較低異常級別(EL2 或 NS EL1,如果未實現 EL2)請求切換其執行狀態(又名寄存器寬度),從 AArch64 到 AArch32,或從 AArch32 到 AArch64,用于調用 CPU。 此服務僅在為 AArch64 構建 Trusted Firmware-A (TF-A) 時可用(即當構建選項 ARCH 設置為 aarch64 時)。
3.2.1. ARM_SIP_SVC_EXE_STATE_SWITCH
Arguments:uint32_t Function IDuint32_t PC hiuint32_t PC louint32_t Cookie hiuint32_t Cookie loReturn:uint32_t函數 ID 參數必須為 0x82000020。它唯一標識所請求的執行狀態切換服務。
參數 PC hi 和 PC lo 分別定義了執行狀態切換后應該開始執行的入口點(物理地址)的高位字和低位字。從 AArch64 調用時,PC hi 必須為 0。
當執行狀態切換后從提供的入口點開始執行時,參數 Cookie hi 和 Cookie lo 分別被傳遞到 CPU 寄存器 0 和 1。從 AArch64 調用時,Cookie hi 必須為 0。
此調用只能在主 CPU 上進行,然后才通過 CPU_ON PSCI 調用啟動任何輔助 CPU。否則,調用將始終失敗。
切換執行狀態的效果就像上電后第一次進入異常級別一樣。這意味著具有架構定義的復位值的 CPU 寄存器將采用該值。在進行調用之前,不應期望其他寄存器保持它們的值。但是,CPU 字節序保留了先前的執行狀態。請注意,這僅切換調用 CPU 的執行狀態。這不能替代 PSCI SYSTEM_RESET。
該服務可能會返回以下錯誤代碼:
STATE_SW_E_PARAM:如果任何參數被認為對特定請求無效。
STATE_SW_E_DENIED:如果調用不成功,或者當為 AArch32 構建 TF-A 時。
如果調用成功,調用者將不會觀察到 SMC 返回。相反,執行從提供的入口點開始,CPU 寄存器 0 和 1 分別填充有提供的 Cookie hi 和 Cookie lo 值。
3.3. DebugFS interface
通過 SMC SiP 服務訪問可選的 DebugFS 接口。 有關詳細信息,請參閱組件文檔。
字符串參數通過使用特定聯合的共享緩沖區傳遞:
union debugfs_parms {struct {char fname[MAX_PATH_LEN];} open;struct mount {char srv[MAX_PATH_LEN];char where[MAX_PATH_LEN];char spec[MAX_PATH_LEN];} mount;struct {char path[MAX_PATH_LEN];dir_t dir;} stat;struct {char oldpath[MAX_PATH_LEN];char newpath[MAX_PATH_LEN];} bind; };dir_t 結構的格式如下:
typedef struct {char name[NAMELEN];long length;unsigned char mode;unsigned char index;unsigned char dev;qid_t qid; } dir_t;…
總結
以上是生活随笔為你收集整理的03-Arm SiP Services的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 02-Activity Monitors
- 下一篇: 04-Debug FS