鐵人賽
今日來介紹 APLIC ,究竟 APLIC 的用途意義是什麼呢?以及跟 PLIC 和 IMSIC 有何不同?
在 RISC-V 系統中,PLIC 處理 external interrupt 是通過 wire 而非 MSI(message signal interrupt) 的方式,當系統的 hart 不具有 IMSIC 時, hart 本身不支援 MSI,因此所有的 exterrnal interrupt 勢必需通過 PLIC。
即使 hart 具有 IMSIC,且大多數的 interrupt 使用 MSI 的方式,但有些設備的 interrupt 還是由 wire 發出,特別是不需要 bus 的設備,支援 MSI 的成本較高,因此使用 wire 是成本較低的選擇,基本上所有平台支援 wire interrupt ,此外許多設備或控制器沒有像 PCI-E 有統一的標準,這也是大部分平台選擇 wire interrupt 原因之一。
Advanced PLIC(以下簡稱 APLIC) 不向下兼容,也就是說不與 PLIC 兼容,只要向 hart 發送 interrupt 是使用 wire interrupt 而不是 MSI,就可以使用 PLIC 建立一個可行的系統。
使用 IMSIC 作為 external interrupt controller,hart 只能以 MSI 的形式接收 external interrupt。在這種情況下,APLIC 的作用是將 wire interrupt 轉換為 hart 的 MSI。
Note: 通常沒有 IMSIC 的系統只會有一個 PLIC 或是 APLIC,當作該 risc-v 系統的 external interrupt controller。
小結一下: 沒有 IMSIC 就是選擇 PLIC or APLIC 去處理 external interrupt。
假設 hart 是使用 IMSIC 作為 external interrupt controller ,那只能接收 MSI 的 external interrupt,在此情況下,APLIC 的作用是將 wire interrupt 轉換成 MSI,才轉發給 hart ,當 hart 具有支持 IMSIC 時,系統可能包含多個 APLIC,用於將 wire interrupt 轉換為 MSI。
一個 APLIC 支援的 interrupt source 與實體上輸入的 interrupt wire 完全對應,在大多數的情況下,每個 source 的輸入線都會連接一個設備或是設備控制器的輸出 interrupt wire。
每個 APLIC 的 interrupt source 都有一個唯一標識號(ID),範圍為 1 到 N,其中 N 是 APLIC 的源總數。
0 表示不是 APLIC 的有效中斷標識號。 APLIC 可以支持的最大 interrupt source 為 1023
APLIC 支援一個或多個 interrupt domain, 每個 interrupt domain 都與 privilege level(M level or S level) 的 hart 有相關聯。每個 domain 都有各自的 memory mapped 控制區域,控制一個完整獨立的 APLIC。
下圖是一個最簡單的系統,只有一個 hart 並且不支援 S mode,只有一個 machine level 的 interrupt domain
下圖為 SMP 系統基本架構,其中 hart 支援 S mode,並且具有多個 hart,在這種情況下,APLIC 通常會為supvisor level 提供一個獨立的 interrupt domain ,此 interrupt domain 允許多個 hart 在 S mode 進行操作,避免調用 M mode 來執行控制的需要
下圖顯示了三個 interrupt domain 的結構,兩個在 M level,一個在 S level。
圖中的安排,當結合 PMP(physical memory protection,實體記憶體保護)使用時,允許 M level software 專門為 hart 0(也就是 main hart) 一個獨立空間。
APLIC 的 interrupt domain 層次結構(hierarchy)須滿足以下規則:
進入 APLIC 的 wire interrupt 首先到達 root domain,每個 domain 可以選擇性的,將所有或是一部分的 interrupt delegate 到其他結構中的 domain,對於同個 APLIC,interrupt ID 在所有的 domian 都不會改變,因此每個 domain 當中的 ID 都是指向同個 source。(也就是同個 APLIC 他的 interrupt ID 都會是相同的,不會因為 delegate 到另一個 domain interrupt ID 就改變了)
當 RISC-V hart 的 external interrupt controller 是 APLIC 而不是 IMSIC 時,該 hart 只能在一個 APLIC 的 privilege level interrupt domain 當中
另一方面,當 IMSIC 作為其 external interrupt controller, hart 可能在多個 APLIC interrupt domain,甚至可能會從機器中的多個不同 APLIC 接收到 MSI。
今日介紹了 APLIC 主要的功能,其實它就是輔助 IMSIC 的一個硬體,主要用途是將 wire itnerrupt 轉成 MSI 再由 IMSIC 接收,若沒有 IMSIC,那 APLIC 就當成一般的 external interrupt controller,也說明了 interrupt ID 範圍,最後說明了APLIC 與 hart 以及 interrupt domain 之間的關係。
明日我們繼續 APLIC 介紹,今日應該大概知道 APLIC 的主要用途了吧 ~