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~15 SGI
16~31 PPI
32~1019 SPI 设备发出的中断
1020~1023 SPI 用于特殊目的
1024~1055 - 保留
1056~1119 PPI 扩展的PPI,GICv3.1才支持
1120~4095 - 保留
4096~5119 SPI 扩展的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开发点起的星星之火,也愿韦老师桃李满园。聚是一团火,散是满天星!

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



GICv3_LPI机制相关推荐

  1. Go语言的错误异常处理机制及其应用

    一.背景 在日常编写golang程序或阅读别人的golang代码时,我们总会看到如下的一堆代码块: xx, err = func(xx) if err != nil {//do sth. to tac ...

  2. 2022-2028年中国机制砂石行业投资分析及前景预测报告

    [报告类型]产业研究 [报告价格]¥4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国机制砂石行业市场行业相关概述.中国机制 ...

  3. c#打开数据库连接池的工作机制_数据库连接池-tomcat-jdbc使用笔记

    现在 主流的数据库连接池有:Proxool.C3P0.DBCP.tomcat-jdbc.Druid.其中tomcat-jdbc是tomcat服务器比较可靠的 数据库连接池. Tomcat 在 7.0 ...

  4. python异常机制

    python异常处理机制 1.1python的内置异常 当我们在运行代码的时候一旦程序报错,就会终止运行,并且有的异常是不可避免的,但是我们可以对异常进行捕获,防止程序终止. python的内置异常是 ...

  5. 【Sql Server】数据库的安全机制

     如何实现安全机制:从以下几个方面,但主要的途径是角色和授权的方面.掌握这些便可以很好的对数据进行保护! 安全机制 客户机 网传(加密) 实例(数据库服务器限制)-服务器角色 Windows OS 验 ...

  6. 各种注意力机制PyTorch实现

    给出了整个系列的PyTorch的代码实现,以及使用方法. 各种注意力机制 Pytorch implementation of "Beyond Self-attention: External ...

  7. pytorch中调整学习率的lr_scheduler机制

    pytorch中调整学习率的lr_scheduler机制 </h1><div class="clear"></div><div class ...

  8. Pytorch 多 GPU 并行处理机制

    Pytorch 的多 GPU 处理接口是 torch.nn.DataParallel(module, device_ids),其中 module 参数是所要执行的模型,而 device_ids 则是指 ...

  9. 机器翻译注意力机制及其PyTorch实现

    前面阐述注意力理论知识,后面简单描述PyTorch利用注意力实现机器翻译 Effective Approaches to Attention-based Neural Machine Translat ...

最新文章

  1. 主流浏览器新版本将不再支持TLS 1.0/1.1
  2. 【易创课堂·广州站】运营+融资+大数据,创业与技术坑点一步迈过
  3. 在Linux机器上配置NUD
  4. jquery获取html代码怎么写,jQuery从html代码中获取对应标签的写法
  5. ***CSS3 Gradient渐变色(转:http://www.w3cplus.com/content/css3-gradient)
  6. php5向下兼容php4吗,PHP5与PHP4的区别小议
  7. 虚幻引擎4.3发布:支持 iOS 8 的 Metal 图形 API
  8. JMETER badboy 录制脚本
  9. vue树形权限菜单_Vue.js 递归组件实现树形菜单(实例分享)
  10. 贪心算法及常见例子(附python实现代码)
  11. stm32 驱动步进电机
  12. 自动控制原理期末复习(Part3时域分析)
  13. 一款实用工具:免费短信验证码SDK
  14. [工作报告]转载:程序员绩效总结_年终总结怎么写?
  15. AJAX 提交表单以及文件上传
  16. 100多个常用的Python函数!(部分函数含代码解读)
  17. 通信协议-GMSL(千兆多媒体串行链路)
  18. 安卓禁止用户安装程序
  19. CF1325C Ehab and Path-etic MEXs
  20. SAP 屠夫解析物料主数据[转]

热门文章

  1. html页面打印插件,分享8款网站开发中最好用的打印页面插件
  2. Swift 语言的设计错误
  3. 2023年全国最新二级建造师精选真题及答案25
  4. 手机端上传照片压缩功能canvas
  5. python办公自动化价值是什么意思_办公自动化是什么意思,怎么实现?
  6. EduSoho开源网校系统源码(附安装教程、下载安装包),支持开源免费下载
  7. JavaScript实现公历转换农历
  8. 3D图形学一:模仿草的运动 – GPU(Pixel Shader Vertex Shader)实现
  9. poi 导出 word 表格样式
  10. math.h里的数学计算公式