【博文连载】ARM GIC(十三) 波形为例,介绍gic600与cpu interface通信

以下以gic600与cpu interface之间传递的包,来说明,他们之间是如何通信的。这里以波形进行介绍。这样比较直观。

一、downstream control命令包

gic600发送downstream control命令包给cpu interface。命令包的数据为0。

downstream control包格式如下:

解释如下:

从表中可以解析,gic600告诉cpu interface做如下配置:

  • VL设置为0,表示vINTID位宽是16bit

  • PL设置为0,表示pINTID位宽是16bit

  • RSS设置为1,表示SGI的aff0,支持0-15

  • DS设置为0,表示支持两种secure模式

cpu interface接收到该命令包后,回一个downstream control acknowledge响应包。包格式如下:

upstream control命令包,设置PMR

cpu interface给gic600发送upstream control命令包,数据为f8。设置PMR。

该包的格式如下:

对于f8,解析如下:

cpu interface告诉gic600,当前的ICC_PMR_EL1值设置为f8,也就是将来优先级比这个低的,gic600就不要发送中断给cpu interface。

gic600收到upstream control命令包后,回upstream control acknowledge包,格式如下:

二、upstream control命令包,设置group enable

cpu interface给gic600发送upstream control命令包,数据为1。设置group enable。

对于数据1,解析如下:

cpu interface告诉gic600,将grou0的中断使能,group1的secure和non-secure中断不使能。

gic600收到upstream control命令包后,回upstream control acknowledge包,格式如下:

三、set命令包,发送中断

gic600发送set命令包给cpu interface。数据为20。

set命令包格式如下:

gic600向cpu interface发送了一个中断:

  • Grp为0,Mod为0,表示中断属于group0中断组

  • ID length为0,表示INTID位宽为16bit

  • Priority为0x48,表示中断优先级

  • INTID为0x20,表示中断号为32(SPI中断从32开始)

cpu interface收到该set命令后,发现不能处理该中断,因此发送release响应包,并且INTID指定刚刚gic600发送的中断号。

该release响应包的各个参数解释如下:

gic600收到cpu interface的release响应包后,知道之前发送的中断,不能得到cpu interface的响应,在之后,会重新发送该中断。

这里为什么cpu interface不能处理该中断,而是要回release响应包。原因在于中断优先级不符合要求。

对于ICC_PMR_EL1寄存器,gicv3 spec描述如下:

对于中断,gic架构,最多使用8个bit,来表示中断优先级。当然8个bit可以全用,也可以只用一部分,所以架构提供了5种配置方式。设计可以根据自己的需要,选择一种配置即可。

对于使用的bit不一样,对应的中断优先级值不一样。比如对于使用5个bit,那么就是[7:3],共32种中断优先级。这个选择多少个bit,是硬件决定好了,软件是不能更改的。

软件可以设置这个寄存器,来表示,符合要求的优先级,可以被cpu响应。优先级值越小,表示优先级越高。

假设这个时候,软件往这个寄存器写了8,表示优先级高于8的,都不能被core响应。

假设设计,使用[7:3],表示中断优先级。

此时,发送了优先级为0x48的中断,按照[7:3]bit,进行选择,得到中断优先级为9,高于设置的8,因此这个中断不能被core响应,所以cpu interface直接给gic600回release响应。

四、set命令包,发送中断

gic600发送set命令包给cpu interface。数据为21。

gic600向cpu interface发送了一个中断:

  • Grp为0,Mod为0,表示中断属于group0中断组

  • ID length为0,表示INTID位宽为16bit

  • Priority为0x38,表示中断优先级

  • INTID为0x21,表示中断号为33

cpu interface接收到set命令包,将中断发送给core,core响应中断,读取icc_iar寄存器,表示对该中断认可。中断被core认可后,cpu interface就会给gic600回activate命令包,表示core认可了该中断。gic600就可以把该中断状态,更新为active或者active and pending状态。

activate就命令包格式如下:

各个域解析如下:

五、deactivate命令包,无效中断

core在处理完中断后,会写ICC_EOIR0_EL1或者ICC_EOIR1_EL1寄存器,来无效中断,cpu interface接受core的这个写操作,会向gic600发送deactivate命令包,表示core对中断处理完毕。

deactivate命令包,格式如下;

各个域解析如下:

gic600收到cpu interfae发送的deactivate命令后,将自己内部对该中断维护的状态,修改为pending 或者 inactive。

 

(0)

相关推荐

  • 11.基于ARMCortex-A9中断详解

    一.中断概念 https://m.toutiao.com/is/Jt3oK7Q/ 操作系统中,中断是很重要的组成部分.出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序, ...

  • 【博文连载】中值滤波算法的介绍

    言归正传,我们先挑一个相对最简单的滤波算法(其实均值滤波更简单,但是它对边缘的保持太差,那就稍微努力点用中值滤波吧).进行中值滤波不仅可以去除孤点噪声,而且可以保持图像的边缘特性,不会使图像产生显著的 ...

  • 【博文连载】VIP Mini开发板功能介绍 1

    如上图所示,VIP Mini开发板的安装示意图以及模块定义.主控采用了Altera Cyclone IV系列FPGA,该系列FPGA在Cyclone III FPGA基础上,Altera对体系结构和硅 ...

  • 【博文连载】cadence indago征程(五)最强cpu debug工具-eswd

    我们在编写c程序,在调试的时候,希望能够使用visual studio工具,或者eclipse工具,实现单步调试,让我们能够查看c程序的执行状态,从而帮助我们去调试我们写的c程序. 那在soc验证或c ...

  • 【博文连载】ARM GIC(十四)gicv3架构-power控制详解

    在带有gicv3的soc架构中,其框图如下所示: gicv3中的redistributor与core中的cpu interface通过AXI-Stream进行通信. 一.connection 当cor ...

  • 【博文连载】ARM GIC(十二) 中断bypass

    在GICv2架构中,GIC与core之间,是直接通过irq,fiq管脚,传递中断信号.但是在GICv3架构中,GIC通过gic stream接口向cpu interface传递中断信息,然后由cpu ...

  • 【博文连载】ARM GIC(九) gicv3架构-two secure state

    gicv3中,引入了支持2种安全状态(secure state),也就是对于中断,根据secure状态,分为安全中断和非安全中断.当然也可以只支持一种安全状态. 这里的2种安全状态和1种安全状态,主要 ...

  • 【博文连载】ARM GIC(八)总结

    GIC,是arm为了实现复杂的中断控制,而定义的一套架构.版本也历经了多个变化,从最初的GICv1到现在最新的GICv4.每一个新的版本,都增加了一些新的功能. 目前最新的GIC-600 IP,支持G ...

  • 【博文连载】ARM GIC(七)gicv3架构-power控制

    从gic3开始,cpu interface放到了PE中,因此cpu interface和PE是同一个power domain.而属于gic的其他组件,如redistributor,distributo ...

  • 【博文连载】ARM GIC(六)gicv3架构-LPI

    在gicv3中,引入了一种新的中断类型.message based interrupts,消息中断. 一.消息中断 外设,不在通过专用中断线,向gic发送中断,而是写gic的寄存器,来发送中断. 这样 ...