PCIx系列之“PCIe总线复位”

本篇主要介绍PCIe总线的复位方式。


PCIe总线规定了两个复位方式:Conventional ResetFLR(Function Level Reset),而Conventional Reset又可以进一步分为两大类:Fundamental ResetNon-Fundamental ResetFundamental Reset方式包括ColdWarm Reset方式,可以将PCIe将设备中的绝大多数内部寄存器和内部状态都恢复成初始值;而Non-FundamentalReset方式为Hot Reset方式。


1、传统复位方式(Conventional)

传统的复位方式分为Cold、WarmHot ResetPCIe设备可以根据当前的设备的运行状态选择合适的复位方式,PCIe总线提供多种复位方式的主要原因是减小PCIe设备的复位延时。其中传统复位方式的延时大于FLR方式。使用传统复位方式时,Cold Reset使用的时间最长,而Hot Reset使用的时间最短。


1.1、Cold Reset

当一个PCIe设备的Vcc电源上电后,处理器系统将置该设备的PERST#信号为有效,此时将引发PCIe设备的复位方式,这种方式属于Fundamental ResetPCIe设备进行Clod Reset时,所有使用Vcc进行供电的寄存器和PCIe端口逻辑将无条件进入初始状态。但是使用这种方式依然无法复位使用Vaux(备用电源)供电的寄存器和逻辑,这些寄存器和逻辑只能在处理器完全掉电时彻底复位。



1.2、Warm Reset

PCIe的设备完成上电后,也可能重新进行Fundamental Reset,这种复位方式也被称为Warm ResetPCIe并没有定义Warm Reset的具体实现方式。


1.3、Hot Reset

PCIe设备出现某种异常时,可以使用软件手段对该设备进行复位。如系统软件将Bridge Control Register Secondary Bus Reset位置为1,该桥片将secondary总线上的PCIe设备进行Hot ResetPCIe总线将通过TS1TS2序列对下游设备进行Hot Reset

TS1TS2序列中包含一个Hot Reset位。当下游设备收到一个TS1TS2序列,而且Hot Reset位为1时,下游设备将使用Hot Reset方式进行复位操作。

Hot Reset方式并不属于Fundamental ResetPCIe设备进行Hot Reset方式时,也可以将PCIe设备的多数寄存器和状态恢复为初始值

同时,在PCIe总线中,如果需要对链路的Link Width进行改变时,也将会用到Hot Reset。具体的流程如下:

  1. Ensure the Link is in the L0LTSSM state.

  2. Program the 6-bit “Link ModeEnable” field of the “Port LinkControl Register” on page 732. This isused bythe LTSSM in DETECT.

  3. Programthe 9-bit “PredeterminedNumber of Lanes” field of the “Gen2 Control Register” on page 771. Thisindicatesto the LTSSM, the number of lanes to check for exiting from L2.IDLE orPOLLING.ACTIVE.

  4. Trigger a Hot Reset, by settingthe Secondary Bus Reset bit in the RC Bridge ControlRegister (of the Type 1 PCIConfiguration Space Header) to 1.

  5. Wait for 2 mS. The core’s LTSSMwill transition from L0 -> RCVRY -> HOTRESET.

  6. Clear theSecondary Bus Resetbit. The core’s LTSSM will transition from HOTRESET -> DETECT.


2、FLR(Function Level Reset)

除了传统的复位方式之外,PCIe总线还提供了FLR方式。系统软件通过填写某些寄存器,如synosysPCIeIP是可以通过配置PCI ExpressCapabilityDeviceControl Register的第16bit完成FLR。支持FLR方式的PCIe设备需要在其BAR空间中提供一个寄存器,当系统软件对该寄存器的Function LevelReset位写1时,PCIe设备将使用FLR方式复位PCIe设备的内部逻辑。FLR方式对PCIe设备是可选的。

在一个大规模的并行处理系统中,系统软件使用分区的概念管理所有硬件资源,包括处理器资源和所有IO资源,这些IO资源中通常会包含PCIe设备。在这种处理器系统中,任务在指定的分区中运行,当这个任务执行完毕后,系统软件需要调整硬件资源的分区。此时受到影响的PCIe设备需要使用FLR方式复位内部的逻辑,以免造成对新的分区的资源污染,并保护之前任务的结果。

PCIe设备使用FLR方式进行复位时,有些与PCIe链路相关的状态和寄存器并不会被复位:

  • Sticky Registers。与传统的复位方式相同,FLR方式不能复位这些寄存器,但是系统软件对部分Sticky Registers进行修改。当Vaux(备用电源)被移除后,这些寄存器中的保存的数据才会丢失。

  • HwInit类型的寄存器。在PCIe设备中,有效配置寄存器的属性为HwIint,这些寄存器的值由芯片的配置引脚决定,后者上电复位后从EEPROM中获取。ColdWarm Reset可以复位这些寄存器,然后从EEPROM中从新获取数据,但是使用FLR方式不能复位这些寄存器。

  • 此外,还有一些特殊的配置寄存器不能被FLR方式复位,如Max_Payload_Size、RCB和一些与电源管理、流量控制和链路控制直接相关的寄存器。

  • FLR方式不会影响LTSSM状态机。