GIC/ITS代码分析(0)GIC/ITS框架介绍

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

        这里增加入口快速到介绍的每节:

GIC/ITS代码分析(0)GIC/ITS框架介绍

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

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

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

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

GIC/ITS代码分析(5)exception处理流程

GIC/ITS代码分析(6)中断处理

GIC/ITS代码分析(7)中断应用实例之LPI中断

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

GIC/ITS代码分析(9)中断应用实例之PPI中断

GIC/ITS代码分析(10)中断应用实例之SPI中断

GIC/ITS代码分析(11)LPI中断虚拟化之概述

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

GIC/ITS代码分析(13)LPI中断虚拟化之KVM中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支持中断的虚拟化;

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
armv8和armv9是英国ARM公司推出的两个处理器架构,用于移动设备、嵌入式设备和服务器等领域。在这两个架构中,异常中断和GIC (Generic Interrupt Controller) 是非常重要的主题。 异常中断是指当系统发生某种事件时,处理器暂停当前任务,转而处理优先级较高的任务。异常中断包括两种类型:同步异常和中断异常。同步异常是由指令执行时产生的,如除零异常、非法指令异常等。中断异常是由外部事件触发的,如定时器中断、外设中断等。 在armv8和armv9架构中,异常的处理是通过异常向量表实现的。异常向量表是一个固定大小的表格,其中包含不同类型异常的处理函数的地址。当发生异常时,处理器会根据异常类型在异常向量表中查找相应的处理函数,并跳转到该函数执行异常处理。 GIC是一个用于处理中断的控制器,它负责管理和分发中断信号给相应的处理器核心。在多核处理器中,GIC可以实现中断的负载均衡和处理器间的中断共享。GIC具有多个中断输入通道,每个通道对应一个中断引脚。当外部设备发生中断时,通过相应的中断引脚将中断信号发送给GIC,然后GIC将中断信号分发给对应的处理器核心。 armv8和armv9架构中的GIC支持多种中断处理模式,包括中断屏蔽、中断优先级配置和中断传递方式等。GIC还可以实现中断的共享和抢占,以提高中断的处理效率和可靠性。 总而言之,armv8和armv9架构中的异常中断和GIC是处理器架构中非常重要的专题。通过学习异常中断的处理和GIC的功能,可以更好地理解和掌握armv8和armv9架构的中断处理机制,提高系统的可靠性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值