GICv3 基本规则

news2024/12/22 20:56:59

目录

1.中断类型

1.1中断标识符  

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

二、中断状态机

2.1 电平触发

2.2 边沿触发

三、亲和性路由

四、安全模型

4.1 对软件的影响

4.2 对单一安全状态的支持

五、编程模型


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

1.中断类型

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来定义的。举个例子:

<group of groups>. <group of processors>.<processor>.<core>

<group of processors>.<processor>.<core>.<thread>

        所有可能的节点都不太可能存在于一个单一的实现中。例如,一个移动设备的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.IRQ==0)和FIQs路由到EL3 (SCR_EL3.FIQ==1) 。根据上表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系统寄存器支持。

下一篇,学习配置GIC。

更多内容,参阅GICv3 and GICv4 Software Overview

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言与数据分析—上(篇幅长,全)

内容过长但详细&#xff0c;分三篇写&#xff0c;总结分享也供日后参考回顾一、什么是R语言R是免费的&#xff0c;是一个全面的统计研究平台&#xff0c;提供了各式各样的数据分析技术&#xff0c;R拥有顶尖的绘图功能二、R语言优点和缺点优点1、有效的数据处理和保存机制2、拥…

LwIP系列--数据包处理和PBUF结构详解

一、目的在之前的博文中我们介绍了LwIP中的内存堆和内存池实现细节以及它们之间的优缺点对比。本篇我们将介绍LwIP中另一个比较重要的知识点&#xff0c;即数据包管理和PBUF结构&#xff1b;个人认为PBUF的设计是LwIP整个源码的亮点之一&#xff08;充分考虑了数据包处理的高效…

泛微发布数字化营销管理平台-九川汇

泛微全程数字化营销管理平台——九川汇&#xff0c;对内可以跨部门、跨组织高效协同&#xff0c;对外借助企业微信快速连接客户。 营销活动是企业运营中重要的一环&#xff0c;数字化工具如何满足企业的营销管理需求&#xff1a; 1、如何有效助力销售活动&#xff1a;帮助销售…

WebServer重写(一):日志库双缓冲和阻塞队列压测对比

目录前言重构动机模块介绍FileUtil&#xff0c;LogFile&#xff0c;LogStream&#xff0c;LoggingAsyncLogging&#xff08;重要&#xff09;压测源码前言 上次参考TinyWebserver的实现思路是&#xff1a;实现一个blockQueue, 然后实现一个日志接口类&#xff0c;这个接口类承…

ROS小车研究笔记1/31/2023 小车硬件结构及键盘移动控制节点

1 小车硬件结构 1 中控设备 上方的单片机用于控制电机运动&#xff0c;搭载wifi模块和电量显示屏。下方为树莓派&#xff0c;安装了ROS系统和Ubuntu系统&#xff0c;用于整个小车控制。显示屏和树莓派相连 2 传感器系统 激光雷达及转换器。激光雷达和转换器相连&#xff0…

【Rust】7. 枚举和模式匹配

7.1 枚举&#xff08;可存储不同类型的值&#xff09; 7.1.1 基本概念 7.1.2 枚举的简洁用法&#xff1a;构造函数 7.1.3 枚举的优势&#xff1a;处理不同类型和数量的数据 枚举成员的类型&#xff1a;字符串、数字类型、结构体、枚举注意&#xff1a;在未将标准库枚举引入当…

Java——两两交换链表中的节点

题目链接 leetcode在线oj题——两两交换链表中的节点 题目描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 题目示例 …

Vue中的$children与$parent讲解

$children与$parent直接演示代码父组件&#xff1a;<template><div><h2>BABA有存款: {{ money }}</h2><button>找小明借钱100</button><br /><button>找小红借钱150</button><br /><button>找所有孩子借钱2…

Day875.怎么给字符串字段加索引 -MySQL实战

怎么给字符串字段加索引 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于怎么给字符串字段加索引的内容。 现在&#xff0c;几乎所有的系统都支持邮箱登录&#xff0c;如何在邮箱这样的字段上建立合理的索引。 假设&#xff0c;现在维护一个支持邮箱登录的系统&…

【计算机图形学(译)】 一、介绍

【计算机图形学(译&#xff09;】 一、介绍1 介绍 Introduction1.1 图形领域 (Graphics Areas)1.2 主要应用 (Major Applications)1.3 图形APls (Graphics APIs)1.4 图形管线 (Graphics Pinpline)1.5 数值问题 (Numerical Issues)1.6 效率 (Efficiency)1.7 设计和编写图形程序 …

Detectron2部署教程,着重ONNX(从官网翻译)

本教程翻译至这里 https://detectron2.readthedocs.io/en/latest/tutorials/deployment.html detectron2模型训练以后如果想要部署&#xff0c;就需要导出专门的模型才可以。 三种模型导出方式 detectron2支持的模型导出方式有&#xff1a; tracing 该方式导出的格式是Torch…

常量池/String常见面试题

目录 常量池与运行时常量池 字符串常量池String_Table 字符串变量拼接 字符串常量拼接 字符串延迟加载 字符串intern方法 总结StringTable的特点 常量池与运行时常量池 二进制字节码包括 类的基本信息,常量池,类方法定义(包含虚拟机指令) class文件中除了有类的版本,字…

新突破:科学家发现全新的量子纠缠效应

布鲁克海文国家实验室&#xff08;图片来源&#xff1a;网络&#xff09;布鲁克海文国家实验室的科学家发现了一种全新的量子纠缠效应&#xff0c;即使宇宙距离相隔广阔&#xff0c;量子纠缠也会使粒子奇迹般地联系在一起。这一发现使他们能够捕捉到原子内部的奇特世界。这项研…

【算法自由之路】二叉树的递归套路

【算法自由之路】二叉树的递归套路 预热&#xff0c;二叉树的后继节点 话不多说&#xff0c;首先是一道练手题&#xff0c;寻找二叉树任意给定节点的后继节点&#xff0c;此二叉树具备一个指向父节点的指针。 后继节点&#xff1a;在中序遍历中于给定节点后一个打印的节点 p…

SpringBoot实现配置文件的加密和解密

一、项目搭建 1.新建一个springBoot项目 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocatio…

DAMO-YOLO : A Report on Real-Time Object Detection Design

DAMO-YOLO:实时目标检测设计报告在本报告中&#xff0c;我们提出了一种被称为DAMO-YOLO的快速准确的物体检测方法&#xff0c;该方法比最先进的YOLO系列具有更高的性能。DAMO-YOLO是由YOLO扩展而来的&#xff0c;它采用了一些新技术&#xff0c;包括神经结构搜索(NAS)、高效的重…

LeetCode——1669. 合并两个链表

一、题目 给你两个链表 list1 和 list2 &#xff0c;它们包含的元素分别为 n 个和 m 个。 请你将 list1 中下标从 a 到 b 的全部节点都删除&#xff0c;并将list2 接在被删除节点的位置。 下图中蓝色边和节点展示了操作后的结果&#xff1a; 请你返回结果链表的头指针。 来…

【Qt】3.菜单栏、工具栏、状态栏、铆接部件、核心部件、资源文件

目录 菜单栏 工具栏 代码 mainwindow.cpp 结果 状态栏 铆接部件 核心部件 代码 mainwindow.cpp 结果 资源文件 代码 mainwindow.cpp 结果 菜单栏 只能有一个 menuBar()返回一个QMenuBar *bar 将bar放入到窗口中setMenuBar(bar) 添加菜单addMenu("文件&…

三年了,回村了

今年回老家了&#xff0c;因为工作和疫情等原因已经三年多没回了&#xff0c;思乡之情已经压不住了。 老家是一个五线小城市&#xff0c;属于南方典型的鱼米之乡&#xff1a;依山傍水、山清水秀。同时还有一个知名白酒厂&#xff1a;白云边&#xff0c;经济发展还不错。 老家…

从“语义网”到“去中心化”,Web3.0到底是个啥?

什么是Web3.0&#xff0c;为什么近两年这个概念又再一次火出了圈&#xff0c;但凡A股上市公司正在做或者准备做的业务与它沾上边&#xff0c;总会有那么几次异动。 这个概念到底是金融市场布下的骗局&#xff0c;还是未来互联网发展的趋势&#xff0c;在大家的眼里都是褒贬不一…