结合GIC芯片手册,计划分多次对GIC/ITS代码进行分析,加深对GIC/ITS代码的理解。

在分析代码之前,需要对GIC/ITS作简要介绍,包括GIC/ITS在系统中的位置,GIC/ITS硬件的介绍,中断类型等。

GIC即通用中断控制器,是ARM架构中中断产生的硬件;ITS即中断转换服务,是ARM架构中可产生LPI中断的硬件,是可选的,其作用相当于GICD。

1 GIC/ITS在系统中的位置

外设通过中断对CPU通知某些事件的完成。之前外设与中断控制器(GICD)通过线相连,通过中断线通知中断控制器,中断控制器将中断发送给某个CPU。

当控制器支持基于Message中断时,外设可以通过写某个内存让中断控制器(ITS)产生中断,并将中断发送给某个CPU。基于Message的中断节省了硬件空间,极大的增加了支持的中断数目。

2 GIC/ITS硬件介绍

对于GICv3,支持LPI中断,可以通过ITS产生LPI中断。

如下图中的GIC,包含如下部分:

  1. GICD,用于SPI中断的分发,它会将外设产生的SPI中断路由给对应的GICR
  2. ITS,用于LPI中断的产生,它的功能与GICD类似,只不过是针对LPI中断,可以将LPI中断路由给对应的GICR
  3. GICR,将收到的中断发往GICC,与GICC一一对应,PPI中断直接发送到GICR
  4. GICC,它为CPU接口,在CPU侧,与GICR一一对应,SGI中断由GICC产生

3 中断类型

GICv3定义了如下中断类型:

  1. SGI:软件产生中断,用于核间通信,通常通过写SGI寄存器产生,中断号为0-15。
  2. PPI:私有外设中断,目标为某个特定CPU的外设中断,如CPU的通用timer中断,中断号为16-31
  3. SPI:共享外设中断,可以路由到一个或一组CPU的共享外设中断,中断号31-1019
  4. LPI:Locality-specific外设中断,中断号8192以上。

4 GIC软硬件之间交互

对于GICD,软硬件之间的交互如下:

  1. GIC驱动通过寄存器访问对GIC(包括GICD和GICR)进行初始化并配置
  2. 外设与GICD相连,外设产生线中断,并发送给GICD,GICD通过配置将中断路由到对应的GICR

5 ITS软硬件之间交互

对于ITS,软硬件之间的交互如下:

  1. 外设写内存产生中断给ITS,外设写的内容包含device id和event id,device id用于标识设备,event id用于区分同一个设备不同的中断;
  2. ITS在内存中有三张表,Device table用于保存每个device对应的ITT中断转换表,ITT表用于保存设置event id与collection id的对应关系,Collection table用于保存collection id与GICR的对应关系,因此ITS通过这三张表可以知道将中断路由到哪个GICR即哪个CPU;
  3. ITS驱动或软件通过三种方式与ITS进行通信:通过直接访问ITS寄存器、通过访问或修改三张表、通过CMDQ队列。

6 软件框架

Linux中断框架大致如下:

(1)irq domain layer:用于为GIC/ITS分配irq domain,为不同外设分配中断irq desc,硬中断号与软中断号之间转换等;

(2)irq-gicv3为GICv3驱动,irq-gicv4支持GICv4驱动,irq-gicv3-its为ITS驱动;

(3)PCI设备和platform设备通过中断相关的API进行中断分配以及中断请求等;

(4)KVM通过vgic支持中断的虚拟化;

GIC/ITS代码分析(0)GIC/ITS框架介绍相关推荐

  1. GIC/ITS代码分析(1)MADT表

    MADT表以统一中断模型实现描述了系统中所有的中断.支持中断模型包括PC-AT兼容的双8259中断控制器,对于ARM处理器系统,GIC控制器. MADT格式如下所示: Field Byte Lengt ...

  2. [转]代码分析工具FxCop1.36之一:介绍与使用

    FxCop是一个代码分析工具,一种项目级别的代码分析工具:而微软内部代码检查工具 StyleCop属于代码级别.具体的区别可以在网上搜索到.这里主要说明一下FxCop的使用. FxCop使用可以分为 ...

  3. GIC/ITS代码分析(2)GICv3驱动初始化

    这里我们介绍GICv3驱动的基础框架,后续再介绍GICv4的支持.GICv3驱动在文件drivers/irqchip/irq-gic-v3.c中.同时仅介绍ACPI方式下GICv3驱动. 该驱动由宏I ...

  4. GIC/ITS代码分析(8)中断应用实例之SGI中断

    SGI中断也称IPI中断,即处理器间中断,一个处理器可以向其他处理器发送中断,以达到目标处理器执行某种事情. 如上所示,cpu0通过写GICD寄存器让cpu2上产生SGI中断. 在ARM64系统中,硬 ...

  5. GIC/ITS代码分析(13)LPI中断虚拟化之KVM中ITS设备的模拟

    1 ITS设备的注册 ITS设备和GIC设备通过函数kvm_register_device_ops()注册不同的操作函数,如下所示: 2 系统调用KVM_CREATE_DEVICE 在QEMU中会调用 ...

  6. GIC/ITS代码分析(4)中断的分配/映射及注册

    本章节分析常用的中断分配/映射及注册函数,对这个过程有个基本的理解.后续针对不同的中断使用实例作更详细介绍. 1 中断的分配/映射 它主要根据硬件中断号hwirq,分配virq,建立起映射,然后请求中 ...

  7. GIC/ITS代码分析(3)ITS驱动初始化

    这里对ITS再作简要介绍.在GICv3中,外设通过写GITS_TRANSLATER,根据所写内容解析出device_id和event_id,根据device_id找到设备所对应的Device Tabl ...

  8. GIC/ITS代码分析(12)LPI中断虚拟化之QEMU中ITS设备的模拟

    QEMU中实现ITS设备模拟在文件hw/intc/arm_gicv3_its_kvm.c中实现.初始化如下: 过程如下: 定义ITS设备的具现化接口kvm_arm_its_realize(): 设备设 ...

  9. 使用2节点梁或梁/杆单元分析弹塑性梁或框架(python,有限元)

    第五篇 使用2节点梁或梁/杆单元分析弹塑性梁或框架 介绍 本程序属于第四篇的改进版,其中对构件能够承受的最大力矩进行了限制,随着结构上荷载的增加,形成塑性铰,结构会变得失稳,该程序目前仅限于荷载主导. ...

最新文章

  1. 如何将三万行代码从Flow移植到TypeScript?
  2. 马化腾内部分享:三个问题说透如何做产品
  3. VTK:相交线用法实战
  4. 机器学习库一:scikit-learn
  5. 基于 HTML5 WebGL 的民航客机飞行监控系统
  6. mix-blend-mode 属性
  7. 搜索文献_搜索参考文献?6个搜索小技巧,搞科研需知!
  8. Linux虚拟化技术KVM入门必看
  9. 朱松纯:三读《赤壁赋》,从人工智能的角度解读“心”与“理”的平衡
  10. 点阵字库制作和使用(一)
  11. matlab 积分函数曲线,matlab数值积分函数
  12. jmeter下载文件
  13. javascript html注释,javascript html注释
  14. [转]现代汉语词性分类
  15. 服务器pcb维修方法,电路板维修的方法与口诀
  16. php源码 拼车网顺风车_最新拼车网PHP源码整站打包—微信拼车+手机拼车+微信双终端+数据同步...
  17. python plc fx5u_三菱PLC的FX5U系列参数与定位点
  18. 基于单片机的多功能定时器
  19. ONES 解码:为何数字化是“超级工程”
  20. ubuntu20.04未找到Wi-Fi适配器

热门文章

  1. 信息与计算机,科学网—信息与计算机(1) - 姜咏江的博文
  2. AGV (Automated guided vehicle)基础(一) - AGV的导航种类
  3. 一年中有12个月,每个月的天数是不一样的,其中有7个月为31天称为大月,分别为1,3,5,7,8,10,12月, 有4个月为30天,称为小月,分别为4,6,9,11月,还有二月较特殊,平年的二月有28
  4. openjudge白细胞计数
  5. 阿里云服务器1核1G内存1M带宽能放几个网站及多少流量
  6. vue中Route和router、routes的关系
  7. Android 透明度数值对应表
  8. 【Matlab】MATLAB绘图
  9. ffmpeg加水印、logo等
  10. 开源SLAM方案评价与比较