GICv3 寄存器概述
GICv3(通用中断控制器版本3)为ARM架构提供了一套先进的中断管理框架。它针对大型系统支持、高效虚拟化和增强的中断分发机制引入了改进。以下是标准寄存器、它们的地址偏移以及常见用途或功能的概述。
技术背景
GICv3 是为了满足现代多核处理器系统中复杂的中断管理需求而设计的。与前代相比,GICv3 支持更多的中断,提供了更好的中断隔离和安全特性,以及对虚拟化环境的改进支持。它通过一系列的寄存器和配置选项,允许精细的控制和高效的中断处理,特别是在多核心和虚拟化场景下。
CPU接口寄存器
这些寄存器主要用于管理和处理定向到特定CPU的中断。
- ICC_SRE_EL1/EL2/EL3(系统寄存器启用)
- 偏移量:根据实现而变化
- 功能:启用或禁用系统寄存器接口以控制GIC。
- ICC_CTLR_EL1/EL3(控制寄存器)
- 偏移量:根据实现而变化
- 功能:控制中断行为,如优先级屏蔽和抢占。
- ICC_PMR_EL1(优先级掩码寄存器)
- 偏移量:根据实现而变化
- 功能:为处理器设置优先级掩码,过滤掉优先级较低的中断。
- ICC_IAR1_EL1(中断认领寄存器)
- 偏移量:根据实现而变化
- 功能:从此寄存器读取将认领优先级最高的待处理中断,并返回其ID。
- ICC_EOIR1_EL1(中断结束寄存器)
- 偏移量:根据实现而变化
- 功能:写入一个中断ID表明处理器已完成该中断的处理。
- ICC_IGRPEN1_EL1(中断组启用寄存器)
- 偏移量:根据实现而变化
- 功能:启用或禁用中断组。
分发器寄存器
分发器(Distributor)负责管理所有外设中断的分发,包括中断的启用、禁用、优先级设置和目标CPU的配置。
- GICD_CTLR(控制寄存器)
- 偏移量:0x0000
- 功能:控制GIC分发器的全局行为,例如启用或禁用中断分发。
- GICD_TYPER(类型寄存器)
- 偏移量:0x0004
- 功能:提供分发器支持的信息,包括中断数量和CPU接口数量。
- GICD_ISENABLERn(中断设置启用寄存器)
- 偏移量:0x0100 + (n * 0x20),n代表中断组
- 功能:通过设置相应位来启用特定的中断。
- GICD_ICENABLERn(中断清除启用寄存器)
- 偏移量:0x0180 + (n * 0x20),n代表中断组
- 功能:通过清除相应位来禁用特定的中断。
- GICD_IPRIORITYRn(中断优先级寄存器)
- 偏移量:0x0400 + (n * 4),n代表中断编号
- 功能:设置每个中断的优先级。
- GICD_ITARGETSRn(中断目标寄存器)
- 偏移量:0x0800 + (n * 4),n代表中断编号
- 功能:指定中断的目标CPU处理器。
重分发器寄存器
重分发器(Redistributor)用于处理来自特定CPU的中断,特别是在多核心系统中,它提供了一种更高效的中断管理方式。
- GICR_CTLR(重分发器控制寄存器)
- 偏移量:特定于实现
- 功能:控制重分发器的行为,如启用或禁用局部中断。
- GICR_IIDR(实现者识别寄存器)
- 偏移量:特定于实现
- 功能:提供关于重分发器实现的信息。
- GICR_TYPER(类型寄存器)
- 偏移量:特定于实现
- 功能:标识重分发器的特性,例如支持的中断和处理器编号。
- GICR_STATUSR(状态寄存器)
- 偏移量:特定于实现
- 功能:提供重分发器的当前状态信息,如错误指示。