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