【笔记】Arm CoreLink Generic Interrupt Controller v3 and v4 Overview

0.目录

1.概述

本文介绍:

  1. GICv3中断控制器的相关操作
  2. 如何在裸机环境下配置GICv3中断控制器

本文是_Arm CoreSight Generic Interrupt Controllers_相关指南的三部曲其一:

  • Arm CoreLink Generic Interrupt Controller v3 and v4: Overview (this guide)
  • Arm CoreLink Generic Interrupt Controller v3 and v4: Locality-specific Peripheral Interrupts
  • Arm CoreLink Generic Interrupt Controller v3 and v4: Virtualization

1.1 背景

GIC两个至关重要的作用:优先级排序和路由。

GIC可以提高处理器效率以及使能中断虚拟化。

GICs的实现基于Arm GIC架构。这个架构由GICv1发展到最新的 GICv3 和 GICv4 版本。Arm设计了若干通用中断控制器,向Arm Cortex多处理器系统提供一系列的中断管理方案。这些控制器的范围从用于CPU核数较少的系统的最简单的GIC-400到用于高性能和多芯片系统的GIC-600。GIC-600AE为高性能ASIL B系统增加了额外的安全功能。

看完本文,你将学会:

  • 不同类型的中断
  • 能够编写代码,使能FIC以及配置不同的中断类型

2.开始之前

本指南涵盖了GICv3和v4的基本操作,以及共享外围中断(spi)、私有外围中断(PPIs)和软件生成中断(SGIs)的使用。本文是对Arm Generic Interrupt Controller Architecture Specification GIC architecture version 3.0 and 4.0的补充。

GICv3和GICv4允许不同的配置和用例。为了简单起见,本指南集中于这些配置和用例的子集,其中:

  • 存在两种安全状态
  • 每一种安全状态的Affinity路由使能
  • 所有异常等级的系统寄存器访问使能
  • 处理器兼容Armv8-A,所有异常等级都实现且每种异常等级都使用AArch64

本文不包括:

  • Legacy operation
  • 使用AArch32

前置知识:异常模型

3.什么是通用中断控制器(Generic Interrupt Controller)

GIC处理来自外设的中断,根据优先级排序,将中断分发到合适的处理器核。下图显示了一个GIC接收来自n个不同外设的中断,并将它们分配给两个不同的处理器。

image-20210107203034828

GIC是Arm Cortex-A和Arm Cortex-R处理器的标准中断控制器。

3.1 Arm CoreLink GIC简史

主要特征
GICv1 支持8个处理单元
支持1020个中断号
支持两种安全状态
GICv2 所有GICv1的主要特征
支持虚拟化
GICv3 所有GICv2的主要特征
支持超过8个处理单元
支持消息信号中断
系统寄存器访问CPU接口寄存器
安全模型增强:分离了安全和非安全的Group 1中断
GICv4 所有GICv3的主要特征
直接注入虚拟中断

本文涵盖了Arm CoreLink GICv3和GICv4,它们被大多数Armv8-A和Armv8-R设计所使用。

版本小更新:

  • GICv3.1:
    • 增加了支持额外的有线中断,安全虚拟化和内存系统资源
    • 分区和监视(MPAM)
  • GICv4.1:
    • 扩展的虚拟化支持,包括直接注入虚拟软件生成的中断(SGIs)

4.Arm CoreLink GIC基本原理

在本节中,我们将看看Arm CoreLink GICv3和v4中断控制器的基本操作。

4.1 中断类型

GIC可以处理四种不同类型的中断源:

  • SPI:可以转发给任意相关的核
  • PPI:属于某个核私有。例如通用计时器
  • SGI(Software Generated Interrupt):典型用于处理器间通信。向GIC中的SGI寄存器写值将生成SGI。
  • LPI(Locality-specific Peripheral Interrupt)(不太懂):Arm CoreLink Generic Interrupt Controller v3 and v4: Locality-specific Peripheral Interrupts一文中介绍了LPI的配置

每个中断源都由一个ID号标识,这个ID号被称为INTID。上述列表中引入的中断类型是根据intid范围定义的:

INTID 中断类型 注释
0 - 15 SGIs Banked per PE
16 – 31
1056 – 1119 (GICv3.1)
PPIs Banked per PE
32 – 1019
4096 – 5119 (GICv3.1)
SPIs
1020 - 1023 特殊的中断号 详情见5.2
1024 - 8191 Reserved
8192~ LPIs 上线由具体厂家定义

4.1.1 中断如何通知中断控制器

传统上,中断使用专用硬件信号从外设发送到中断控制器,如下图所示:

image-20210107205949338

Arm CoreLink GICv3增加了一种信号机制:message-signaled interrupts (MSI)。MSI通过向中断控制器的寄存器写值发送。如下:

image-20210107210116115

通过消息发送中断,中断源无需专门的信号。

这两种发送中断的方式对于中断如何处理几乎没有影响。可能需要一些对外设的配置。例如,可能需要指定中断控制器的地址。外设的配置不在本文范畴之内。

Arm CoreLink GICv3中,SPI可以是message-signaled中断。LPI总是message-signaled中断。不同的寄存器用于不同的中断类型,如下所示:

中断类型 寄存器
SPI GICD_SETSPI_NSR 断言中断
GICD_CLRSPI_NSR解除中断
LPI GITS_TRANSLATER

4.2 中断状态机

中断控制器为每个SPI、PPI和SGI中断源维护一个状态机。这个状态机包含四个状态:

  • Inactive:中断源当前没有断言
  • Pending:中断源已经断言,但是没有PE接收。
  • Active:中断源已经断言,且已被PE接收
  • Active and Pending:一个中断已被接收,另一个中断在排队。

注意:LPIs有着类似的状态机。详情请查看6.2节。

状态机如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-syx4n2lg-1610113945096)(https://image-1304693124.cos.ap-shanghai.myqcloud.com/img/image-20210107213122412.png)]

中断的生命周期取决于它是被配置为电平触发还是边沿触发:

  • 对于电平敏感的中断,在中断输入上的上升边缘会导致中断成为挂起,并且中断被保持,直到外围设备解除中断信号。
  • 对于边缘敏感中断,在中断输入上的上升边缘会导致中断成为挂起,但是中断不会被保持。

4.2.2 边沿触发中断

下图显示了中断状态转换与中断信号的对应关系:

image-20210107214353752

依次考虑每个状态转换:

  • 从Inactive到pending:发生在中断源被断言的时候。如果中断使能且优先级适当,那么GIC就向PE断言了中断信号

  • 从Pending到active:发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值