GICv3_LPI机制

news/2025/3/14 17:48:58/

GICv3_LPI机制


文章目录

  • GICv3_LPI机制
  • 参考资料:
    • 一、 GICv2
    • 二、 GICv3
      • 2.1 MSI
      • 2.2 GICv3内部结构
      • 2.3 中断号
    • 三、 LPI的触发方式
      • 3.1 使用GICR_SETLPIR
      • 3.2 使用ITS
  • 致谢



参考资料:

  • 《ARM® Generic Interrupt Controller Architecture Specification Architecture version 2.0(IHI0048B_b_gic_architecture_specification_v2).pdf》
  • 《IHI0069G_gic_architecture_specification.pdf》第5章
  • 《GICv3_Software_Overview_Official_Release_B.pdf》
  • ARM GIC(六)gicv3架构-LPI

一、 GICv2

框图如下:

在这里插入图片描述
在这里插入图片描述
GIC V2有3种中断:

① 软件触发中断(SGI,Software Generated Interrupt)
这是由软件通过写入专用仲裁单元的寄存器即软件触发中断寄存器(ICDSGIR)显式生成的。它最常用于CPU核间通信。SGI既可以发给所有的核,也可以发送给系统中选定的一组核心。中断号0-15保留用于SGI的中断号。用于通信的确切中断号由软件决定。

② 私有外设中断(PPI,Private Peripheral Interrupt)
这是由单个CPU核私有的外设生成的。PPI的中断号为16-31。它们标识CPU核私有的中断源,并且独立于另一个内核上的相同中断源,比如,每个核的计时器。

③ 共享外设中断(SPI,Shared Peripheral Interrupt)
这是由外设生成的,中断控制器可以将其路由到多个核。中断号为32-1020。SPI用于从整个系统可访问的各种外围设备发出中断信号。

在GICv2里,设备向中断控制器发出中断,必须使用物理上的线路:
在这里插入图片描述
在复杂系统中有成本上千的中断时,就需要成本上千的中断信号线,这太复杂了。

于是在GICv3中引入MSI(“message-based interrupts”),设备往某个地址写入数值,即可触发中断。

二、 GICv3

2.1 MSI

在GICv3里,添加了MSI(“message-based interrupts”),设备往某个地址写入数值,即可触发中断:
在这里插入图片描述
使用消息来发送中断,好处是可以省略硬件线路。在大型系统中有成百上千个中断,使用MSI可以省下很多线路。

2.2 GICv3内部结构

GIC V3里新增加了一类中断:LPI(Locality-specific Peripheral Interrupts)

框图如下:

在这里插入图片描述
对于原来的SPI,它也是可以使用MSI的方式传递的,这个功能是可选的。如果GICv3支持MSI方式的SPI,要产生/清除中断时,操作如下GIC寄存器:

  • 产生中断:写寄存器GICD_SETSPI_NSR 或 GICD_SETSPI_SR
  • 清除中断:写寄存器GICD_CLRSPI_NSR 或 GICD_CLRSPI_SR

对于LPI中断,有两种触发方式:

  • 写寄存器GITS_TRANSLATER
    • 设备把数据写入GITS_TRANSLATER寄存器,写入的值被称为EventID
  • 写寄存器GICR_SETLPIR

2.3 中断号

0~1023跟GICv2保存一致。

INTID中断类型描述
0~15SGI
16~31PPI
32~1019SPI设备发出的中断
1020~1023SPI用于特殊目的
1024~1055-保留
1056~1119PPI扩展的PPI,GICv3.1才支持
1120~4095-保留
4096~5119SPI扩展的SPI,GICv3.1才支持
5120~8191-保留
8192~芯片实现LPI

三、 LPI的触发方式

LPI有两种触发中断的方式:

  • 把INTID直接写入GICR_SETLPIR寄存器
  • 使用ITS把EventID 转换为LPI INTID,会用到"GITS_TRANSLATER"寄存器

这两种方法只能支持一种。

3.1 使用GICR_SETLPIR

这个寄存器格式如下:
在这里插入图片描述
把LPI的中断号写入这个寄存器即可触发中断。

3.2 使用ITS

ITS的意思是:Interrupt Translation Service,中断转换服务。
在这里插入图片描述
能产生MSI中断的设备,都有一个DeviceDI(设备ID),它产生的每一个MSI中断都有一个EventID(事件ID)。"DeviceID+EventID"组合被传入ITS,IDS会把它们转换为INTID。

过程如下:

  • 外设发生中断消息(Interrupt Message)到ITS
    • 外设只要写GITS_TRANSLATER就可以发送消息,这个寄存器格式如下:
      在这里插入图片描述
    • 消息里包含有:DeviceID(哪一个设备)、EventID(这个设备的哪一个中断)
  • ITS使用DeviceID在Device Table中找到一项
    • 只有一个Device Table
    • 每一个能发生MSI中断的设备在里面都有一项,它指向这个设备的Interrupt Translation Table(中断转换表,简称ITT)
    • 每一个能发生MSI中断的设备,都有一个ITT
  • ITS使用EventID在ITT中找到一项,从中返回INTID和Collection ID
  • ITS使用Collection ID在Collection Table中找到一项,从中返回"Target Redistributor",即:中断发给哪个CPU
  • ITS把INTID发给Redistributor

在这里插入图片描述
在这里插入图片描述
上图中Device Table、Interrupt Translation Table、Collection Table都是在内存里,但是我们不能直接去设置内存。而是通过发送ITS命令来设置这些表格。

我们不研究ITS的内部细节,暂且了解这些内容即可。



致谢

以上笔记源自韦东山老师的视频课程,感谢韦老师,韦老师是嵌入式培训界一股清流,为嵌入式linux开发点起的星星之火,也愿韦老师桃李满园。聚是一团火,散是满天星!

在这样一个速食的时代,坚持做自己,慢下来,潜心琢磨,心怀敬畏,领悟知识,才能向下扎到根,向上捅破天,背着世界往前行!
仅此向嵌入行业里的每一个认真做技术的从业者致敬




http://www.ppmy.cn/news/806879.html

相关文章

GVRP 简介

GVRP 简介 GVRP 基于 GARP 的工作机制来维护设备中的 VLAN 动态注册信息,并将该信息向其他设备传播:当设备启动了 GVRP 之后,就能够接收来自其他设备的 VLAN 注册信息,并动态更新本地的 VLAN 注册信息,包括当前的 VLA…

GIC介绍 (三)——GIC400 Register

GIC400 Register gic寄存器 gic寄存器,分为两部分,一部分是distributor的寄存器,另一部分是cpu interface的寄存器。 两部分的寄存器,均是通过memory-mapped的方式来访问。 Distribution Distributor Control Register GICD_C…

GIC 介绍 (二)—gic400 使用

GIC V2(gic400) GIC400,支持最大8个core,在gicv2中,gic由两个大模块组成:distributor 和 cpu interface distributor:实现中断分发,对于PPI,SGI是各个core独有的中断,不参与目的core的仲裁&…

GICV2GICV3的基础知识

当时把这个笔记在本地,搞忘了转载的地址,麻烦看到了联系我。感谢前辈的文章 1、gic概念 gic : general interrupt controller(1)、模型 ARM gicv2/gicv3的详解 (2)、分类 GIC中断控制器的分类:gicv1(已弃用)&…

Linux 中断管理之ARM GIC V3 初始化

1.ARM GIC V3中断控制器介绍 GIC(Generic Interrupt Controller)是一个通用的中断控制器,用来接收硬件中断信号,并经过一定处理后,分发给对应的CPU进行处理。GIC V3是其中一个版本,支持的中断类型如下表&a…

GICv3和GICv4虚拟化

本文档翻译自文档Arm Generic Interrupt Controller v3 and v4 - Virtualization 1 虚拟化 Armv8-A选择性的支持虚拟化。为了完成该功能,GICv3也支持虚拟化。GICv3中对虚拟化的支持包括如下功能: CPU Interface寄存器的硬件虚拟化产生和发送虚拟中断的…

GICv3/v4-软件概述

目录内容 2 介绍→主要介绍GIC架构历史3 GICv3基础→概念理解,尤其是编程模型的理解4 GIC配置→如何配置GIC的各种寄存器,使其正常工作5 处理中断→讲解中断的处理流程6 LPI配置→理解ITS服务和基于消息的中断7 SGI中断→如何发送接收软中断8 虚拟化→如…

[gic]-ARM gicv3/gicv4的详细介绍-2020/08

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 gic目录 1、gic概念(1)、…