Distribution and Routing of Interrupts

The Distributor and Redistributors

Distributor为SPIs提供路由配置,并保存所有相关的路由和优先级信息。
Redistributor提供PPI和SGI的配置设置。
Redistributor总是在有限的时间内向CPU interface呈现具有最高优先级的未决中断。
以下情况,最高优先级的pending中断可能会更改:

  • 已确认先前的最高优先级中断。
  • 先前的最高优先级中断已被抢占。
  • 先前的最高优先级中断被删除,不再有效。
  • 组中断启用已修改。
  • PE不再是参与PE。

INTIDs

使用ID号(INTID)识别中断。
对于Distributor和Redistributor中支持的INTID位数:

  • 如果不支持LPI,则分发服务器中的ID空间限制为10位。这与早期版本的GIC架构相同。
  • 如果支持LPI,则INTID字段在14-24位范围。

对于ITS中支持的INTID位数:
-如果支持LPI,则INTID字段在14-24位范围内。
-INTID字段的大小由GITS_TYPER.IDbits定义。

必须对ITS进行编程,以使转发到Redistributor的中断处于该Redistributer支持的中断范围内,否则行为是不可预测的。

对于CPU interface中支持的INTID位数:
GICv3 CPU接口支持16位或24位INTID字段,选择是支持的物理中断标识符位的数量由ICC_CTLR_EL1.IDbits和ICC_CTLR.EL3.IDbits表示。

在这里插入图片描述ARM建议的PPI INTID分配。
在这里插入图片描述

Special INTIDs

GIC架构为特殊目的保留的INTID列表如下:
1020: GIC响应于在EL3处读取ICC_IAR0_EL1或ICC_HPPIR0_EL1而返回该值,以指示所确认的中断是预期在安全EL1处处理的中断。
1021:GIC响应于在EL3处读取ICC_IAR0_EL1或ICC_HPPIR0_EL1而返回该值,以指示所确认的中断是预期在非安全EL1或EL2处处理的中断。
1022:此值仅适用于旧操作。
1023:如果不存在具有足够优先级的未决中断以向PE发出信号,或者如果最高优先级未决中断不适合以下情况,则响应中断确认返回该值:

  • 当前安全状态。
  • 与系统寄存器关联的中断组。

Implementations with mixed INTD sizes

GIC的不同部分实施不同的INTID大小,遵循以下规则。

  • PE可以实现16位或24位INTID。
  • Distributor和Redistributors必须实现相同数量的INTID位。
  • 在支持LPI的系统中,Distributor和所有Redistributors必须实现至少14位的INTID。Distributor和Redistributors中实现的位数不得超过系统中任何PE上实现的最小位数。
  • 在不支持LPI的系统中,分发器和所有再分发器必须实现至少5位INTID,并且不能实现超过10位的INTID。
  • 在包含一个或多个ITS的系统中,ITS可以实现任何值,最高可达并包括Distributor和Redistributors支持的位数,最低为14位,这是LPI支持所需的最小位数。

Affinity routing

Affinity routing是一种基于分层地址的方案,用于识别用于中断路由的特定PE节点。
对于PE,AArch64的affinity value在MPIDR_EL1中,AArch32的affinity value在MPIDR中。

  • Affinity routing是由四个8位相关性字段组成的32位值。这些字段是节点a、b、c和d。
  • 使用AArch64状态的GICv3可以支持:
    四级路由层次结构,a.b.c.d。
    三级路由层次结构0.b.c.d。
  • 使用AArch32状态的GICv3仅支持三个关联级别。
  • ICC_CTLR_EL3.A3V、ICC_CTLR_EL1.A3V和GICD_TYPER.A3V指示是实现了四个级别还是三个级别的亲和性。

用于在关联层次结构中指定节点的枚举表示形式如下,Affinity level x : Aff3.Aff2.Aff1.Aff0
使用关联路由启用(ARE)位在分发服务器中启用安全状态的关联路由。已启用相关性路由:

  • 对于安全中断,如果GICD_CTLR.ARE_S设置为1。
  • 对于非安全中断,如果GICD_CTLR.ARE_NS位设置为1。
    如果永久启用关联路由,则GICD_CTLR.ARE_S和GICD_CTLCR.ARE_NS为RAO/WI。

Routing SPIs and SGIs by PE affinity

SPI使用affinity address和GICD_IROUTER中保存的routing mode信息来路由。
SGI使用软件在生成SGI时写入的affinity address和routing mode信息进行路由。
SGI使用以下寄存器生成:

  • ICC_SGI0R_EL1.
  • ICC_SGI1R_EL1.
  • ICC_ASGI1R_EL1.

ARM强烈建议在亲和级别0处仅使用0-15范围内的值,以符合SGI目标列表功能。
SPI和SGI使用不同的寄存器进行路由:
SPIs使用GICD_IROUTER.Interrupt_Routing_Mode路由。

  • 如果GICD_IROUTER.Interrupt_Routing_Mode为0,则SPI被路由到a.b.c.d指定的单个PE。
  • 如果GICD_IROUTER.Interrupt_Routing_Mode设置为1,则将SPI路由到定义为参与节点的任何PE。

SGI使用ICC_SGI0R_EL1.IRM和ICC_SGI1R_EL1.IRM进行路由:

  • 如果IRM位设置为1,则将SGI路由到系统中的所有参与PE,不包括发起PE。
  • 如果IRM位被清除为0,则SGI被路由到一组PE,由a.b.c.targetlist指定。目标列表为0-15的相关性级别0值提供位字段编码。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值