关于arm中断控制器的介绍说明_关于ARM中断控制器的介绍

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接口向处理器产生一个适当的中断异常。

处理器接收异常,软件处理中断。

审计和安