GIC600AE功能安全
- 1.GIC600AE主要安全机制分布图:
- 2.Fault Management Unit
- 1.GIC block的错误如何上报到FMU?
- 2.汇总到FMU的错误如何上报?
- 3.Error Record format
- 4.Safety Mechanism
GIC600AE在原GIC600版本基础上增加了FuSa功能,所增加的FuSa特性都集成在GIC600外围,不会改变原GIC600的功能。
1.GIC600AE主要安全机制分布图:
GIC-600AE包含以下FuSa安全机制:
-
lockstep logic protection
通过添加duplication logic(重复冗余逻辑?)让相同的程序运行在两份相同的电路逻辑上,上图中每个GIC block都通过添加duplication logic(上图中蓝色部分)进行保护。 -
RAM protection
RAM为主逻辑(primary)和重复冗余逻辑(shadow)所共享,其通过SECDED ECC进行保护,其地址通过parity进行保护 -
AXI4-Stream interconnect protection
AXI4-Stream用于GIC block之间的连接,通过端到端的partial duplication(部分重复冗余?)进行保护。partial duplication指的是主互联逻辑中的payload data使用一种压缩CRC进行保护,在这里使用一个8bit的CRC对payload data进行保护。 -
AMBA 外部接口保护
所有外部接口都使用AMBA parity扩展进行保护,可以实现wire或buffer间点对点的保护。主要包括ACE-Lite,GIC Stream,Cross-Chip(CC)和外部APB接口 -
PPI SPI 中断源parity 保护
可选,若实现该保护机制,则每个PPI或SPI都有一个对应的parity bit。 -
P-channel and Q-channel protection
P-channel 和Q-channel通过parity保护 -
Systematic fault watchdog
GIC600AE内实现了一个基于PING-ACK机制的看门狗,在GIC Distributor中实现一个硬件机制,用于监测各组件是否正常工作,该机制以round-robin的方式ping其他GIC block,然后等待ACK响应。如果在指定的时间内没有接收到对应的响应,会上报fault。 -
Clock and resets
实现了两套clock和reset,主(primary)逻辑比重复冗余(redundant)逻辑早运行两个时钟。 -
Fault Management Unit
Fault Management Unit(FMU)位于GIC Distributor内,它负责处理其他GIC block安全机制产生的fault。FMU记录fault syndrome到Error Record中,同时通过Error Recovery Interrupt(ERI)和Fault Handing Interrupt(FHI)上报。同时还为每个安全机制提供fault injection和clearing功能。FMU通过APB接口与外部Safety Island进行通信。
2.Fault Management Unit
FMU是GICD的一部分,实现了以下功能:
1.实现了一组APB4接口,专门用于访问FMU error record和其他寄存器
2.将产生的Error(如果使能),路由到Safety Island
3.提供软件方法可以将GIC block中的Safety Mechanism打开或关闭
4.接收其他GIC block中Safety Mechanism所产生的error信号
5.维护每个GIC block的error record,用于软件检查,并提供有关错误源的信息
6.保留在功能复位期间的error record
7.为GIC block中Safety Mechanism的提供注错功能,从而使能软件错误恢复测试
1.GIC block的错误如何上报到FMU?
GIC600AE在每个GIC block内部都实现了多种安全机制Safety Mechanisms(SMs),防止产生随机瞬态或永久错误。每个SMs都会向它自己的GIC block发送error 信号,然后GIC block通过AXI4-Stream将error信号传递到GIC Distributor。
除了通过AXI4-Stream上报错误外,每个remote GIC block都有一个fmu_err_out输出信号用于指示在GIC block内部存在uncorrected error (corrected error不会拉起fmu_err_out,即使它被配置为report as uncorrected)。fmu_err_out信号必须与GICD的输入信号fmu_err_in相连(为remote GIC block到FMU提供error信号的冗余路径),remote GIC block保持fmu_err_in信号assert,直到错误恢复软件清除错误
2.汇总到FMU的错误如何上报?
当SMs监测到错误,它会转发到FMU,如果FMU使能,它会通过如下两个信号将中断上报到系统:
① Error recovery interrupt,fmu_err_int (ERI)
② Fault handling interrupt,fmu_fault_int (FHI)
通过配置FMU_ERRCTRL寄存器可以控制错误是通过ERI或FHI上报。将错误分组为这两类可能有助于将这些错误重定向到不同的错误恢复处理程序,或基于错误的临界性或在系统级别上已知的其他因素。
3.Error Record format
GIC600AE 所产生fault记录在FMU中的error records中,FMU为每个GIC block提供了一个error record。error record寄存器通过APB接口进行访问,Arm希望此处使用一个独立的复位信号,这样的话即使当GIC block需要复位时,error record也可以保持其状态。
GIC600AE 最多支持32个PPI block和8个ITS block,对于未使用到的PPI block和ITS block,其对应的record 寄存器为RAZ。FMU为每个GIC block都实现了一个error record,每个都通过一组Error Record寄存器进行控制:
FMU_ERR(n)FR
error record特征寄存器,表明该record所支持的特性,是否支持FDI和ERI和上报,如何控制等
FMU_ERR(n)CTLR
error record控制寄存器,用于控制要处理哪些中断类型,控制中断上报和记录是否使能
FMU_ERR(n)STATUS
error record状态寄存器,此寄存器指示与所记录的错误有关的信息。软件可以写入此寄存器,以清除FMU_ERRGSR报告的错误记录。
4.Safety Mechanism
每个GIC block内部都实现了多种Safety Mechanisms(SMs),下表中显示了每个GIC block所支持的SMs数量和对应的ID。
每个GIC block中都实现了多个SMs,通过如下寄存器实现对SM的控制:
FMU_SMEN
通过指定block id和SMID实现对特定SM的使能或关闭
FMU_SMINJERR
通过指定block id和SMID实现对特定SM的注错