首页 > 其他分享 >【GIC】GICv3 基本规则

【GIC】GICv3 基本规则

时间:2024-10-19 18:43:22浏览次数:1  
标签:状态 中断 寄存器 PE GICv3 GIC 规则 Active Pending

本章介绍了符合GICv3架构的中断控制器的基本操作。它还描述了不同的编程接口。

一.中断类型

  • SPI(Shared Peripheral Interrupt)--共享外设中断

​ 这是一个全局外设中断,可以路由到指定的PE,或路由到一组PE中的一个。

  • PPI (Private Peripheral Interrupt)--私有外设中断

​ 这是针对单个,特定的PE的外围中断。PPI的一个例子是来自PE的通用定时器的中断。

  • SGI(Software Generated Interrupt)--软件生成的中断

​ SGI通常用于处理器间的通信,并通过向GIC中的SGI寄存器进行写入而生成。

  • LPI(Locality-specific Peripheral Interrupt)--基于特定消息的中断

​ LPI是GICv3中新增的,它在很多方面都不同于其他类型的中断。特别是,LPI总是基于消息的中断,它的配置保存在内存中的表中,而不是寄存器中。

注:仅当GICD_CTLR.ARE_NS==1时,才支持LPIs

1.1中断标识符

​ 每个中断源都由一个ID号标识,称为INTID。可用的INTID被分组为一个范围,每个范围都被分配给一个特定类型的中断。

1.2 中断如何发送给中断控制器

​ 传统上,中断是使用专用的硬件信号从外围设备到中断控制器发出信号的。

​ GICv3支持这种模型,另外还支持基于消息的中断。基于消息的中断是通过对中断控制器中的寄存器的写入来设置和清除的中断。

使用消息将中断从外设转发到中断控制器,消除了对每个中断源的专用信号的要求。这对于大型系统的硬件设计者来说可能是一个优势,其中数百甚至数千个信号可以通过SoC路由,并汇聚到中断控制器上。也就是说,基于消息的中断解决了硬件连线的要求。

在GICv3中,SPI可以是基于消息的中断,但LPI始终是基于消息的中断。不同的寄存器用于不同的中断类型,如表4所示。

基于消息的中断对软件的影响

无论中断是作为消息发送还是使用专用信号,对中断处理器内部处理中断的方式影响不大。可能需要一些外设的配置。例如,可能需要指定中断控制器的地址。

二、中断状态机

中断控制器为每个SPI、PPI和SGI中断源维护一个状态机。此状态机包括以下四种状态:

注意:LPI没有Active或Active and pending状态

2.1 电平触发

  • Inactive to Pending

当断言 (assert)中断源时,中断将从Inactive状态转换为Pending状态。此时,GIC向PE断言中断信号(如果中断被启用且具有足够的优先级)。

  • Pending to Active & Pending

当PE通过读取CPU接口中的一个IARs(Interrupt Acknowledge Registers)来响应中断时,中断从pending转换到Active & Pending状态。此读取通常是在发生中断异常后执行的中断处理例程的一部分。然而,软件也可以轮询IAR。此时,GIC取消断言中断信号。

  • Active & Pending to Active

当外围设备取消中断信号断言时,中断从Active & Pending转为Active。这通常发生在PE上执行的中断处理软件写入外围设备的状态寄存器。

  • Active to Inactive

当PE写入CPU接口中的一个EOIR(End of Interrupt Registers)时,中断从Active转到Inactive。这表明PE已经完成了对中断的处理。

2.2 边沿触发

  • Inactive to Pending

在断言中断源时,中断从非活动过渡到挂起。此时,GIC向PE断言中断信号(如果中断被启用并且具有足够的优先级)。

  • Pending to Active

当PE通过读取CPU接口中的一个IAR来响应中断时,中断从Pending转到Active。此读取通常是在发生中断异常后执行的中断处理例程的一部分。然而,软件也可以轮询IAR。此时,GIC取消对PE的中断信号。

  • Active to Active and Pending

如果外围设备重新断言中断信号,中断将从Active到Active & Pending。

  • Active and Pending to Pending

当PE写入CPU接口中的一个EOIR时,中断从Active and Pending变为 Pending。这表明PE已经完成了处理中断的第一个实例。此时,GIC将向PE重新断言中断信号。

三、亲和性路由

Affinity routing :大概意思就是亲和性/匹配性的相关路由吧 = =

GICv3使用亲和路由来识别已连接的PE,并将中断路由到特定的PE或PE组。PE的亲和度表示为四个8-bit字段:

<affinity level 3>.<affinity level 2>.<affinity level 1>.<affinity level 0>

下图显示了关联级别层次结构的一个示例:

在Aff level0处,有一个Redistributor。每个Redistributor都连接到一个CPU口。

Redistributor控制SGI、PPI和LPI。亲和力方案与ARMv8-A中使用的方案与MPIDR_EL1中的PE亲和力相匹配。设计必须确保MPIDR_EL1所指示的亲和值与连接到PE的Redistributor的GICR_TYPER所指示的亲和值相同。不同affinity级别的确切含义是由特定的处理器和SoC来定义的。举个例子:

. ..

...

所有可能的节点都不太可能存在于一个单一的实现中。例如,一个移动设备的SoC可以有一个类似于这样的布局:

0.0.0.[0:3] Cores 0 to 3 of a Cortex-A53 processor

0.0.1.[0:1] Cores 0 to 1 of a Cortex-A57 processor

在ARMv8-A中,AArch64状态支持四个级别的亲和力。AArch32状态和ARMv7只能支持三个级别的亲和力。这意味着使用AArch32状态的设计仅限于亲和级别3(0.x.y.z)上的单个节点。GICD_TYPER.A3V表示中断控制器是否能支持多个3级节点。

GICD_TYPER.A3V =0,aff3=0,即:0.x.y.z;

GICD_TYPER.A3V =1,aff3可以不为0,即:x.x.y.z;

注意:尽管每个1级节点在0级上最多可以托管256个Redistributor,但实际上它很可能是16个或更少。这是因为对SGI的目标PEs的编码方式。(Aff3好像也是取0-15。)

四、安全模型

GICv3架构支持ARM TrustZone技术。必须为每个INTID分配一个组和安全设置。GICv3支持三种组合,如下图所示:

Group 0的中断总是被标记为FIQ。

根据PE的当前安全状态和异常级别,Group 1的中断被标记为IRQ或FIQ。

这些规则旨在补充ARMv8-A安全状态和异常级别的路由控制。下图显示了一个简化的软件堆栈,以及当在EL0执行时发出不同类型的中断信号时会发生什么:

在本例中,IRQ被路由到EL1 (SCR_EL3.IRQ0)和FIQs路由到EL3 (SCR_EL3.FIQ1) 。根据上表6中描述的规则,在EL1或EL0执行时,当前安全状态的组1中断被视为IRQ。其他安全状态的中断触发FIQ,异常被带到EL3。这就允许在EL3处执行的软件来执行必要的上下文切换。

4.1 对软件的影响

在配置中断控制器时,软件控制INTID到中断组Group的分配。只有在安全状态下执行的软件才能分配INTID到中断组。通常,只有在安全状态下执行的软件才能访问安全中断(Group 0和Secure Group 1)的设置和状态。可以启用从非安全状态到安全中断设置和状态的访问。这使用GICD_NSACRn和GICR_NSACR寄存器对每个INTID进行单独控制。

注意:在重置时,INTID属于的中断组根据具体实现来定义。

注意:LPI总是被视为 Non-secure Group 1中断。

4.2 对单一安全状态的支持

在ARMv8-A和GICv3中,支持两种安全状态是可选的。实现可以选择只实现一个安全状态或两个安全状态。在支持两个安全状态的GICv3实现中,可以禁用一个安全状态。这是由GICD_CTLR.DS控制的。

GICD_CTLR.DS == 0 支持两种安全状态

GICD_CTLR.DS == 1 只支持一个安全状态。

​ 在只实现单一安全状态的实现上,这一位是RAO/WI。

​ 注:RAO : Read As One WI :Write Ignored

​ 当只支持一个安全状态时,只有两个中断组,就是Group 0和Group 1。

​ 注意:如果软件设置为GICD_CTLR.DS=1,它只能通过复位来清除。

五、编程模型

GICv3中断控制器的寄存器接口被分为三组:·

  • Distributor (GICD_*)

Distributor寄存器是由 memory-mapped内存映射的,并包含影响连接到中断控制器的所有PE的全局设置。Distributor提供了一个编程接口:·

  • SPI的中断优先级和分发。·

  • 使能和禁用SPI。·

  • 设置每个SPI的优先级级别。

  • 每个SPI的路由信息。·

  • 将每个SPI设置为电平触发或边沿触发。·

  • 生成基于消息的SPI。·

  • 控制SPI的active和pending状态。·

  • 控制在每个安全状态(亲和路由或传统模式)中使用的程序员模型。

  • Redistributors (GICR_*)

对于每个连接的PE,都有一个Redistributor。

Distributors提供了一个编程接口:

  • 使能和禁用SGIs和PPIs。·

  • 设置SGIs和PPIs的优先级。·

  • 将每个PPI设置为电平触发或边沿触发。·

  • 将每个SGI和PPI分配给一个中断组。·

  • 控制SGIs和PPIs的状态。·

  • 在内存中的数据结构(支持相关的中断属性和lpi的pending状态)的基地址控制。·

  • 对连接的PE的电源管理支持·

  • CPU interfaces (ICC_*_ELn)

每个Redistributor连接了一个CPU接口,CPU接口提供的编程接口:

  • 通用控制和配置,以启用中断处理。·

  • 响应中断。·

  • 执行优先级下降(priority drop)和停用(deactivation)中断。·

  • 为PE设置中断优先级掩码。·

  • 定义PE的抢占策略。·

  • 确定PE的等待中断的最高优先级 HPPI(highest priority pending interrupt)

在GICv3中,CPU接口寄存器作为系统寄存器(ICC_*_ELn)被访问。在使用这些寄存器之前,软件必须先启用系统寄存器接口。这是由ICC_SRE_ELn寄存器中的SRE位控制的,其中“n”指定了异常级别(EL1- EL3)。

注意:在GICv1和GICv2中,CPU接口寄存器被内存映射(GICC_*)。

注意:软件可以通过读PE的ID_AA64PFR0_EL1来检查GIC系统寄存器支持。

标签:状态,中断,寄存器,PE,GICv3,GIC,规则,Active,Pending
From: https://www.cnblogs.com/linhaostudy/p/18478108

相关文章

  • Magic: 人工智能驱动的低代码/无代码软件开发自动化框架
    Magic:人工智能驱动的低代码/无代码软件开发自动化框架在当今快速发展的技术世界中,软件开发的效率和速度变得越来越重要。为了应对这一挑战,Magic应运而生-这是一个革命性的人工智能驱动的低代码和无代码软件开发自动化框架,旨在彻底改变软件开发的方式。Magic的核心理念Ma......
  • 关于规则学习的一份介绍
    在这篇文章中,我将介绍有关规则学习的知识,其中将包含有关概念、一阶逻辑、序贯覆盖、剪枝优化、相关算法介绍等内容。一、相关概念首先,我们知道规则学习是机器学习的一个子领域,它专注于从数据中发现能够表达类别的条件模式,即规则。这些规则通常以“如果...则...”的形式出现,可......
  • Digicert SSL证书
    随着互联网技术的飞速发展,网络安全问题日益凸显,成为企业和个人用户共同关注的焦点。数字证书作为确保网络安全的重要工具,已经广泛应用于网站、电子邮件、代码签名等多个领域。其中,DigiCert作为全球领先的数字证书颁发机构(CA),凭借其卓越的安全性能、广泛的应用范围和优质的客户服......
  • Makefile入门学习过程中的一些知识点-一些常见规则或语法:
    1.order-only依赖:还是以上一篇的sudoku项目为例,之前写的目标之后的依赖都属于普通依赖,普通依赖都对应自身的规则,order-only依赖也是一样的,但是当依赖文件中的内容发生改动的时候,两种依赖就会产生差别:对于普通依赖而言,当依赖发生改变需要重新与目标文件生成链接,也就是说如果任......
  • 【关联规则挖掘算法‌】基于模式增长的关联规则挖掘算法
    目录一、基于模式增长的关联规则挖掘算法概述二、基于模式增长的关联规则挖掘算法优缺点和改进2.1  基于模式增长的关联规则挖掘算法优点2.2  基于模式增长的关联规则挖掘算法缺点2.3  基于模式增长的关联规则挖掘算法改进三、基于模式增长的关联规则挖掘算法编程......
  • SpringBoot集成 规则引擎Drools 快速入门
    规则引擎Drools一、drools1、引入问题某电商平台的促销活动,活动规则是根据⽤户购买订单的⾦额给⽤户送相应的积分,购买的越多送的积分越多用户购买的金额和对应送多少积分的规则如下:规则编号订单金额奖励积分1100元以下不加分2100元-500元加10分3500元-1000元加50......
  • 【关联规则挖掘算法‌】基于聚类的关联规则挖掘算法
    目录一、基于聚类的关联规则挖掘算法概述1.1K-Means算法1.2K-Means++算法1.3DBSCAN算法1.4层次聚类算法二、基于聚类的关联规则挖掘算法优缺点和改进2.1  基于聚类的关联规则挖掘算法优点2.2  基于聚类的关联规则挖掘算法缺点2.3  基于聚类的关联规则挖掘算......
  • 跨店每满300元减50元怎么算 2024京东双11满减规则
    1、预售商品参加跨店满减的门槛=定金+尾款(尾款=预售价-定金-付定立减额度)。举个例子:商品的预售价格是250元,商品定金是50元,付定立减30元,则尾款价格为170元,参与跨店满减的凑单的金额为220元(50+170)。京东双十一超级红包领取地址http://www.adiannao.cn/82、跨店满减的凑单......
  • 到底什么是规则引擎?
            提到规则引擎,很多人都是陌生的,当你打开百度可能会搜到非常多的关于规则引擎的信息。比如有广告、推荐、技术文章等等。随着时代的进步,发展趋势,规则引擎也成为了很大部分低代码平台的核心,甚至你在搜索规则引擎关键字时,都会附带这低代码的字样。这可能说得有点远......
  • 深入解析CSS中的!important规则
    深入解析CSS中的!important规则一、引言在CSS的世界里,样式的优先级通常由选择器的特异性、在样式表中的位置(后来的规则覆盖先前的规则)以及继承等因素决定。然而,!important规则就像一把双刃剑,它可以打破这些规则,赋予某些样式声明更高的优先级。本文将深入探讨!important的......