1.3 支持的配置和兼容性
在 Armv8-A 中,EL2 和 EL3 是可选的,PE 可以支持一个、两个或都不支持这些异常级别。
然而:
• PE 要求EL3 支持安全和非安全状态。
• PE 需要EL2 来支持虚拟化。
• 如果未实施EL3,则只有一个安全状态。 此安全状态是安全状态或非安全状态。
GICv3 支持所有这些配置的中断处理,并根据 Arm® 架构参考手册 Armv8(针对 Armv8-A 架构配置文件)中描述的交互处理规则,在 AArch32 状态和 AArch64 状态下执行。
1.3.1 亲和路由配置
GICv3架构支持亲和性路由。 它为以下方面提供可选支持:
• 非对称配置,其中在非安全状态下启用关联路由,在安全状态下禁用关联路由。 这为安全的遗留环境提供了支持。
• 仅传统环境,其中安全状态和非安全状态都禁用关联路由。
1.3.2 系统寄存器配置
当启用关联路由以在两种安全状态下执行时,必须将 GIC 配置为使用系统寄存器访问来处理物理中断。 该体系结构不支持为安全状态启用关联路由,并且不支持为该安全状态配置系统寄存器访问。 以这种方式配置 GIC 会导致不可预测的行为。 当启用关联路由以在非安全状态下执行时,GIC 架构可选择支持虚拟中断的传统操作,即在 EL2 上执行的虚拟机管理程序的控制下,在非安全 EL1 上进行传统中断处理。
1.3.3 GIC控制与配置
许多 GIC 寄存器都有不同的形式,以允许有效的中断处理:
• 对于两种安全状态。
• 对于不同的中断组。
• 使用GICv3 的系统寄存器访问或传统操作的内存映射访问。
当启用系统寄存器访问时,GIC 架构的控制和配置由架构系统寄存器和定义 GIC 程序员模型的相关访问来处理。 更多信息请参见第 11 章程序员模型。
一些寄存器始终是内存映射的,而其他寄存器则使用 GICv3 中的系统寄存器访问,以及用于传统操作的内存映射访问。
表 1-1 显示了始终进行内存映射的寄存器。
短寄存器名称的前缀 寄存器
GICD Distributor registers
GICR Redistributor registers(a)
GITS ITS registers(b)
a. 每个 PE 的每个再分发器寄存器都有一份副本。
b. 一个实施中可以有多个 ITS。 每个 ITS 都有自己的 GITS 寄存器副本。
表 1-2 显示了针对传统操作进行内存映射的寄存器,但在启用系统寄存器访问时,这些寄存器被 GICv3 中的系统寄存器访问所取代。
短寄存器名称的前缀 寄存器
GICC Physical CPU interface registers
GICV Virtual CPU interface registers
GICH Virtual interface control registers
笔记
• 在非安全EL1 上执行的操作系统使用GICC_* 或GICV_* 寄存器来控制中断,并且不知道其中的差异。
• GICv3 中引入了GICR_* 和GITS_* 寄存器。
表 1-3 显示了启用系统寄存器访问时 GICv3 支持的寄存器。
短寄存器名称的前缀 访问的系统寄存器
ICC Physical CPU interface registers
ICV Virtual CPU interface registers
ICH Virtual interface control registers
Armv8 对虚拟化的支持以及 PE 运行时的异常级别决定了是否访问物理 CPU 接口寄存器或虚拟 CPU 接口寄存器。
有关寄存器名称以及影响使用哪个寄存器的因素的更多信息,请参阅第 11-197 页的 GIC 系统寄存器访问。
1.3.4 Armv8架构状态的引用
表 1-4 显示了与 GIC 一起使用或影响 GIC 操作的 Armv8 架构状态。
更多信息请参考Architecture Reference Manual, Armv8, for Armv8-A architecture profile.
1.3.5 没有传统操作的 GICv3
在不支持传统操作的实现中,关联路由和系统寄存器访问被永久启用。 这意味着相关的控制位是 RAO/WI。 表 1-5 显示了受此影响的寄存器字段。
如果支持安全虚拟化,这是唯一允许的配置。
1.3.6 具有传统操作的 GICv3
传统操作是与 GICv2 的有限向后兼容性的一种形式,允许使用 GICv3 的系统运行使用 GICv2 的代码,前提是该代码满足本节中描述的限制。 在 GICv3 中,传统操作是可选的。 请参阅第 13-814 页的中断和非对称配置的传统支持。
在支持传统操作的 GICv3 实现中,最多 8 个 PE(其对内存映射寄存器接口的单独支持是实现定义的)可用作给定 VM 内的物理或虚拟中断目标。 它是由实现定义的:
• 传统操作是适用于两种安全状态下的执行,还是仅适用于安全状态下的执行。
• 在非安全EL1 中执行时,传统操作是否仅在虚拟CPU 接口中可用。
在 GICv3 中,以下限制适用于传统操作:
• GICv2 功能GICC_CTLR.AckCtl 在GICv2 中已弃用,并且在GICv3 中不受支持。 相应地,即使在传统模式下,行为也如同 GICv2 中描述的 GICC_CTLR.AckCtl 位是 RAZ/WI。
笔记
在支持传统操作的 GICv3 实现中,当 GICV_CTLR.AckCtl 设置为 1 时,允许 VM 控制非安全中断。但是,Arm 不建议使用 GICV_CTLR.AckCtl。
• 不支持GICv2 配置锁定功能和关联的CFGSDISABLE 输入信号。
• 在EL2 上执行的管理程序只能控制正在执行EL2 软件的PE 的虚拟中断,而不能控制其他PE 上的虚拟中断。
对于传统操作,支持非对称配置,其中:
• 关联路由和系统寄存器访问在非安全状态和EL3 下启用。
• 关联路由和系统寄存器访问在Secure EL1 处被禁用。
这允许在安全 EL1 上运行的安全操作系统使用遗留功能,前提是它不配置非安全中断。
在安全状态下执行的 GICv2 软件可以使用 GICC_AIAR、GICC_AEOIR、GICC_AHPPIR 和 GICC_ABPR 来控制非安全状态下的中断。 非对称配置中没有等效的功能。