GIC spec之介绍2

1.1 从GICv2到GICv3的修改

GIC scalability: GICv2架构仅支持最多8个PE,因此无法在大规模系统上使用。GICv3通过修改哪个中断被路由的机制(亲和性路由)并对中断分发器引入新的部件(Redistributor)来解决GICv2的问题。可以看章节3 GIC Partitioning获取更多信息。

        安全状态的亲和性路由通过设置GICD_CTLR_ARE_S或GICD_CTLR_ARE_NS为1被使能。

Interrupt grouping: 中断分组为GICv3使用的机制来对齐中断处理与Armv8异常模型:

  1. Group0物理中断被用来处理最高实现的异常级别;
  2. 安全Group1物理中断被用来处理安全EL1或EL2;
  3. 非安全Group1物理中断在使用虚拟化的系统中处理非安全EL2,或不使用虚拟化的系统中处理非安全EL1;

        这些中断可以被映射Armv8 FIQ和IRQ信号,在Interrupt grouping中描述,使用Armv8架构的配置位,这些配置位在GICv3架构中。

        在GICv3中,Interrupt grouping支持:

  1. 配置每个中断为Group0,安全Group1,或非安全Group1;
  2. 使用FIQ异常请求将Group0物理中断发送到目标PE;
  3. 在安全状态使用IRQ handler将中断处理,将Group1物理中断发送到目标PE。Group1中断的准确处理依赖于当前异常处理和安全状态;
  4. 统一方案来处理Group0和Group1中断的优先级;

中断转换服务(ITS):中断转换服务ITS允许软件控制中断是如何被发送到ITS:

  1. GICv3和GICv4中的物理中断;
  2. GICv4中的虚拟中断;

        ITS也允许软件决定一个转换中断的目标Redistributor。软件可以通过命令接口和内存中相关的基于表的结构体来控制ITS。ITS的输出通常为LPI,它是一种形式的基于信息中断。

位置特定的外设中断(LPI):LPI中断是一种新的类型中断,它能够明显扩展GIC可以处理中断ID空间。LPI是可选的,如果实现,可以通过ITS产生和支持。

软件产生中断(SGI):GICv3具备支持大规模系统的能力,SGI的上下文被修改,不再包含源PE的识别。

        NOTE:原始的SGI格式仅在支持传统操作的GIC实现中有效。

共享外设中断(SPI): Distributor中一组新的寄存器被添加用于支持基于信息的SPI的设置和清除。

系统寄存器接口:在Armv8-A或Armv8-R PE中该接口使用系统寄存器指令为CPU接口寄存器提供紧密耦合的接口。该接口用于寄存器,这些寄存器直接与中断处理和优先级屏蔽来最小化访问时延相关。为了虚拟化,可以以这种方式访问的寄存器包含两种寄存器,一种由VM中断handler访问的寄存器,一种将hypervisor的虚拟中断发送给VM。所有这些寄存器都是内存映射的。

        对于AArch64状态,通过下列设置使能对系统寄存器接口的访问:

  1. ICC_SRE_EL1.SRE==1
  2. ICC_SRE_EL2.SRE==1
  3. ICC_SRE_EL3.SRE==1

        对于AArch32状态,通过下列设置使能对系统寄存器接口的访问:

  1. ICC_SRE.SRE==1
  2. ICC_HSRE.SRE==1
  3. ICC_MSRE.SRE==1

        其他行为,往前兼容GICv2,在章节14中进行描述。

        NOTE: 对于支持传统操作的GIC中,内存映射的访问对所有架构的GIC都有效。

        本文档描述了系统中GICv3架构,包括亲和性路由,系统寄存器访问,两个安全状态,以及使能。这意味着:

  1. GICD_CTLR.ARE_NS==1
  2. GICD_CTLR.ARE_S==1
  3. GICD_CTLR.DS==1

AArch64状态操作如下:

  1. ICC_SRE_EL1.SRE==1,对于寄存器的安全和非安全copy;
  2. ICC_SRE_EL2.SRE==1
  3. ICC_SRE_EL3.SRE==1

AArch32状态操作如下:

  1. ICC_SRE.SRE==1
  2. ICC_HSRE.SRE==1
  3. ICC_MSRE.SRE==1

        对于GICv3,如果PE实现了安全EL2,传统操作ARE和SRE控制BIT设置为0是不允许并移除的。

GICv3.1特定的修改:GICv3.1支持内存partitioning和monitoring,一个扩展的SPI范围,一个扩展的PPI范围,并支持安全EL2。

GICv3.2特定的修改:GICv3.2增加对Armv8-R AArch64的支持。

GICv4特定的修改:GICv4在不需要陷入hypervisor时增加对虚拟中断注入到虚拟机VM。直接注入仅在实现了至少一个ITS的系统上支持,ITS将中断转化为LPI。

GICv4.1特定的修改:GICv4.1也将直接注入支持扩展到处理虚拟SGI。GICv4.1修改了GICv4数据结构处理的方式。

猜你喜欢

转载自blog.csdn.net/flyingnosky/article/details/123908686
GIC