1、Gicv3的分组机制与armv8的异常模型、安全模型相对齐
2、gicv3可以设计为两种安全模式,GICD_CTRL中可以配置是否使能安全模式
- 在拥有两种安全模式gic中,中断可被设置分为3组
- 安全组0物理中断(group 0):armv8期望这些中断在el3处理
- 安全组1物理中断(secure group 1):armv8期望这些中断在安全态el1处理或者在使用安全虚拟化系统中这些中断在安全态el2处理
- 非安全组1物理中断(Non-secure group 1):armv8希望这些中断在非安全态el1,或者在使用虚拟化系统中这些中断在非安全态el2处理。
- 在只有一种安全态的gic中,中断被分为group 0和group 1
- 分组配置。当只有一种模式时,sgi、ppi使用GICR_IGROUP0寄存器,spi使用GICD_IGROUP<n>寄存器来配置;当gic有两种安全模式时,sgi、ppi使用GICR_IGROUPR0以及GICR_IGRPMODR0寄存器,spi使用GICD_IGROUPR<n>以及GICD_IGRPMODR<n>寄存器来配置.
3、中断分组和安全
- Armv8的安全架构简介:arm提供两种安全状态,每种状态都有相关联的物理地址空间。(我理解:主要是v7/8架构定义的寄存器地址空间,这些内存空间架构协议可以说明那些是安全态可以访问那些是非安全态访问,以及访问的行为和影响。或者可以在硬件设计的时候配死,哪些地址空间是安全的哪些是非安全的。)非安全态下执行的软件只能通过SMC(secure monitor call)指令进行EL3安全世界的陷入。
- Gicv3支持路由和处理那些与安全状态相关的中断(The GIC architecture supports the routing and handling of interrupts associated with both Security states.)
- GICD_CTLR.DS bit位指示gic是否支持armv8-a的安全模型
- GICD_CTLR.DS为0时
- 支持两种安全态
- 支持3个中断分组
- SIG是否能触发取决于安全状态和GICR_NSACR(该寄存器指示在非安全态是否能够触发安全组的中断)
- GICD_CTLR.DS为1时
- 只支持一种安全态,安全或非安全
- 支持两个中断分组
- sgi的触发不受GICR_NSACR限制
- 软件不应该将group 0或secure group 1 的中断触发到仅支持non-secure 态的PE;软件不应该将non-secure group 1 的中断触发到仅支持secure 态的PE
- 中断优先级分组寄存器bpr寄存器有两个分别对应group 0和group 1,但可以通过配置ICC_CTRL_EL1寄存器使得两组中段均使用ICC_BPR0_EL1作为中断分组
- GICD_CTLR.DS为0时
4、IRQ和FIQ信号的分配见4.6.2Interrupt assignment to IRQ and FIQ signals
5、中断路由和系统寄存器访问(4.6.3)
- FIQ和IRQ信号可以通过armv8的系统寄存器配置他们分别触发pe陷入到哪个异常级别(与FIQ相关的配置寄存器为SCR_EL3.FIQ, SCR_EL3.NS, and HCR_EL2.FMO,与IRQ相关的寄存器SCR_EL3.IRQ, SCR_EL3.NS, and HCR_EL2.IMO)
note:
Secure Group 1 interrupts are treated as Group 0 by a CPU interface if:
— The PE does not implement EL3.
— ICC_SRE_EL1(S).SRE == 0.