鐵人賽
今日我們來介紹 Duo-PLIC,為何需要 Duo-PLIC 呢~
update:
根據最新的 SPEC 描述,RISC-V 不會將 Duo-PLIC 當作標準,這樣是否應該把這章節刪掉呢(??
總之下面的這些描述,看看就好,因為正規版本已經將其刪除了!!!!
之前所描述的 APLIC 與原本的 PLIC 並不相容,為了將原本的 PLIC 轉換成 APLIC,risc-v 系統提供 Duo-PLIC,此軟體可以將其配置任一形式的 PLIC。
Duo-PLIC是 APLIC 的擴充,具有 APLIC 常見的 memory-mapped interface,此外某些 memory address 則具有原本 PLIC 的 meomry mapped interface。
當 Duo-PLIC 啟用 compatibility 模式時,Duo-PLIC 到 hart 的 interrupt 完全由 Duo-PLIC 控制原本的 PLIC,反之停用 compatibility 模式時,對hart的 interrupt則由Duo-PLIC的 APLIC 控制。
當啟用 compatibility 模式時,Duo-PLIC 會充當原本的 PLIC,此時 Duo-PLIC 只支援將interrupt 直接傳遞給 hart,而不支援用 MSI 的方式轉發 interrupt。當停用 compatibility 模式時,Duo-PLIC 充當 APLIC,所有的 interrupt domain 皆支援 direct delivery 模式,並且可以支援 MSI delivery 模式。
因此,對於 APLIC interrupt domain,domaincfg
的欄位 DM(delivery mode)要麽只讀0或可寫入。
在 APLIC interrupt domain 的 memory mapped control region 當中,Duo-PLIC 在 domaincfg
暫存器第6 bit當中新增一個CM(compatibility mode)欄位,因此 domaincfg
完整格式如下:
其他bit保留並且讀為0。
當CM = 1:
對於Duo-PLIC充當原本的 PLIC 所實現的 context,該 context 的 output interrupt 轉變成從 Duo-PLIC 傳遞到指定的hart和特權級別的 interrupt signal,除了 APLIC domaincfg 的CM之外,Duo-PLIC的 APLIC 與傳遞給 hart 的 interrupt 無關。
在 APLIC interrupt domain的memory mapped control region:
domaincfg
的IE和DM欄位只讀0domaincfg
BE欄位具有基本功能,但不影響 Duo-PLIC 充當原本PLIC 的 register access。mmisaiaddrcfg mmsiaddrcfgh smisiaddrcfg smsiaddrcfgh
仍可正常運行當CM = 0:
hart的 interrput 由 Duo-PLIC 的 APLIC 負責的。
在 Duo-PLIC 的原本PLIC 的 memory-mapped control region 當中,所有暫存器皆只讀0,且忽略對暫存器的寫入。
當 Duo-PLIC 的 compatilibity 模式從停用轉成啟用時,Duo-PLIC 的原本 PLIC 的暫存器則轉成valid(有效)。同樣的,當 Duo-PLIC 的 compatilibity 模式從啟用轉成停用時,Duo-PLIC的 APLIC 暫存器轉成有效,domaincfg
以及 mmisaiaddrcfg mmsiaddrcfgh smisiaddrcfg smsiaddrcfgh
保留之前的值。
Duo-PLIC 的原本PLIC memory-mapped 暫存器不受任何 APLIC domaincfg
當中的BE 欄位影響,大多數的情況,原本PLIC的暫存器皆是little-endian。
在direct delovery 模式下,原本PLIC支援的 interrupt 優先順序數量與 APLIC 相同,因此 IPRIOLEN 是一個常數(通常範圍為1~8),與 compatibility 模式無關。
然而,原本的 PLIC 數字1表示為最低的優先順序,數字越大表示越高的優先順序(RISCV-PLIC chapter 5 interrupt priority 有詳說),與 IMSIC 以及 APLIC 的優先順序剛好相反(數字越小優先度越高),因此當 Duo-PLIC 充當原本PLIC 並向hart report interrupt 優先順序時,report會使相反編號,以標準化AIA。假定原本PLIC interrupt 優先順序為P,則傳送到target hart時被統一化優先順序為2^IPRIOLEN - P。
簡單總結 Duo-PLIC 的用處,事實上就是為了向下兼容所有系統, APLIIC 的擴充,根據 CM bit 來表示 目前是 Duo-PLIC 是當作 PLIC 還是 APLIC。
Duo-PLIC 的內容不多,因此一天的份量差不多就結束了,明天來介紹 machine level 以及 supervisor level 的 interrupt 。 See U !