
GIC硬件原理
GIC,通用中断控制器.是ARM公司提供的通用中断控制器。主要功能是接收硬件中断信号,经过一定的处理后分配给相应的CPU进行处理。
目前,GIC有四个版本,GIC v1~v4。本文主要介绍GIC v3控制器。
GIC v3中断类别
GICv3定义了以下中断类型:
SGI(软件产生的中断):软件触发的中断。软件可以通过写入GICD_SGIR寄存器来触发中断事件,该寄存器通常用于内核间通信。IPI:内核中处理器间中断是基于SGI的。
PPI(专用外设中断):专用外设中断。这是一个专用于每个内核的中断。PPI会被发送到指定的CPU,应用场景有一个CPU本地时钟。
SPI(共享外设中断):通用外部设备中断,也称为共享中断。中断产生后,可以分配给CPU。比如按钮触发中断,手机触摸屏触发中断。
lpi(locality-specific peripheral interrupt):LPI是GICv3中的一个新特性,在很多方面都不同于其他类型的中断。LPI总是基于消息的中断,它们的配置存储在表中,而不是寄存器中。例如,PCIe的MSI/MSI-x中断。
中断类型硬件中断号SGI 0-15 PPI 16-31 SPI 32-1019保留.LPI 8192-最大
GIC v3作文
GICv3控制器由以下三部分组成:
分配器:SPI中断管理,它将中断发送到再分配器。
打开或关闭每个中断。分配器对中断有两级控制。一个是全局中断的控制(GIC_DIST_CTRL)。一旦全局中断关闭,任何中断源产生的中断事件都不会传递到CPU接口。另一层是控制每个中断源(GIC _ DIST _使能_清除)。关闭一个中断源会导致中断事件不分发到CPU接口,但不会影响其他中断源产生的中断事件的分发。
控制将当前优先级最高的中断事件分配给一个或一组CPU接口。当一个中断事件被分配到多个CPU接口时,gic的内部逻辑应该确保只有一个CPU被断言。
优先级控制。
中断属性设置。设置每个外设中断的触发方式:电平触发和边沿触发;
中断组的设置。设置每个中断的组,其中Group0用于安全中断,支持FIQ和IRQ,Group1用于不安全中断,只支持IRQ;
再分配器:管理SGI、PPI和LPI中断,并将中断发送到CPU接口。
启用和禁用SGI和PPI。
设置SGI和PPI的优先级。
将每个PPI设置为电平触发或边沿触发。
将每个SGI和PPI分配给一个中断组。
控制SGI和PPI的状态。
内存中数据结构的基址控制支持LPI的相关中断属性和挂起状态。
电源管理支持。
CPU接口:向内核发送中断。
打开或关闭连接的CPU断言的CPU接口中断事件。对于ARM,CPU接口和CPU之间的中断信号线是nIRQCPU和nFIQCPU。如果中断关闭,即使分配器将中断事件分配给CPU接口,assert指定的nIRQ或nFIQ也不会通知内核。
中断确认。内核将向CPU接口回复中断(以最高的当前优先级回复中断)。一旦中断被应答,分配器会将中断的状态从挂起改为活动或挂起并活动(这与中断源的信号有关,例如,如果是一个电平中断,并且维持断言的电平,那么它就是挂起并活动的)。ack中断后,CPU接口将取消nIRQCPU和nFIQCPU信号线。
中断处理完成的通知。当中断处理程序处理完一个中断时,它会通知写CPU接口的寄存器GIC CPU已经处理完该中断。这个动作一方面是通知分配器将中断状态改为去激活,另一方面CPU接口会降低优先级,从而允许其他挂起的中断提交给CPU。
为CPU设置中断优先级屏蔽。通过优先级屏蔽,可以屏蔽掉一些低优先级的中断,这些中断不会通知CPU。
设置CPU的中断抢占策略。
当多个中断事件同时到达时,选择优先级最高的一个通知CPU。
GICv3控制器的内部模块和中断类型之间的关系如下图所示:
中断路由
GICv3使用层次结构来标识特定的核心,如下图所示,这是一个四层结构(aarch64):
以…的形式形成一条体育路线.每个内核的affinity值可以通过MPDIR_EL1寄存器获得,每个affinity占用8位。配置相应内核的MPIDR值,将中断路由到内核。
每个亲缘关系的定义基于SOC自己的定义,例如:
.
设置中断亲和度的一般函数是irq_set_affinity,后面会详细介绍。
中断状态机
中断处理的状态机如下:
InActive:没有中断,即没有挂起或活动。
Pending:硬件或软件触发了中断,中断事件已经通过硬件信号通知给GIC,等待GIC分配的CPU处理。在电平触发模式下,产生中断并保持挂起状态。
活动:CPU已确认中断请求并正在处理它。
活动和挂起:当中断源处于活动状态时,同一个中断源触发一个中断并进入挂起状态。
中断处理流程
https://dragonki会跳过。暂时博客。这里详细的net/article/de内容在/1058之后详述。
外设发起一个中断并将其发送给分配器。
分配器将中断分配给适当的再分配器。
再分配器向CPU接口发送中断信息。
CPU接口向处理器产生一个适当的中断异常。
处理器接收异常,软件处理中断。
审计和安








