[gic]-ARM gicv3/gicv4的详细介绍-2020/08
快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈
gic目錄
- 1、gic概念
- (1)、模型
- (2)、分類
- (3)、核心功能
- (4)、gicv3較gicv2的特點
- 2、中斷的一些概念
- (1)、中斷的分類、分組
- 中斷觸發方式
- 中斷類型(紅色是gicv3特有)
- 中斷號(紅色是gicv3特有)
- Group分組(GICD_IGROUPRn) -- gicv2
- Group分組(GICD_IGROUPRn)-- gicv3
- gicv3的irq、fiq的標記
- (2)、中斷的狀態
- 3、gic和ARM Core的連接
- (1)、gicv2和ARM Core的連接
- (2)、gicv3和ARM Core的連接
- 4、gic的組件
- (1)、gicv2的組件
- (2)、gicv3的組件
- 4、gic的寄存器
- (1)、gicv2的寄存器
- (2)、gicv3
- 5、Banking registers
- 6、gicv3的LPI中斷
- 7、gicv2的bypass功能
1、gic概念
gic : general interrupt controller
(1)、模型
(2)、分類
GIC中斷控制器的分類:gicv1(已棄用),gicv2,gicv3,gicv4
?gic400,支持gicv2架構版本。
?gic500,支持gicv3架構版本。
?gic600,支持gicv3架構版本
(3)、核心功能
gic的核心功能,就是對soc中外設的中斷源的管理,并且提供給軟件,配置以及控制這些中斷源。
?當對應的中斷源有效時,gic根據該中斷源的配置,決定是否將該中斷信號,發送給CPU。如果有多個中斷源有效,那么gic還會進行仲裁,選擇最高優先級中斷,發送給CPU。
?當CPU接受到gic發送的中斷,通過讀取gic的寄存器,就可以知道,中斷的來源來自于哪里,從而可以做相應的處理。
?當CPU處理完中斷之后,會告訴gic,其實就是訪問gic的寄存器,該中斷處理完畢。gic接受到該信息后,就將該中斷源取消,避免又重新發送該中斷給cpu以及允許中斷搶占
(4)、gicv3較gicv2的特點
GICv3架構是GICv2架構的升級版,增加了很多東西。變化在于以下:
?使用屬性層次(affinity hierarchies),來對core進行標識,使gic支持更多的core
?將cpu interface獨立出來,用戶可以將其設計在core內部
?增加redistributor組件,用來連接distributor和cpu interface
?增加了LPI,使用ITS來解析
?對于cpu interface的寄存器,增加系統寄存器訪問方式
2、中斷的一些概念
(1)、中斷的分類、分組
中斷觸發方式
?edge-triggered: 邊沿觸發,當中斷源產生一個邊沿,中斷有效
?level-sensitive:電平觸發,當中斷源為指定電平,中斷有效
中斷類型(紅色是gicv3特有)
?PPI:(private peripheral interrupt),私有外設中斷,該中斷來源于外設,但是該中斷只對指定的core有效。
?SPI:(shared peripheral interrupt),共享外設中斷,該中斷來源于外設,但是該中斷可以對所有的core有效。
?SGI:(software-generated interrupt),軟中斷,軟件產生的中斷,用于給其他的core發送中斷信號
?LPI : (Locality-specific Peripheral Interrupt)
中斷號(紅色是gicv3特有)
?ID0-ID15,分配給SGI (一般會將0-7給REE,8-15給TEE)
?ID16-ID31,分配給PPI
?ID32-ID1019,分配給SPI
?ID1020-ID1023,特殊中斷號
?ID1024-ID8191,reserved
?8192及其以上,LPI
Group分組(GICD_IGROUPRn) – gicv2
?group0:安全中斷,由nFIQ驅動
?group1:非安全中斷,由nIRQ驅動
Group分組(GICD_IGROUPRn)– gicv3
?group0:安全中斷
?non-secure group1:非安全中斷
?secure group1:安全中斷
gicv3的irq、fiq的標記
(2)、中斷的狀態
3、gic和ARM Core的連接
(1)、gicv2和ARM Core的連接
ARM cortex-A系列處理器,提供了4個管腳給soc,實現外界中斷的傳遞
?nIRQ: 物理普通中斷
?nFIQ: 物理快速中斷
?nVIRQ: 虛擬普通中斷
?nVFIQ: 虛擬快速中斷
(2)、gicv3和ARM Core的連接
gicv3 AXI-stream協議
?gic stream協議,是基于AXI-stream協議。用于gic的IRI組件,和cpu interface之間,傳輸信息。
?distributor,redistributor和ITS,統稱為IRI組件(interrupt routing infrastructure)。
?gic stream協議,包含以下2個接口:
(1)下行AXI-stream接口:用于IRI向cpu interface傳遞信息,連接
(2)上行AXI-stream接口:用于cpu interface向IRI傳遞信息
4、gic的組件
(1)、gicv2的組件
在GICv2中,最大支持8個core
?distributor:實現中斷分發,對于PPI,SGI是各個core獨有的中斷,不參與目的core的仲裁,SPI是所有core共享的,根據配置決定中斷發往的core。最后選擇最高優先級中斷發送給cpu interface。寄存器使用 GICD_ 作為前綴。一個gic中,只有一個GICD。
?cpu interface:將GICD發送的中斷信息,通過IRQ,FIQ管腳,傳輸給core。每一個core,有一個cpu interface。
?virtual cpu interface:將GICD發送的虛擬中斷信息,通過VIRQ,VFIQ管腳,傳輸給core。每一個core,有一個virtual cpu interface。
(2)、gicv3的組件
?distributor:SPI中斷的管理,將中斷發送給redistributor
?redistributor:PPI,SGI,LPI中斷的管理,將中斷發送給cpu interface
?cpu interface:傳輸中斷給core. (實現在core內部的)
?ITS (Interrupt Translation Service components ):用來解析LPI中斷.
4、gic的寄存器
(1)、gicv2的寄存器
gicv2寄存器,都是使用memory-mapped的方式去訪問的
?GICD_: distributor的寄存器
?GICH_: 虛擬interface的控制寄存器
?GICV_:虛擬interface的控制寄存器
?GICC_: 虛擬cpu interface的寄存器
Distributor register
0x100-0x17C — > GICD_ISENABLERn
這個地址范圍內一共可以表示32個32bit的寄存器(n=0x7c/4+1)
所以n的值為0-31,共可以表示32*32=1024個中斷
cpu interface register
(2)、gicv3
提供了2種訪問方式,一種是memory-mapped的訪問,一種是系統寄存器訪問
5、Banking registers
什么是banking register?
Register banking refers to providing multiple copies of a register at the same address. The properties of a register access determine which copy of the register is addressed
一個寄存器一個地址,有多份拷貝. 根據寄存器的權限屬性來決定訪問這個地址的哪個拷貝
gic的banked寄存器有兩類:
For Security Extensions, some registers are banked to provide separate Secure and Non-secure copies of the registers.
For multiprocessor system, some registers are banked.
6、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中斷
7、gicv2的bypass功能
GICv2支持中斷旁路模式,也就是gic外部的FIQ,IRQ直接接到core的FIQ,IRQ上,相當于gic是不使能的。也就是CFGSDISABLE是有效的,將GIC給無效掉。
gicv2支持bypass功能,這樣gic就不起作用了,core的中斷管腳,直接由soc的其他部門信號驅動
總結
以上是生活随笔為你收集整理的[gic]-ARM gicv3/gicv4的详细介绍-2020/08的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android Security视频学习
- 下一篇: [ARM异常]-ARM Core中与中断