RISC-V AIA学习3---APLIC第三部分
1. Reset
APLIC复位后,其所有状态都变得有效且一致,但以下情况除外:
a. 每个中断域的domaincfg寄存器;
b. 可能是machine-level interrupt domain的MSI地址配置寄存器;
c. 每个中断域的genmsi寄存器的Busy位(如果存在)。
以上这几种情况,在APLIC复位后,需要根据这些寄存器的具体定义来确定。不管 APLIC 其他部分的状态怎么变,这几个特定的寄存器或寄存器中的某些位的状态是有明确规定的,不会因为复位操作而变得不确定。这样可以保证在系统复位后,这些关键的配置信息和状态标志能够保持稳定,以便系统能够正确地重新启动和运行中断相关的功能。
2. Precise effects on interrupt-pending bits
3. APLIC的直接传递模式
当 APLIC 的中断域配置为直接传递模式(domaincfg.DM = 0
)时,APLIC 会通过专用线路向每个处理器核心(hart)直接发送中断信号。这种模式下,APLIC 作为平台级控制器,负责管理中断到各 hart 的路由和优先级处理。
3.1 IDC(中断传递控制)结构
每个中断域的内存映射控制区域末尾包含一个IDC 结构体数组,每个 hart 对应一个IDC结构体(32 字节,32 字节对齐)。第一个IDC结构,是该中断域内索引为0的hart;第二个是该中断域索引为1的hart;依次类推。结构体包含以下寄存器:
注意:若 hart 索引无效(如系统中不存在该核心),这些寄存器可能全为只读 0。
3.1.1 中断传递使能(idelivery)
- 功能:控制中断是否传递到目标 hart。
0
:禁用中断传递(hart 不会收到该域的中断)。1
:启用传递(hart 会收到符合条件的中断)。
- 无效 hart:若索引无效,设置
idelivery=1
也不会传递中断。
3.1.2 中断强制(iforce)
- 功能:测试时强制触发中断。
1
:当domaincfg.IE=1
且idelivery=1
时,强制向相应的hart发送中断。topi=0
时,为hart生成伪中断(无实际中断源)。
- 自动清零:当读取寄存器
claimi
返回 0(伪中断)时,iforce
自动清零。
3.1.3 中断优先级阈值(ithreshold)
- 功能:设置触发中断的最低优先级(数值越大优先级越低)。
- 若
ithreshold = P
(非零):仅优先级低于P 的中断会触发。 - 若
ithreshold = 0
:所有启用的中断都会触发。
- 若
- 位数:支持
IPRIOLEN
位,优先级范围0
到2^IPRIOLEN-1
。
3.1.4 top interrupt
- 功能:只读寄存器,显示当前最高优先级且符合条件的中断。
- 返回值格式:
- 位 25-16:中断源编号(minor identity)。
- 位 7-0:中断优先级。
- 其他位:0。
- 返回 0 的情况:
- 无有效中断。
- 或
ithreshold
非零且无符合条件的中断。
3.1.5 claimi
- 功能:读取时清除对应中断的挂起位,并处理伪中断。
- 规则:
- 若返回非零值:清除对应中断的挂起位。
- 若返回 0:自动清零
iforce
,表示伪中断。
3.2 中断投递和处理
当配置中断域,以使APLIC直接向HART传送中断时(domaincfg的字段DM为零),APLIC在对应中断域的特权级别,为该域的所有HART提供外部中断信号,只要以下一个条件满足:
(a) hart没有IMSIC
(b) 相关IMSIC中断文件的eidelivery寄存器设置为0x40000000(spec第3.8.1节)。
对于M level,来自APLIC的中断信号在每个hart的mip CSR中显示为位MEIP(achine External Interrupt-Pending)。
对于S level,中断信号在每个hart的mip和sip CSR中显示为 SEIP 位(supervisor External Interrupt-Pending)。每个中断信号可以任意延迟从APLIC传输到对应的hart。
在APLIC,发送至hart的每个中断信号,均源自寄存器domaincfg的IE字段以及该域的内存映射控制区域中 hart IDC结构的当前状态。
如果domaincfg.IE = 0或通过idelivery寄存器禁用到hart的中断传送(idelivery = 0),则中断信号将保持无效状态。
当domaincfg.IE = 1并且中断投递被使能(idelivery = 1)时,只要寄存器iforce或topi不为零,中断信号就会被置位。
由于APLIC和hart之间的通信可能存在延迟,因此可能会发生外部中断陷阱被捕获(hart侧的MEIP或SEIP置位),但当实际发生对claimi寄存器的读取时,没有该hart中断enable和pending的情况。在这种情况下,claimi返回的中断标识为0,从而导致来自APLIC的表现为虚假中断。
便携式软件,必须做好应对 APLIC 上可能出现的虚假中断的准备,这种情况可以安全地被忽略,而且应该很少见。
出于测试目的,可以通过将IDC结构的iforce寄存器,设置为1来触发Hart的虚假中断。
仅用于通过APLIC,进行外部中断的陷阱处理程序,可大致编写如下:
4 MSI传递模式
在MSI投递模式(domaincfg.DM = 1)下,中断域通过MSI将中断转发到目标hart。
仅当中断源对应的pending位和enable位都为1,并且寄存器domaincfg的IE字段也为1时,才会为特定中断源发送MSI。如果发送MSI,则源的中断pending位将被清除。