gicv2寄存器,都是使用memory-mapped的方式去访问的
• ◾GICD_: distributor的寄存器
• ◾GICH_: 虚拟interface的控制寄存器
• ◾GICV_:虚拟interface的控制寄存器
• ◾GICC_: 虚拟cpu interface的寄存器
1-Distributor register
在这里插入图片描述
0x100-0x17C — 》 GICD_ISENABLERn
这个地址范围内一共可以表示32个32bit的寄存器(n=0x7c/4+1)
所以n的值为0-31,共可以表示32*32=1024个中断
提供了2种访问方式:
• 一种是memory-mapped的访问
• 一种是系统寄存器访问
gicv3的LPI中断
• ◾在gicv3中,引入了一种新的中断类型。message based interrupts,消息中断 外设,不在通过专用中断线,向gic发送中断,而是写gic的寄存器,来发送中断。这样的一个好处是,可以减少中断线的个数,为了支持消息中断,gicv3,增加了LPI,来支持消息中断。并且为他分配了特别多的中断号,从8192开始,移植到16777216
• LPI的中断的配置,以及中断的状态,是保存在memory的表中,而不是保存在gic的寄存器中的。
• ◾GICR_PROPBASER:(64bit)保存LPI中断配置表的基地址
• ◾GICR_PENDBASER: (64bit)保存LPI中断状态表的基地址
• 当外部发送LPI中断给redistributor,redistributor首先要查该表,也就是要访问memory来获取LPI中断的配置。为了加速这过程,redistributor中可以配置cache,用来缓存LPI中断的配置信息。
• 因为有了cache,所以LPI中断的配置信息,就有了2份拷贝,一份在memory中,一份在redistributor的cache中。如果软件修改了memory中的LPI中断的配置信息,需要将redistributor中的cache信息给无效掉。
• LPI实现的两种方法:
• ◾使用ITS,将外设发送到eventID,转换成LPI 中断号
• ◾forwarding方式,直接访问redistributor的寄存器GICR_SERLPIR,直接发送LPI中断
gicv2的bypass功能
GICv2支持中断旁路模式,也就是gic外部的FIQ,IRQ直接接到core的FIQ,IRQ上,相当于gic是不使能的。也就是CFGSDISABLE是有效的,将GIC给无效掉。
gicv2支持bypass功能,这样gic就不起作用了,core的中断管脚,直接由soc的其他部门信号驱动。
-
寄存器
+关注
关注
31文章
5281浏览量
119746 -
中断
+关注
关注
5文章
895浏览量
41338 -
LPI
+关注
关注
0文章
2浏览量
5408
发布评论请先 登录
相关推荐
评论