第五章 Interrupts for Machine andSupervisor Levels
核心內容??
1.主要中斷類型與默認優先級:??
-
- 定義了機器級別(M-level)和監管者級別(S-level)的標準中斷類型(如MEI、SEI、MTI等)。
- 默認優先級規則:本地中斷(如軟件/定時器)優先級高于外部中斷,RAS事件(如低/高優先級錯誤)具有可配置優先級。
2.機器級別中斷處理:??
-
- ??mtopi CSR??:報告當前最高優先級的中斷(包含身份和優先級),用于中斷處理流程。
- 優先級配置:通過間接寄存器(miselect/mireg)設置每個主要中斷的優先級(0x30-0x3F范圍)。
3.監管者級別中斷過濾與虛擬中斷:??
-
- ??mvien/mvip CSR??:過濾S-level中斷,允許機器模式注入虛擬中斷到監管者模式。
- 例如,當mvien的某位設為1時,對應虛擬中斷將出現在S-level的sip寄存器中。
4.WFI指令行為:??
-
- WFI在存在待處理且啟用的中斷時喚醒,優先級由中斷控制器決定,支持嵌套中斷。
概述
RISC-V特權架構為硬件線程(hart)上的中斷定義了0 - 15范圍內若干主要標識,包括機器級和監管級外部中斷(編號分別為11和9)、機器級和監管級定時器中斷(編號分別為7和5)以及機器級和監管級軟件中斷(編號分別為3和1)。除了這些主要標識外,每個特權級別的外部中斷還會由外部中斷控制器(如高級平臺級中斷控制器(APLIC)或入站消息支持中斷控制器(IMSIC))賦予次要、次級標識,以區分來自不同設備或原因的中斷。
高級中斷架構為hart內部或緊鄰hart處產生的額外本地中斷預留了另外24個主要中斷標識,這些中斷通常用于上報錯誤。該架構還定義了一種機制,允許軟件有選擇地將本地中斷和自定義中斷下放(delegate)到下一個較低的特權級別,在某些情況下,還能向較低特權級別注入完全虛擬的中斷。
最后,有一項可選功能允許軟件為主要中斷(如定時器中斷、軟件中斷以及任何本地中斷)分配優先級,使其能夠與平臺級中斷控制器(PLIC)、APLIC或IMSIC為外部中斷設定的優先級混合使用。
5.1. Defined major interrupts and default priorities
表8列出了當前為符合此高級中斷架構(AIA)的RISC-V硬件線程(hart)定義的所有主要中斷。除RISC-V特權架構所規定的主要中斷外,AIA還添加了中斷編號35和43,分別作為低優先級和高優先級的RAS(可靠性、可用性和可服務性)事件的本地中斷。
表8. 按默認優先級順序排列的標準主要中斷代碼
默認優先級順序 | 主要中斷編號 | 描述 |
最高 | 43 | 本地中斷:高優先級RAS事件 |
11, 3, 7 | 機器中斷:外部、軟件、定時器 | |
9, 1, 5 | 監管級中斷:外部、軟件、定時器 | |
12 | 監管級客戶外部中斷 | |
10, 2, 6 | VS中斷:外部、軟件、定時器 | |
13 | 本地中斷:計數器溢出 | |
最低 | 35 | 本地中斷:低優先級RAS事件 |
表9. 當前及未來主要中斷的分類
主要中斷編號 | 類別 |
0-12 | 非本地中斷(由特權架構分配) |
13-15 | 本地中斷 |
16-23 | 本地中斷(預留供未來標準本地中斷使用) |
24-31 | 自定義用途的本地中斷 |
32-47 | 本地中斷(預留供未來標準本地中斷使用) |
≥48 | 自定義用途的本地中斷 |
在特權架構(編號0-15)控制的主要中斷中,AIA將計數器溢出中斷(代碼13)歸類為本地中斷。此外,還假定未來對預留中斷編號14和15的任何定義也將是本地中斷。除兩個RAS中斷外,AIA還額外為其他RISC-V擴展可能定義的標準本地中斷預留了16-23和32-47范圍內的主要中斷編號。分配給特權架構的其余主要中斷(編號0-12)則歸類為非本地中斷。總體而言,表9總結了AIA對所有主要中斷標識的分類。
RAS是可靠性、可用性和可服務性的縮寫。通常,RAS事件對應于檢測到損壞的數據(例如,由于軟錯誤或硬錯誤導致)和/或此類數據的使用。例如,高優先級RAS事件本地中斷可能表示發生了需要RAS錯誤處理程序采取行動以遏制錯誤并在可能的情況下恢復的緊急未糾正錯誤。低優先級RAS事件本地中斷可能由非緊急的延遲或已糾正錯誤觸發。
AIA本身并不要求檢測到的RAS事件觸發為此目的定義的兩個本地中斷之一。系統可以自由地通過其他方式報告任何或所有RAS事件,例如通過由APLIC或IMSIC路由的外部中斷,或通過自定義中斷。
特定RAS事件的報告方法很可能取決于在系統何處檢測到該事件。AIA為RAS事件定義了本地中斷編號,以便系統在hart本地檢測到此類事件時,有一種標準方式來報告這些事件,而不完全依賴外部或自定義中斷。
與往常一樣,平臺標準可能會進一步限制系統報告事件(無論是RAS事件還是其他事件)的方式。
對于RISC-V特權架構未定義的標準本地中斷(編號16-23和32-47),目前的計劃是按照表中所列順序分配默認優先級:
默認優先級順序 | 主要中斷編號 | 描述 |
最高 | 47, 23, 46, 45, 22, 44, 43, 21, 42, 41, 20, 40 | |
11, 3, 7 | 機器中斷:外部、軟件、定時器 | |
9, 1, 5 | 監管級中斷:外部、軟件、定時器 | |
12 | 監管級客戶外部中斷 | |
10, 2, 6 | VS中斷:外部、軟件、定時器 | |
13 | 本地中斷:計數器溢出 | |
39, 19, 38, 37, 18, 36, 35, 17, 34, 33, 16, 32 | ||
最低 |
在16-23范圍內的中斷中,較高的中斷編號表示較高的默認優先級,32-47范圍內的中斷亦如此。這兩組中斷在整個順序中相互交錯,特權架構的標準中斷(0-15)則插入到序列中間。此建議的默認優先級順序安排,使得中斷0-31有可能成為32位RISC-V系統自身足夠使用的子集。
實際上,未來的RISC-V擴展可能會也可能不會遵循為其定義的中斷的默認優先級順序的這一計劃。
除表8中已有的主要中斷外,還暫定提出了以下本地中斷,按默認優先級從高到低排列:
- 23:總線或系統錯誤
- 45:每核心高功耗