GIC规格学习(一)

前言

因为ATF之前是2.5的版本,现在我们将其升级为2.7版本,但是这个版本使用的是gicv3。这里我们来看一下看一下从2到3变化是什么?

当然开始必须对GIC架构提供介绍。它对GIC架构作简要介绍,以及新引入到架构的特性。它也提供本文档中使用的术语进行定义。

一、关于GIC

设计GICv3架构是用于与Arm8-A和Arm8-R的处理部分PE一起运行工作。

GIC架构定义:

  • (1)用于处理连接到GIC上的PE的所有中断源的架构需要;

  • (2)为单处理器或多处理器系统提供一个通用中断控制器编程接口;

GIC是支持和控制中断的架构资源。它提供:

  • (1)管理中断源,中断行为,中断路由到一个或多个PE的寄存器;

  • (2)支持:

    • Armv8架构

    • LPI中断

    • PPI中断

    • SGI中断

    • 中断屏蔽和中断优先级

    • 单处理器和多处理器系统

    • 在电源管理环境下wakeup事件

对于每个PE,GIC架构描述IRQ和FIQ中断是如何在系统中产生的。Armv8-A异常模型描述了PE是如何处理这些IRQ和FIQ中断。

中断处理也依赖于Armv8架构的其他方面,比如安全状态和虚拟化的支持。Arm架构提供两个安全状态,每个存在相关的物理内存地址空间:

  • (1)安全状态

  • (2)非安全状态

**GIC架构支持两个安全状态的中断路由和中断处理。**可以看章节Interrupt Grouping and security获得更多信息。

GIC架构支持Armv8架构处理与虚拟机相关的虚拟中断。一个虚拟系统存在:

  • (1)一个hypervisor必须包含执行在EL2的部件,它负责在不同虚拟机VM之间进行切换;

  • (2)多个执行在EL1的虚拟机VM;

  • (3)在VM中应用执行在EL0;

可以查看Arm Architecture Reference Manual获得更多Armv8架构。为获取更多虚拟机VM,可以看GIC support for virtualization。

本文档定义了GIC架构的V3.0,V3.1,V3.2,V4.0,V4.1。GICv2仅作为GICv3的传统操作被描述。

    NOTE:因为GICv4为GICv3.0和GICv3.1的扩展,如果没有明确指明,在本文档中GICv3的相关操作也能应用于GICv4。对于GICv4的任何架构修改都会被指明。

二、从GICv2到GICv3的修改

GIC scalability: GICv2架构仅支持最多8个PE,因此无法在大规模系统上使用。GICv3通过修改哪个中断被路由的机制(亲和性路由)并对中断分发器引入新的部件(Redistributor)来解决GICv2的问题。(这几个路由是通过掩码机制实现的。)

安全状态的亲和性路由通过设置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支持:

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

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

  • GICv3和GICv4中的物理中断;

  • GICv4中的虚拟中断;

ITS也允许软件决定一个转换中断的目标Redistributor。软件可以通过命令接口和内存中相关的基于表的结构体来控制ITS。ITS的输出通常为LPI,它是一种形式的基于信息中断。(特殊的,之前在转载的卢俊前辈的博客也有提到)

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

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

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

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

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

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

ICC_SRE_EL1.SRE==1
ICC_SRE_EL2.SRE==1
ICC_SRE_EL3.SRE==1

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

ICC_SRE.SRE==1
ICC_HSRE.SRE==1
ICC_MSRE.SRE==1

**其他行为,往前兼容GICv2,**在章节14中进行描述。(猜测这个应该是指的GIC的手册)

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

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

GICD_CTLR.ARE_NS==1
GICD_CTLR.ARE_S==1
GICD_CTLR.DS==1

AArch64状态操作如下:

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

AArch32状态操作如下:

ICC_SRE.SRE==1
ICC_HSRE.SRE==1
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数据结构处理的方式。

3、中断术语

1、基础术语

这里重复了就不再记录了

【ARM GIC中断系列(一):简介和术语】

2、其他术语

还有下列其它的术语在本系列文章中被使用:

  • Idle priority: 在GICv3中,当在当前接口上没有中断时0xff为CPU接口上读取ICC_RPR_EL1获取的运行优先级。在传统操作时,idle priority从GICC_RPR中读取,在GICv2中由实现定义的。

  • Interrupt Identifier(INTID):INTID为相关事件和中断源的唯一中断号。中断被路由到一个或多个PE上处理。PPI和SGI中断号对每个PE为本地的。SPI和LPI对于物理domain为全局中断号。看INTID获取更多信息。

  • nterrupt Routing Infrastructure(IRI):Distributor,Redistribution,选择性的一个或多个ITS。

  • Message-based Interrupt: 基于信息的中断为因为内存写访问一个分配的地址而产生的中断。物理中断可以被转化为基于信息的中断。基于信息的中断可以支持电平中断或边沿中断,虽然LPI中断通常为边沿触发中断。

GICv3对基于信息的中断支持两种机制:

  • (1)用于与SPI通信的机制,当分配的地址在Distributor时。在这种情况下基于信息的中断可以为电平中断或边沿触发中断;

  • (2)用于与LPI通信的机制,当分配的地址在ITS中,如果ITS实现,或在Redistributor。

Arm建议LPI的使用来提供支持PCIE系统中MSI和MSI-X能力的支持。可以看章节5 Locality-specific Peripheral Interrupts and ITS获取更多信息。GICv3也包含使用基于信息的中断发起SPI中断,可以看Shared Peripheral Interrupt。

  • Physical Interrupt: 目标为物理PE的中断为一个物理中断。它通过物理CPU接口发送到PE。

  • Running Priority: 在任何时候,一个CPU接口的运行优先级可以为:

    • (1)active中断的group优先级,在这种接口上不会出现优先级下降;

    • (2)如果没有active中断(在这个接口上优先级不会下降),运行优先级为空优先级0xff;

  • Sufficient Priority: GIC CPU接口会比较使能的pending中断的下列情况,来决定是否中断存在足够的优先级:

    • (1)优先级屏蔽寄存器,ICC_PMR_EL1;

    • (2)接口的抢占设置,由ICC_BPR0_EL1和ICC_BPR1_EL1指定;

    • (3)当前运行优先级,由CPU接口的ICC_PRP_EL1指定;

如果中断有足够优先级,它被发送到连接的PE上。

  • Virtual Interrupt: 目标为一个VM的中断为虚拟中断。它是由相关的虚拟化CPU接口发起的。看章节6 Virtual Interrupt Handling and Prioritization获取更多信息。

  • Maintenance Interrupt: 它为一个物理中断,将VM上与中断处理相关的重要事件发出,并允许hypervisor跟踪这些事件。这些事件由hypervisor处理,且包含使能和禁用中断的一些特定group。

4、处理中断的模型

在多处理器实现中,存在下列模型来处理中断:

1-Targeted distribution model

Targeted distribution model:该模型可以应用于所有PPI和LPI。它也可以应用于:

  • (1)如果GICD_IROUTER.Interrupt_Routing_Mode==0,在非传统操作的SPI;

  • (2)在传统操作时,当GICD_CTLR.ARE_*==0时,如果仅GICD_ITARGETSR域的一个为为1;

目标PE由软件接受到中断被指定。

2-Target list model

Target list model: 该模式仅用于SGI。多个PE独立的接受中断。当一个PE ack一个中断,中断的pending状态仅对该PE被清除。中断仍每个PE独立的pending直到被PE ack。

3-1:N model

1:N model: 该模式仅用于SPI。中断目标为一组特定的PE,但只在一个PE上处理中断选择的PE是由实现定义的。架构存在哪个PE被选择的限制。

注意:

  • (1)Arm GIC架构保证1:N中断在目标PE组的其中一个PE;

  • (2)1:N中断可以没最高优先级的中断上,或被ICC_PMR_EL1屏蔽的中断。

      **对于传统操作的SPI,这个模型应用于目标寄存器指定一个目标PE。**
    
      **如果超过一个PE可以处理中断,硬件实现机制来决定哪个PE激活这个中断。**
    

参考链接:
https://blog.csdn.net/flyingnosky/article/details/124002544

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
gic stream协议是一种基于AXI-stream协议的通信协议,用于在gic的IRI组件(interrupt routing infrastructure)和cpu interface之间传输信息。IRI组件包括distributor、redistributor和ITS。在gicv3中,IRI组件与cpu interface之间使用AXI-stream协议传输信息,通过包的组合实现gic的中断操作与中断管理。此外,gicv3还引入了一种新的中断类型,称为消息中断。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ARM_GIC3/4](https://blog.csdn.net/wangwangmoon_light/article/details/122006746)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [undefined](undefined)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【转】ARM GIC中断系列(四):gicv3架构-gic stream协议](https://blog.csdn.net/weixin_45264425/article/details/128364816)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TrustZone_Hcoco

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值