GIC规格学习(一)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 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

目录
相关文章
|
缓存 安全 SoC
GICV2&GICV3的基础知识
GICV2&GICV3的基础知识
433 0
|
缓存 安全 SoC
来看看ARM gicv2/gicv3的详解
来看看ARM gicv2/gicv3的详解
1119 0
|
监控 NoSQL
JLink + GDB 调试方法
本节主要介绍嵌入式开发中常用的JLink+GDB调试方法。 调试所需软件 J-link,可以从https://www.segger.com下载对应操作系统的软件包,然后安装(注意:segger是仿真器的名字,相当常用的一款,仿真器的接口也是固定的,一般开发版上都会带有这个调试接口,如图) 运行JLinkGDBServer 按照上图中的配置,配置GDBServer,然后点击OK,进入下一个界面 注意,如果硬件连接没有问题,那么上图中的J-Link和 Device栏中显示绿色,GDB显示为红色,因为我们还没有运行GDB软件。
8489 46
|
Linux 数据安全/隐私保护
【Cloud】修改CentOS官方 云镜像的ROOT密码
在私有云平台使用中,去CentOS官网下载qcow2格式的镜像,发现运行之后不知道密码无法进入系统。现在提供两种修改or注入密码的方法
6725 0
【Cloud】修改CentOS官方 云镜像的ROOT密码
|
监控 调度 开发工具
IO神器blktrace使用介绍
## 前言 1. blktrace的作者正是block io的maintainer,开发此工具,可以更好的追踪IO的过程。 2. blktrace 结合btt可以统计一个IO是在调度队列停留的时间长,还是在硬件上消耗的时间长,利用这个工具可以协助分析和优化问题。 ## blktrace的原理 一个I/O请求的处理过程,可以梳理为这样一张简单的图: ![](http://image
19816 0
|
4月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB2022a/2024b开发,结合粒子群优化(PSO)算法与双向长短期记忆网络(BiLSTM),用于优化序列预测任务中的模型参数。核心代码包含详细中文注释及操作视频,涵盖遗传算法优化过程、BiLSTM网络构建、训练及预测分析。通过PSO优化BiLSTM的超参数(如学习率、隐藏层神经元数等),显著提升模型捕捉长期依赖关系和上下文信息的能力,适用于气象、交通流量等场景。附有运行效果图预览,展示适应度值、RMSE变化及预测结果对比,验证方法有效性。
|
虚拟化
ARM系列 -- 虚拟化(四)
ARM系列 -- 虚拟化(四)
272 0
|
Ubuntu KVM 虚拟化
基于ARM64的Qemu/KVM学习环境搭建
基于ARM64的Qemu/KVM学习环境搭建
|
存储 关系型数据库 MySQL
关系型数据库mysql验证数据完整性
【7月更文挑战第2天】
464 1
|
算法 物联网 Shell
Huawei LiteOS 概览
Huawei LiteOS 概览
717 0