[GICv3] 3. 物理中断处理(Physical Interrupt Handling)

中断生命周期

  1. 外设通过中断信号线生成中断,或者软件生成中断(SGI)。
  2. Distributor 和 ReDistributor 配合按照中断分组和中断优先级仲裁后将最高优先级的中断分发到 CPU interface。
  3. cpu interface 向中断发送到 PE
  4. PE 读取 IAR 寄存器,中断变为 active 状态,并将中断优先级提升至最高,被称为运行优先级。
  5. 中断处理完之后,PE 写 EOI 寄存器,中断优先级降低为 active 前的优先级。
  6. deactivate 中断,使中断在下一次 pending 时,能够再次被 PE take。

中断状态转换状态机

电平触发

电平触发的状态机变化:A1->D->B2->E1

关键步骤

pending to Active & pending

当 PE 通过读取 CPU 接口中的 IAR(中断应答寄存器)之一来ack中断时,中断从pending转换为Active & pending。 此读取通常是在发生中断异常后执行的中断处理例程的一部分。 然而,软件也可以轮询 IAR。

此时,GIC deassert给PE的中断信号。

Active & pending to active

当外设取消置位中断信号时,中断从Active & pending 转换为active状态。 通常发生在PE写外设的清除中断寄存器。

边沿触发

状态机变化:A1->C->A2->E2

关键步骤

Active to Active & Pending

如果外设重新发出中断信号,则中断将从Active 变为Active & Pending

Active & Pending to Pending

当 PE 写CPU interface中的 EOIR 时,中断从Active & Pending 状态变为Pending状态。 这表明 PE 已完成对第一个中断实例的处理。此时GIC重新向PE发出中断信号。

中断类型

PPI

PPI 是针对单个特定 PE 的中断,不同的 PE 可以使用相同的 INTID 来指示不同的事件。 PPI 可以是组 0 中断、安全组 1 中断或非安全组 1 中断。 它们可以支持边缘触发或电平触发。

SGI

SGI 通常用于核间通信 ,并通过写入 GIC 中的 SGI 寄存器来生成。 SGI 可以是组 0 或组 1 中断,并且它们仅支持边沿触发。

SPI

SPI 是外设中断,也就是什么DMA,UART,SPI中断之类的。分发器可以将其路由到可以处理中断的指定 PE,或者路由到系统中已配置为接受此类中断的一组 PE 之一的 PE。 SPI 可以是组 0 或组 1 中断 ,并且它们可以支持边沿触发或电平触发

中断分组

GIC 支持三个中断组,每一个中断都需要指定属于某一个中断分组。

  1. GROUP 0
  2. Secure GROUP 1
  3. Non-Secure Group 1

  • Group 0中断在任何时候都触发FIQ
  • Secure group 1中断发生在PE处于secure状态时触发IRQ
  • Non-Secure group 1中断发生在PE处于non-secure状态时触发IRQ
  • Secure group 1中断发生在PE处于non-secure状态时触发FIQ
  • Non-Secure group 1中断发生在PE处于ecure状态时触发FIQ
  • Secure group 1中断发生在PE处于EL3时触发FIQ。

总结下来就是

当Group 1物理中断是最高优先级的待处理中断并且具有足够的优先级时,就会发出信号。如果下列条件之一为真,则作为FIQ,否则作为IRQ发出信号:

  • 是另一个安全状态的中断, 即非PE此时的安全状态的中断。
  • PE在EL3执行。

中断路由举例

在一个大系统中,非安全侧运行着诸如Linux的操作系统,安全侧运行如optee的Trust OS为整个系统提供安全服务。CPU分时复用在安全操作系统和非安全操作系统之间切换。

通过将中断分组和配置ARMv8相关寄存器,可以将本该属于安全侧的中断路由到Trust OS中进行处理,本该属于LInux中处理的非安全中断路由到LInux中处理,如图:

这里的SCR_EL3.FIQ和SCR_EL3.IRQ含义为:

相关推荐
代码改变世界ctw9 天前
Armv8/Armv9架构从入门到精通-介绍
arm·trustzone·atf·tee·armv8·armv9·周贺贺
Wanliang Li1 个月前
Linux电源管理——CPU Hotplug 流程
linux·嵌入式硬件·嵌入式·armv8·电源管理·cpuhotplug
代码改变世界ctw1 个月前
如何学习Trustzone
安全·trustzone·atf·optee·tee·armv8·armv9
代码改变世界ctw5 个月前
【Arm Cortex-X925】 -【第四章】-时钟和复位
arm开发·armv8·armv9·cortex-r
代码改变世界ctw6 个月前
Armv8/Armv9架构的学习大纲-学习方法-自学路线-付费学习路线
arm·trustzone·soc·芯片·armv8·armv9·周贺贺
CyberSecurity_zhang6 个月前
Armv8-R内存模型详解
mcu·armv8·内存模型·r52·memory model
eeblacksmith8 个月前
ARM IHI0069F GIC architecture specification (8)
armv8·gicv3
eeblacksmith10 个月前
ARM IHI0069F GIC architecture specification (5)
armv8·gicv3
eeblacksmith10 个月前
ARM IHI0069F GIC architecture specification (3)
armv8·gicv3