ARM IHI0069F GIC architecture specification (5)

Ch2 中断分配与路由

2.1 The Distributor and Redistributors

Distributor 为 SPI 提供路由配置,并保存所有关联的路由和优先级信息。

Redistributor 提供 PPI 和 SGI 的配置设置。

Redistributor总是在有限的时间内向 CPU 接口呈现具有最高优先级的待处理中断。

有关中断优先级的详细信息,请参阅第 4-65 页的中断优先级。

最高优先级的挂起中断可能会发生变化,因为:

• 先前的最高优先级中断已被ACK。

• 先前的最高优先级中断已被抢占。

• 先前的最高优先级中断被删除并且不再有效。

• 组中断启用已修改。

• PE 不再是 participating PE。 请参阅第 2-36 页的参与节点。

2.2 中断 ID 号

中断使用 ID 号 (INTID) 来标识。 GICv3 支持的 INTID 范围取决于具体设计,并根据以下规则定义的:

• 对于Distributor和Redistributor中支持的 INTID 位的数量:

--- 如果不支持 LPI,则Distributor中的 ID 空间限制为 10 位。 这与早期版本的 GIC 架构相同。

--- 如果支持 LPI,则 INTID 字段是在 14-24 位范围内实现定义的,如 GICD_TYPER 的寄存器描述中所述。

可以通过 GICR_PROPBASER 将Redistributor配置为使用比 GICD_TYPER 指定的更少的位。

• 对于ITS 中支持的INTID 位的数量:

--- 如果支持 LPI,则 INTID 字段由实现定义,范围为 14-24 位。

--- INTID 字段的大小由 GITS_TYPER.IDbits 定义。

必须对 ITS 进行编程,以便转发到Redistributor的中断位于该Redistributor支持的中断范围内,否则行为将无法预测。

• 对于CPU 接口中支持的INTID 位的数量:

--- GICv3 CPU 接口支持 16 位或 24 位 INTID 字段,选择由实现定义。 支持的物理中断标识符位数由 ICC_CTLR_EL1.IDbits 和 ICC_CTLR_EL3.IDbits 指示。

有效的 INTID 空间由 CPU 接口和Distributor中实现的大小控制。 将大于支持大小的 INTID 转发到 CPU 接口是一个编程错误。

未使用的 INTID 位是 RAZ。 这意味着任何受影响的位字段都是零扩展的。

表 2-1 显示了 INTID 空间如何按中断类型进行分区。

Arm 推荐的 PPI INTID 分配由服务器基本系统架构提供,请参阅 Arm® 服务器基本系统架构 (SBSA)。

GICv4 架构通过除了 INTID 空间之外还支持 vPEID,为每个 VM 提供了唯一的 INTID 空间。 有关虚拟化的详细信息,请参阅第 6-154 页的关于虚拟化的 GIC 支持,有关 vPEID 的详细信息,请参阅第 5-85 页的中断转换服务。

Arm 强烈建议对已实现的中断进行分组,以使用最低的 INTID 编号和尽可能小的 INTID 范围。 这减少了内存中必须实现且发现例程必须检查的关联表的大小。

Arm 强烈建议软件保留:

• INTID0 - INTID7 用于非安全中断。

• INTID8 - INTID15 用于安全中断。

2.2.1 特殊 INTID

GIC架构为特殊目的保留的INTID列表如下:

1020

GIC 返回此值以响应 EL3 处的 ICC_IAR0_EL1 或 ICC_HPPIR0_EL1 读取,以指示正在确认的中断是预计在安全 EL1 处处理的中断。 仅当 PE 使用 AArch64 状态在 EL3 执行时,或者当 PE 在 Monitor 模式下以 AArch32 状态执行时,才会返回此 INTID。

当 ICC_CTLR_EL3.RM == 1 时,也可以通过在 EL3 处读取 ICC_IAR1_EL1 或 ICC_HPPIR1_EL1 返回该值,请参阅第 13-818 页上的非对称操作和 ICC_CTLR_EL3.RM 的使用。

1021

GIC 返回此值以响应 EL3 处的 ICC_IAR0_EL1 或 ICC_HPPIR0_EL1 读取,以指示正在确认的中断是预期在非安全 EL1 或 EL2 处处理的中断。 仅当 PE 使用 AArch64 状态在 EL3 执行时,或者当 PE 在 Monitor 模式下以 AArch32 状态执行时,才会返回此 INTID。

当 ICC_CTLR_EL3.RM == 1 时,也可以通过在 EL3 处读取 ICC_IAR1_EL1 或 ICC_HPPIR1_EL1 返回该值,请参阅第 13-818 页上的非对称操作和 ICC_CTLR_EL3.RM 的使用

1022

该值仅适用于旧版操作。 有关详细信息,请参阅第 13-815 页上的特殊 INTID 1022 的使用。

1023

如果没有具有足够优先级的挂起中断可以向 PE 发出信号,或者如果最高优先级挂起中断不适合以下情况,则返回该值以响应中断确认:

• 当前安全状态。

• 与系统寄存器关联的中断组。

这些 INTID 不需要中断结束或停用。

有关使用特殊 INTID 的更多信息,请参阅以下寄存器的说明:

• ICC_IAR0_EL1。

• ICC_IAR1_EL1。

• ICC_HPPIR0_EL1。

• ICC_HPPIR1_EL1。

2.2.2 混合 INTD 大小的实现

实现可能会选择为 GIC 的不同部分实现不同的 INTID 大小,但须遵守以下规则:

• PE 可以实现16 位或24 位的INTID。

系统可能包含支持 16 位 INTID 的 PE 和支持 24 位 INTID 的 PE 的混合。

• Distributor 和 Redistributors必须全部实现相同数量的INTID 位。

• 在支持LPI 的系统中,分发器和所有再分发器必须实现至少14 位的INTID。

Distributor 和 Redistributors中实现的位数不得超过系统中任何 PE 上实现的最小位数。

由于中断可能针对任何 PE,因此每个 PE 必须能够接收再分发器可以发送的最大 INTID。 这意味着再分发器支持的 INTID 大小不能超过系统中每个 PE 支持的最小 INTID 大小。

• 在不支持LPI 的系统中,Distributor 和 Redistributors必须实现至少5 位的INTID,并且不能实现超过10 位的INTID。 对于 GIC 版本 3.1,可以实现不超过 13 位的 INTID。

• 在包含一个或多个 ITS 的系统中,ITS 可以实现任何值,最高可达并包括Distributor 和 Redistributors支持的位数,最低可达 14 位,这是支持 LPI 所需要的最少位数。

相关推荐
代码改变世界ctw15 天前
【Arm Cortex-X925】 -【第四章】-时钟和复位
arm开发·armv8·armv9·cortex-r
代码改变世界ctw2 个月前
Armv8/Armv9架构的学习大纲-学习方法-自学路线-付费学习路线
arm·trustzone·soc·芯片·armv8·armv9·周贺贺
CyberSecurity_zhang2 个月前
Armv8-R内存模型详解
mcu·armv8·内存模型·r52·memory model
Liangtao`2 个月前
[GICv3] 3. 物理中断处理(Physical Interrupt Handling)
armv8·gic·中断控制器·gicv3
eeblacksmith4 个月前
ARM IHI0069F GIC architecture specification (8)
armv8·gicv3
eeblacksmith6 个月前
ARM IHI0069F GIC architecture specification (3)
armv8·gicv3
代码改变世界ctw6 个月前
深度学习armv8/armv9 cache的原理
人工智能·深度学习·trustzone·optee·tee·armv8·周贺贺
屿小夏.6 个月前
Arm MMU深度解读
深度学习·arm·cache·mmu·armv8·armv9
cv工程师小智6 个月前
多核多cluster多系统之间缓存一致性概述
安全·缓存·arm·cache·tee·armv8·armv9