11-Reliability, Availability, and Serviceability (RAS) Extensions
引流關(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)存管理、頁表…
快速鏈接:
.
👉👉👉 個(gè)人博客筆記導(dǎo)讀目錄(全部) 👈👈👈
[專欄目錄]-ATF/FF-A/specification學(xué)習(xí)
11.可靠性、可用性和可服務(wù)性 (RAS) 擴(kuò)展
本文檔描述了TF-A對 Arm 可靠性、可用性和可服務(wù)性 (RAS) 擴(kuò)展的支持。RAS 是 Armv8.2 及更高版本 CPU 的強(qiáng)制擴(kuò)展,也是基本 Armv8.0 架構(gòu)的可選擴(kuò)展。
與EHF一起,對 RAS 擴(kuò)展的支持啟用了處理平臺錯(cuò)誤的固件優(yōu)先范例:錯(cuò)誤導(dǎo)致的異常被路由到 EL3 并在 EL3 中處理。所述錯(cuò)誤是同步外部中止 (SEA)、異步外部中止(信號為 SError)、故障處理和錯(cuò)誤恢復(fù)中斷。EHF文檔提到了各種錯(cuò)誤處理用例。
關(guān)于 Arm RAS 擴(kuò)展、標(biāo)準(zhǔn)錯(cuò)誤記錄的描述,以及 RAS 術(shù)語的準(zhǔn)確定義,請參考 Arm 架構(gòu)參考手冊。本文檔的其余部分假定您熟悉架構(gòu)和術(shù)語。
11.1。概述
如上所述,TF-A中的 RAS 支持支持路由和處理由 EL3 中的平臺錯(cuò)誤導(dǎo)致的異常。它允許平臺定義外部中止處理程序,并注冊 RAS 節(jié)點(diǎn)和中斷。RAS 框架還為訪問 RAS 擴(kuò)展引入的標(biāo)準(zhǔn)錯(cuò)誤記錄提供了幫助程序。
RAS_EXTENSION設(shè)置為的構(gòu)建選項(xiàng)1包括運(yùn)行時(shí)固件中的 RAS;EL3_EXCEPTION_HANDLING并且HANDLE_EA_EL3_FIRST還必須設(shè)置1。RAS_TRAP_LOWER_EL_ERR_ACCESS控制從較低 EL 對 RAS 錯(cuò)誤記錄寄存器的訪問。
查看更多關(guān)于參與 RAS 框架的信息。
11.2. 平臺 API
RAS 框架允許平臺為外部中止、不可包含的錯(cuò)誤、雙重錯(cuò)誤和由 EL3 執(zhí)行引起的錯(cuò)誤定義處理程序。請參閱RAS 移植指南。
11.3. 注冊 RAS 錯(cuò)誤記錄
RAS 節(jié)點(diǎn)是系統(tǒng)中的組件,能夠通過一種通知機(jī)制(SEA、SError 或中斷)向 PE 發(fā)送錯(cuò)誤信號。RAS 節(jié)點(diǎn)包含一個(gè)或多個(gè)錯(cuò)誤記錄,這些錯(cuò)誤記錄是節(jié)點(diǎn)通過其通告信號錯(cuò)誤的各種屬性的寄存器。Arm 建議以標(biāo)準(zhǔn)錯(cuò)誤記錄格式實(shí)現(xiàn)錯(cuò)誤記錄。RAS 架構(gòu)允許通過系統(tǒng)或內(nèi)存映射寄存器訪問錯(cuò)誤記錄。
平臺應(yīng)枚舉為每個(gè)錯(cuò)誤記錄提供的錯(cuò)誤記錄:
-
用于探測錯(cuò)誤記錄的處理程序;
-
當(dāng)探測識別出錯(cuò)誤時(shí),一個(gè)處理程序來處理它;
-
對于內(nèi)存映射錯(cuò)誤記錄,其基地址和大小(KB);對于系統(tǒng)寄存器訪問記錄,記錄的開始索引和從該索引開始的連續(xù)記錄數(shù);
-
任何特定于節(jié)點(diǎn)的輔助數(shù)據(jù)。
通過提供此信息,當(dāng)運(yùn)行時(shí)固件接收到其中一種通知機(jī)制時(shí),RAS 框架可以遍歷并探測錯(cuò)誤記錄以查找錯(cuò)誤,并調(diào)用適當(dāng)?shù)奶幚沓绦騺硖幚硭?/p>
RAS 框架提供了用于填充錯(cuò)誤記錄信息的宏。宏是版本化的,撰寫本文時(shí)的最新版本是 1。這些宏從其參數(shù)創(chuàng)建類型結(jié)構(gòu),然后將其傳遞給探測和錯(cuò)誤處理程序。struct err_record_info
對于內(nèi)存映射錯(cuò)誤記錄:
ERR_RECORD_MEMMAP_V1(base_addr, size_num_k, probe, handler, aux)而且,對于系統(tǒng)寄存器:
ERR_RECORD_SYSREG_V1(idx_start, num_idx, probe, handler, aux)探針處理程序必須具有以下原型:
typedef int (*err_record_probe_t)(const struct err_record_info *info,int *probe_data);如果檢測到錯(cuò)誤,則探測處理程序必須返回非零值,否則返回 0。probe_data輸出參數(shù)可用于將探針產(chǎn)生的任何有用信息傳遞給錯(cuò)誤處理程序(見下文)。例如,它可以返回記錄的索引。
錯(cuò)誤處理程序必須具有以下原型:
typedef int (*err_record_handler_t)(const struct err_record_info *info,int probe_data, const struct err_handler_data *const data);常量參數(shù)描述了錯(cuò)誤的data各種屬性,包括錯(cuò)誤原因、異常綜合癥,以及flags來自 cookie頂級handle異常處理程序的參數(shù)。
該平臺應(yīng)使用上述宏填充一個(gè)數(shù)組,并使用宏將其注冊到 RAS 框架REGISTER_ERR_RECORD_INFO(),并將描述記錄的數(shù)組的名稱傳遞給它。請注意,宏必須在定義數(shù)組的同一文件中使用。
11.3.1. 標(biāo)準(zhǔn)錯(cuò)誤記錄助手
TF-A RAS 框架為標(biāo)準(zhǔn)錯(cuò)誤記錄提供探針處理程序,用于內(nèi)存映射和系統(tǒng)寄存器訪問:
int ras_err_ser_probe_memmap(const struct err_record_info *info,int *probe_data);int ras_err_ser_probe_sysreg(const struct err_record_info *info,int *probe_data);當(dāng)平臺枚舉錯(cuò)誤記錄時(shí),對于那些標(biāo)準(zhǔn)錯(cuò)誤記錄格式的記錄,這些助手可能會被使用而不是推出自己的。上面的兩個(gè)助手:
在標(biāo)準(zhǔn)錯(cuò)誤記錄中檢測到錯(cuò)誤時(shí)返回非零值;
檢測到錯(cuò)誤時(shí)設(shè)置probe_data為錯(cuò)誤記錄的索引。
11.4. 注冊 RAS 中斷
RAS 節(jié)點(diǎn)可以通過引發(fā)故障處理和/或錯(cuò)誤恢復(fù)中斷向 PE 發(fā)出錯(cuò)誤信號。為了使中斷工作的固件優(yōu)先處理范例,平臺必須設(shè)置并注冊EHF。請參閱與異常處理框架的交互。
對于每個(gè) RAS 中斷,平臺必須提供 type 的結(jié)構(gòu):struct ras_interrupt
-
中斷號;
-
關(guān)聯(lián)的錯(cuò)誤記錄信息(對應(yīng)的指針 );struct err_record_info
-
(可選)cookie。
平臺需要定義一個(gè) 的數(shù)組,并使用宏將其注冊到 RAS 框架 ,并傳遞數(shù)組的名稱。請注意,宏必須在定義數(shù)組的同一文件中使用。struct ras_interruptREGISTER_RAS_INTERRUPTS()
的數(shù)組必須按照中斷號的遞增順序進(jìn)行排序。這允許快速查看處理程序以服務(wù) RAS 中斷。struct ras_interrupt
11.5。雙重故障處理
當(dāng)一個(gè)錯(cuò)誤被通知給 PE 時(shí),一個(gè)雙重故障條件出現(xiàn),同時(shí)處理先前通知的錯(cuò)誤仍在進(jìn)行中。當(dāng)出現(xiàn)雙重故障情況時(shí),Arm RAS 擴(kuò)展只需要處理程序執(zhí)行系統(tǒng)的有序關(guān)閉,因?yàn)榛謴?fù)可能是不可能的。
Armv8.4 的 RAS 擴(kuò)展部分引入了新的架構(gòu)特性來處理雙重故障情況,特別是引入了寄存器位NMEA和 EASE位SCR_EL3。引入這些是為了幫助 EL3 軟件運(yùn)行其進(jìn)入/退出例程的一部分,同時(shí)暫時(shí)屏蔽異常——這意味著,在此類系統(tǒng)中,外部 Aborts/SErrors 在發(fā)生時(shí)不會立即處理,而只會在異常再次被取消屏蔽后處理。
TF-A出于遺留原因,執(zhí)行整個(gè) EL3,所有異常都未屏蔽。這意味著所有路由到 EL3 的異常都會立即得到處理。因此, TF-A 能夠在軟件中檢測雙故障條件,而不需要 Armv8.4 雙故障架構(gòu)擴(kuò)展的預(yù)期優(yōu)勢。
雙重錯(cuò)誤是致命的,并在平臺雙重錯(cuò)誤處理程序處終止,并且不會返回。
11.6。參與 RAS 框架
啟用 RAS 支持是由三個(gè)不同但相關(guān)的構(gòu)建選項(xiàng)構(gòu)建的平臺選擇:
-
RAS_EXTENSION=1在運(yùn)行時(shí)固件中包含 RAS 框架;
-
EL3_EXCEPTION_HANDLING=1允許在 EL3 處處理異常。請參閱 與異常處理框架的交互;
-
HANDLE_EA_EL3_FIRST=1啟用外部中止和 SError 到 EL3 的路由。
TF-A中的 RAS 支持引入了plat_ea_handlerEL3 中的 External Abort 處理程序的默認(rèn)實(shí)現(xiàn) 。當(dāng)RAS_EXTENSION 設(shè)置為 時(shí)1,它會首先調(diào)用ras_ea_handler()函數(shù),該函數(shù)是頂級 RAS 異常處理程序。ras_ea_handler負(fù)責(zé)遍歷平臺提供的錯(cuò)誤記錄,探測它們,當(dāng)發(fā)現(xiàn)錯(cuò)誤時(shí),查找并調(diào)用相應(yīng)的錯(cuò)誤處理程序。
請注意,如果平臺選擇覆蓋該plat_ea_handler函數(shù)并打算使用 RAS 框架,則必須 ras_ea_handler()從內(nèi)部顯式調(diào)用。
同樣,對于 RAS 中斷,框架定義 ras_interrupt_handler(). RAS 框架安排在 EL3 發(fā)生 RAS 中斷時(shí)調(diào)用它。該函數(shù)將平臺提供的已排序中斷數(shù)組一分為二,以查找與中斷號相關(guān)的錯(cuò)誤記錄信息。然后調(diào)用該記錄的錯(cuò)誤處理程序來處理錯(cuò)誤。
11.7。與異常處理框架的交互
如前面部分所述,RAS 框架與EHF交互以仲裁 RAS 異常的處理與其他路由到 EL3 的異常。這意味著平臺必須劃分優(yōu)先級以處理 RAS 異常。然后,平臺必須將宏定義PLAT_RAS_PRI為用于 RAS 異常的優(yōu)先級。平臺通常希望為 RAS 處理分配最高的安全優(yōu)先級。
中斷和非中斷異常的處理遵循EHF 文檔中概述的順序。即,對于中斷,優(yōu)先級管理是隱含的;但對于非中斷異常,它們使用EHF API是顯式的。
總結(jié)
以上是生活随笔為你收集整理的11-Reliability, Availability, and Serviceability (RAS) Extensions的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 18-Chain of trust bi
- 下一篇: 12- Library at ROM