💡介绍如何将中断分发和路由到目标PE,以及中断号的分配。
分发和重分发(The disributor an Redistributors)
分配器为SPI提供路由配置,并持有所有相关的路由和优先级信息。重新分配器提供PPI和SGI的配置设置。
重新分配器总是在有限的时间内向CPU接口呈现具有最高优先级的pending中断。
最高优先级的pending中断可能会改变,可能原因为:
- 之前的最高优先级中断已经被确认(CPU正在处理)。
- 之前的最高优先级中断已经被抢占了。
- 之前的最高优先级中断被删除,不再有效。
- 组中断使能已被修改。
- PE不再是一个participating PE。
中断号(INTIDs)
中断由唯一的中断号进行标识,是由SOC实现定义的,其中0-31是本地中断,用于SGI和PPI。
中断表
特殊中断号
-
1020
GIC在EL3读取ICC_IAR0_EL1或ICC_HPPIR0_EL1时返回这个值,以表明被确认的中断是一个预计在安全EL1或安全EL2处理的中断。当 PE 在非安全状态下执行时,向Trust OS发出中断信号。 这被视为 EL3 的 FIQ,以便secure monitor可以上下文切换到Trust OS。
-
1021
GIC在EL3读取ICC_IAR0_EL1或ICC_HPPIR0_EL1时返回这个值,以表明被确认的中断是预计在非安全EL1或EL2处理的中断。这个INTID只有在PE在EL3使用AArch64状态执行时,或者PE在AArch32状态使用Monitor模式执行时才会返回。当 PE 在安全状态下执行时,向REE发出中断信号。 这将被视为 EL3 的 FIQ,以便secure monitor可以上下文切换到REE。
-
1022
在GICv3.3中,当SCLTR_ELx.NMI被设置为1时,GIC在响应ICC_IAR1_EL1的读取时返回这个值,以表明被确认的中断是一个NMI。
-
1023
如果没有具有足够优先级的待处理中断被发送给PE,或者如果最高优先级的待处理中断不适合当前的安全状态或者与系统寄存器相关的中断组,这个值是作为对中断确认的回应而返回的。
这里的特殊中断号1020和1021在ATF中有重要作用,可以用于安全世界与非安全世界的切换。
特殊中断号的应用
在以下示例中,移动系统有一个调制解调器中断,用于发出来电信号。 该中断旨在由处于非安全状态的 Rich OS 处理。
- 当 PE 在安全 EL1 上执行trusted OS时,调制解调器中断变为pending。 由于调制解调器中断被配置为Non-Secure group 1,因此它将作为 FIQ 发出信号。 当 SCR_EL3.FIQ==1 时,异常被路由到 EL3。
- 在 EL3 上执行的secure monitor读取 IAR寄存器,返回 1021。该值表示预计将在非安全状态下处理中断。 然后,Secure monitor执行上下文切换操作,切回Rich OS。
- 现在 PE 处于非安全状态,中断将作为 IRQ 发出信号,并传送到非安全 EL1 以由 Rich OS 处理。
中断路由