gicv3中,引入了支持2种安全状态(secure state),也就是对于中断,根据secure状态,分为安全中断和非安全中断。当然也可以只支持一种安全状态。。
这里的2种安全状态和1种安全状态,主要是影响中断分组,所使用IRQ和FIQ管脚的映射,以及gic中的寄存器访问。
一、中断线的映射
当gic架构,使用gicv3后,中断的传递,和gicv2有所区别。
gicv3中,将cpu interface从gic中抽离,放入到了cpu中,cpu interface通过gic stream接口,与gic进行通信。
当gic要发送中断,gic通过gic stream接口,给cpu interface发送中断命令,cpu interface收到中断命令后,根据中断线映射配置,决定是通过IRQ还是FIQ管脚,向cpu发送中断。
而中断线映射配置,要根据中断的分组以及当前cpu所处的EL以及seucre状态,来决定。
二、2种安全状态中断线映射
当gic支持2种安全状态,EL3是AArch64和AArch32,映射情况不同
1、EL3是AArch64
当EL3是AArch64时,映射如下:
◾对于group0中断,中断线均映射到FIQ
◾对于group1安全中断,secure EL1或EL0,中断线映射到IRQ,其他EL映射到FIQ
◾对于group1非安全中断,secure EL1或EL0以及EL3,中断线映射到FIQ,其他EL映射到IRQ
2、EL3是AArch32
当EL3是AArch32时,映射如下:
◾对于group0中断,中断线均映射到FIQ
◾对于group1安全中断,secure EL0和EL3,中断线映射到IRQ,其余EL映射到FIQ
◾对于group1非安全中断,secure EL0和EL3,中断线映射到FIQ,其余EL映射到IRQ
三、1种安全状态中断线映射
映射如下:
◾group0中断线,直接映射到FIQ
◾group1中断线,直接映射到IRQ
四、GICD寄存器
在GICD中的GICR_CTLR寄存器的DS bit,表示是否支持2种安全模式。
该bit描述如下,如果0,表示支持2种安全状态,为1,表示不支持。
1、支持2种安全模式下GICD_CTLR
在支持2种安全模式下,GICD中寄存器会进行备份成2份,一份提供给secure访问,。一份提供给non-secure访问。
比如对于GICD_CTLR寄存器,secure访问,寄存器描述如下:
而如果是non-secure访问,其寄存器描述如下:
2、支持1种安全模式下GICD_CTLR
在1种安全模式下,寄存器描述如下,此时不论是non-secure访问,还是secure访问,都访问的同一个寄存器。
系列其他篇
原文首发于骏的世界博客
作者:卢骏.
更多Arm技术相关的文章请关注Arm技术博客极术专栏,每日更新。