gicv2寄存器,都是使用memory-mapped的方式去訪問的
? ?GICD_: distributor的寄存器
? ?GICH_: 虛擬interface的控制寄存器
? ?GICV_:虛擬interface的控制寄存器
? ?GICC_: 虛擬cpu interface的寄存器
1-Distributor register
在這里插入圖片描述
0x100-0x17C — 》 GICD_ISENABLERn
這個地址范圍內(nèi)一共可以表示32個32bit的寄存器(n=0x7c/4+1)
所以n的值為0-31,共可以表示32*32=1024個中斷
提供了2種訪問方式:
? 一種是memory-mapped的訪問
? 一種是系統(tǒng)寄存器訪問
gicv3的LPI中斷
? ?在gicv3中,引入了一種新的中斷類型。message based interrupts,消息中斷 外設(shè),不在通過專用中斷線,向gic發(fā)送中斷,而是寫gic的寄存器,來發(fā)送中斷。這樣的一個好處是,可以減少中斷線的個數(shù),為了支持消息中斷,gicv3,增加了LPI,來支持消息中斷。并且為他分配了特別多的中斷號,從8192開始,移植到16777216
? LPI的中斷的配置,以及中斷的狀態(tài),是保存在memory的表中,而不是保存在gic的寄存器中的。
? ?GICR_PROPBASER:(64bit)保存LPI中斷配置表的基地址
? ?GICR_PENDBASER: (64bit)保存LPI中斷狀態(tài)表的基地址
? 當外部發(fā)送LPI中斷給redistributor,redistributor首先要查該表,也就是要訪問memory來獲取LPI中斷的配置。為了加速這過程,redistributor中可以配置cache,用來緩存LPI中斷的配置信息。
? 因為有了cache,所以LPI中斷的配置信息,就有了2份拷貝,一份在memory中,一份在redistributor的cache中。如果軟件修改了memory中的LPI中斷的配置信息,需要將redistributor中的cache信息給無效掉。
? LPI實現(xiàn)的兩種方法:
? ?使用ITS,將外設(shè)發(fā)送到eventID,轉(zhuǎn)換成LPI 中斷號
? ?forwarding方式,直接訪問redistributor的寄存器GICR_SERLPIR,直接發(fā)送LPI中斷
gicv2的bypass功能
GICv2支持中斷旁路模式,也就是gic外部的FIQ,IRQ直接接到core的FIQ,IRQ上,相當于gic是不使能的。也就是CFGSDISABLE是有效的,將GIC給無效掉。
gicv2支持bypass功能,這樣gic就不起作用了,core的中斷管腳,直接由soc的其他部門信號驅(qū)動。
-
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120384 -
中斷
+關(guān)注
關(guān)注
5文章
898瀏覽量
41504 -
LPI
+關(guān)注
關(guān)注
0文章
2瀏覽量
5421
發(fā)布評論請先 登錄
相關(guān)推薦
評論