GIC/ITS代码分析(0)GIC/ITS框架介绍
结合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,包含如下部分:
- GICD,用于SPI中断的分发,它会将外设产生的SPI中断路由给对应的GICR
- ITS,用于LPI中断的产生,它的功能与GICD类似,只不过是针对LPI中断,可以将LPI中断路由给对应的GICR
- GICR,将收到的中断发往GICC,与GICC一一对应,PPI中断直接发送到GICR
- GICC,它为CPU接口,在CPU侧,与GICR一一对应,SGI中断由GICC产生
3 中断类型
GICv3定义了如下中断类型:
- SGI:软件产生中断,用于核间通信,通常通过写SGI寄存器产生,中断号为0-15。
- PPI:私有外设中断,目标为某个特定CPU的外设中断,如CPU的通用timer中断,中断号为16-31
- SPI:共享外设中断,可以路由到一个或一组CPU的共享外设中断,中断号31-1019
- LPI:Locality-specific外设中断,中断号8192以上。
4 GIC软硬件之间交互
对于GICD,软硬件之间的交互如下:
- GIC驱动通过寄存器访问对GIC(包括GICD和GICR)进行初始化并配置
- 外设与GICD相连,外设产生线中断,并发送给GICD,GICD通过配置将中断路由到对应的GICR
5 ITS软硬件之间交互
对于ITS,软硬件之间的交互如下:
- 外设写内存产生中断给ITS,外设写的内容包含device id和event id,device id用于标识设备,event id用于区分同一个设备不同的中断;
- ITS在内存中有三张表,Device table用于保存每个device对应的ITT中断转换表,ITT表用于保存设置event id与collection id的对应关系,Collection table用于保存collection id与GICR的对应关系,因此ITS通过这三张表可以知道将中断路由到哪个GICR即哪个CPU;
- 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框架介绍相关推荐
- GIC/ITS代码分析(1)MADT表
MADT表以统一中断模型实现描述了系统中所有的中断.支持中断模型包括PC-AT兼容的双8259中断控制器,对于ARM处理器系统,GIC控制器. MADT格式如下所示: Field Byte Lengt ...
- [转]代码分析工具FxCop1.36之一:介绍与使用
FxCop是一个代码分析工具,一种项目级别的代码分析工具:而微软内部代码检查工具 StyleCop属于代码级别.具体的区别可以在网上搜索到.这里主要说明一下FxCop的使用. FxCop使用可以分为 ...
- GIC/ITS代码分析(2)GICv3驱动初始化
这里我们介绍GICv3驱动的基础框架,后续再介绍GICv4的支持.GICv3驱动在文件drivers/irqchip/irq-gic-v3.c中.同时仅介绍ACPI方式下GICv3驱动. 该驱动由宏I ...
- GIC/ITS代码分析(8)中断应用实例之SGI中断
SGI中断也称IPI中断,即处理器间中断,一个处理器可以向其他处理器发送中断,以达到目标处理器执行某种事情. 如上所示,cpu0通过写GICD寄存器让cpu2上产生SGI中断. 在ARM64系统中,硬 ...
- GIC/ITS代码分析(13)LPI中断虚拟化之KVM中ITS设备的模拟
1 ITS设备的注册 ITS设备和GIC设备通过函数kvm_register_device_ops()注册不同的操作函数,如下所示: 2 系统调用KVM_CREATE_DEVICE 在QEMU中会调用 ...
- GIC/ITS代码分析(4)中断的分配/映射及注册
本章节分析常用的中断分配/映射及注册函数,对这个过程有个基本的理解.后续针对不同的中断使用实例作更详细介绍. 1 中断的分配/映射 它主要根据硬件中断号hwirq,分配virq,建立起映射,然后请求中 ...
- GIC/ITS代码分析(3)ITS驱动初始化
这里对ITS再作简要介绍.在GICv3中,外设通过写GITS_TRANSLATER,根据所写内容解析出device_id和event_id,根据device_id找到设备所对应的Device Tabl ...
- GIC/ITS代码分析(12)LPI中断虚拟化之QEMU中ITS设备的模拟
QEMU中实现ITS设备模拟在文件hw/intc/arm_gicv3_its_kvm.c中实现.初始化如下: 过程如下: 定义ITS设备的具现化接口kvm_arm_its_realize(): 设备设 ...
- 使用2节点梁或梁/杆单元分析弹塑性梁或框架(python,有限元)
第五篇 使用2节点梁或梁/杆单元分析弹塑性梁或框架 介绍 本程序属于第四篇的改进版,其中对构件能够承受的最大力矩进行了限制,随着结构上荷载的增加,形成塑性铰,结构会变得失稳,该程序目前仅限于荷载主导. ...
最新文章
- 如何将三万行代码从Flow移植到TypeScript?
- 马化腾内部分享:三个问题说透如何做产品
- VTK:相交线用法实战
- 机器学习库一:scikit-learn
- 基于 HTML5 WebGL 的民航客机飞行监控系统
- mix-blend-mode 属性
- 搜索文献_搜索参考文献?6个搜索小技巧,搞科研需知!
- Linux虚拟化技术KVM入门必看
- 朱松纯:三读《赤壁赋》,从人工智能的角度解读“心”与“理”的平衡
- 点阵字库制作和使用(一)
- matlab 积分函数曲线,matlab数值积分函数
- jmeter下载文件
- javascript html注释,javascript html注释
- [转]现代汉语词性分类
- 服务器pcb维修方法,电路板维修的方法与口诀
- php源码 拼车网顺风车_最新拼车网PHP源码整站打包—微信拼车+手机拼车+微信双终端+数据同步...
- python plc fx5u_三菱PLC的FX5U系列参数与定位点
- 基于单片机的多功能定时器
- ONES 解码:为何数字化是“超级工程”
- ubuntu20.04未找到Wi-Fi适配器
热门文章
- 信息与计算机,科学网—信息与计算机(1) - 姜咏江的博文
- AGV (Automated guided vehicle)基础(一) - AGV的导航种类
- 一年中有12个月,每个月的天数是不一样的,其中有7个月为31天称为大月,分别为1,3,5,7,8,10,12月, 有4个月为30天,称为小月,分别为4,6,9,11月,还有二月较特殊,平年的二月有28
- openjudge白细胞计数
- 阿里云服务器1核1G内存1M带宽能放几个网站及多少流量
- vue中Route和router、routes的关系
- Android 透明度数值对应表
- 【Matlab】MATLAB绘图
- ffmpeg加水印、logo等
- 开源SLAM方案评价与比较