GIC spec之ITS和LPI中断1

本章描述LPI和ITS。它包含如下部分:

  1. LPI
  2. ITS
  3. ITS命令
  4. 通用ITS伪功能
  5. ITS命令错误编码
  6. ITS电源管理

1 LPI

        LPI为基于信息的边沿触发中断,如果实现ITS,该中断可以使用ITS路由中断到特定Redistributor和相连的PE。GICv3提供支持两种类型的LPI。LPI可以通过两种方式支持:

  1. 使用ITS将设备的EventID转化为LPI INTID。
  2. 直接通过GICR_SETLPIR将LPI INTID发送给Redistributor。

实现必须只能支持两种方法中的一种。

NOTE: 在支持LPI但不包含ITS的实现中必须实现下列寄存器:

  1. GICR_INVLPIR
  2. GICR_INVALLR
  3. GICR_SYNCR

在包含ITS的实现中支持的寄存器由实现定义的。

在不包含ITS的系统中这些寄存器控制物理LPI:

  1. GICR_SETLPIR
  2. GICR_CLRLPIR

在包含ITS的实现中,至少支持8192 LPI中断。因为这个原因,每个中断的配置,每个中断的pending信息,保持在内存中,而不是在寄存器中,这些表由Redistributor中的寄存器所指向。

NOTE:(1)Arm期望实现可以缓存Redistributor中的表格的部分内容,这样可以减少延时和内存冲突。这些缓存的形式由实现定义;(2)LPI表的地址在非安全物理地址空间。

图5-1显示了至少包含一个ITS的实现中产生LPI中断。

 图5-2显示了不包含ITS的实现中LPI中断的产生。

 当GICD_CTLR.DS==0时:

  1. 当非安全状态的亲和性路由使能时仅支持LPI;
  2. LPI通常为非安全Group1中断;

当GICD_CTLR.DS==1时:

  1. 当亲和性路由使能时仅支持LPI;
  2. LPI通常为Group1中断;

只有一个全局物理LPI空间,因此LPI可以在所有Redistributor之间移动。软件使用GICR_PROPBASER.ID位对全局物理LPI空间的大小编程。

NOTE:物理LPI空间的大小受限于实现支持的最大大小,由寄存器GICD_TYPER.ID位定义。

对于给定Redistributor,LPI的配置和状态由内存中的两个表进行维护,在下列部分描述:

  1. LPI配置表;
  2. LPI pending表;

如果Redistributor支持物理LPI,它包含:

  1. 在LPI配置表中的LPI优先级和使能位。LPI配置表的地址由GICR_PROPBASER定义。当GICR_CTLR.EnableLPI==1时,如果GICR_PROPBASER被更新,影响不可预测。
  2. 在LPI pending表中内存后备的LPI pending位。该表为一个Redistributor特定的。由GICR_PENDBASER定义LPI pending表的地址。当GICR_CTLR.EnableLPI==1时,如果GICR_PROPBASER被更新,影响不可预测。

GICR_PROPBASER.ID位设置ID空间的大小,LPI配置表的entry数目,相对应的LPI pending表的数目。

物理LPI通过写GICR_CTLR.EnableLPI使能。

NOTE: 当Redistributor接口禁用LPI时,即GICR_CTLR.EnableLPI==0,LPI不能变成pending。在这种情况下无法将LPI变成pending,LPI丢失。这与SIG,PPI,SPI的禁用不一样,它仅阻止中断的信号发送到CPU接口。

GICv4引入处理虚拟中断的相对应表,它们的地址由GICR_VPROPBASER和GICR_VPENDBASER决定。

在GICv4中,虚拟LPI通过写GICR_VPENDBASER.Valid使能。

猜你喜欢

转载自blog.csdn.net/flyingnosky/article/details/124054975
GIC