iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
Software Development

RISC-V: 深入淺出從入門到放棄系列 第 17

DAY17: RISC-V: 傻傻分不清之 Duo-PLIC

  • 分享至 

  • xImage
  •  
tags: 鐵人賽

0. 前言

今日我們來介紹 Duo-PLIC,為何需要 Duo-PLIC 呢~
update:
根據最新的 SPEC 描述,RISC-V 不會將 Duo-PLIC 當作標準,這樣是否應該把這章節刪掉呢(??
總之下面的這些描述,看看就好,因為正規版本已經將其刪除了!!!!

1. 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欄位只讀0
  • 對 interrupt donain來說,domaincfg BE欄位具有基本功能,但不影響 Duo-PLIC 充當原本PLIC 的 register access。
  • mmisaiaddrcfg mmsiaddrcfgh smisiaddrcfg smsiaddrcfgh 仍可正常運行
  • 其餘的暫存器只讀0,忽略對暫存器的寫入。

當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。

2. 後記

簡單總結 Duo-PLIC 的用處,事實上就是為了向下兼容所有系統, APLIIC 的擴充,根據 CM bit 來表示 目前是 Duo-PLIC 是當作 PLIC 還是 APLIC。
Duo-PLIC 的內容不多,因此一天的份量差不多就結束了,明天來介紹 machine level 以及 supervisor level 的 interrupt 。 See U !


上一篇
DAY16: RISC-V: APLIC(四)
下一篇
DAY18: RISC-V: Machine level 的 Interrupt
系列文
RISC-V: 深入淺出從入門到放棄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言