【摘要】:PCIe设备进行Cold Reset时,所有使用Vcc进行供电的寄存器和PCIe端口逻辑将无条件进入初始状态。而PCIe总线将通过TS1和TS2序列对下游设备进行Hot Reset。系统软件填写某些寄存器时,PCIe设备将使用FLR方式进行复位。此时受到影响的PCIe设备需要使用FLR方式复位内部逻辑,以免造成对新分区的资源污染,并保护之前任务的运行结果。但是采用这种方式,与FLR方式相比,PCIe设备的初始化恢复时间较长。
PCIe总线规定了两大类复位方式,一种是传统的复位方式(Conventional Reset),另一种是FLR(Function-Level Reset)方式。
其中PCIe总线的传统复位方式由两大类组成,一个是Fundamental Reset,而另一个是Non-Fundamental Reset。Fundamental Reset方式包括Cold和Warm Reset方式,可以将PCIe设备中的绝大多数内部寄存器和内部状态都恢复成初始值;而Non-Fundamental Reset方式指Hot Reset方式。
1.传统复位方式
传统复位方式分为Cold、Warm和Hot Reset。PCIe设备可以根据当前设备的运行状态选择合适的复位方式,PCIe总线提供多种复位方式的主要原因是减小PCIe设备的复位延时。其中传统复位方式的延时大于FLR方式。使用传统复位方式时,Cold Reset使用的时间最长,而Hot Reset使用的时间最短。
当一个PCIe设备的Vcc电源上电后,处理器系统将置该设备的PERST#信号为有效,此时将引发PCIe设备的复位操作,PCIe总线将这种复位方式称为Cold Reset方式。Cold Reset无疑是一种彻底的复位方式,这种方式属于Fundamental Reset。PCIe设备进行Cold Reset时,所有使用Vcc进行供电的寄存器和PCIe端口逻辑将无条件进入初始状态。但是使用这种方式依然无法复位使用Vaux供电的寄存器和逻辑,这些寄存器和逻辑只能在处理器完全下电时才能被彻底复位。
当PCIe设备完成上电过程后,也可能重新进行Fundamental Reset,这种复位方式也被称为Warm Reset。PCIe总线并没有规定Warm Reset的具体实现方式。一个PCIe设备可以使用Watchdog逻辑,对该PCIe设备进行复位,这种方式就是Warm Reset的一种。Warm Reset也是一种Fundamental Reset。
除了Cold和Warm Reset方式外,PCIe总线还规定了另一种复位方式,即Hot Reset方式。当PCIe设备出现某种异常时,可以使用软件手段对该设备进行复位。如系统软件将Bridge Control Register的Secondary Bus Reset位置1时,该桥片将Secondary总线上的PCI/PCIe设备进行Hot Reset。对于PCI总线,当Secondary Bus Reset位置1时,Secondary总线将使用RST#信号对其下游的PCI设备进行复位。而PCIe总线将通过TS1和TS2序列对下游设备进行Hot Reset。
在TS1和TS2序列中包含一个Hot Reset位。当下游设备收到一个TS1和TS2序列,而且其Hot Reset位为1时,下游设备将使用Hot Reset方式进行复位操作。有关TS1和TS2序列的详细描述见第8.1.1节。除此之外当数据链路层向事务层报告DL_Down时,该设备也将进行Hot Reset。DL_Down状态的详细说明见第7.1.1节。
Hot Reset方式并不属于Fundamental Reset。PCIe设备进行Hot Reset方式时,也可以将PCIe设备的多数寄存器和状态恢复为初始值。
当PCIe设备完成传统复位方式后,经过一段延时后,将开始进行PCIe总线的链路训练,有关链路训练的详细说明见第8章。
2.FLR方式(www.chuimin.cn)
除了传统复位方式之外,PCIe总线还提供了FLR方式。系统软件填写某些寄存器时,PCIe设备将使用FLR方式进行复位。支持FLR方式的PCIe设备需要在其BAR空间中提供一个寄存器,当系统软件对该寄存器的Functin Level Reset位写1时,PCIe设备将使用FLR方式复位PCIe设备的内部逻辑。FLR方式对于PCIe设备是可选的,PCIe总线规范并没有定义FLR方式的具体实现过程,但是定义了FLR方式的适用范围。
在一个处理器系统中,如果某个PCIe设备出现故障时,系统软件需要停止这个PCIe设备的所有I/O操作。如一个PCIe网卡出现故障时,系统软件需要对这个PCIe网卡的“与PCIe相关”和“与网络部分相关”的逻辑复位,而Cold、Warm和Hot Reset无法复位“与网络部分相关”的逻辑。此时需要使用FLR方式合理复位这个网卡。有些不支持FLR方式的网卡,也可以使用传统方式复位“与网络部分相关”的逻辑。
在一个大规模并行处理器系统中,系统软件使用分区的概念管理所有硬件资源,包括处理器资源,和所有I/O资源,在这些I/O资源中通常会包含PCIe设备。在这种处理器系统中,任务在指定的分区中运行,当这个任务执行完毕后,系统软件需要调整硬件资源分区。此时受到影响的PCIe设备需要使用FLR方式复位内部逻辑,以免造成对新分区的资源污染,并保护之前任务的运行结果。
此外当系统软件初始化与某个PCIe设备相关的软件协议栈时,也可能需要使用FLR方式复位PCIe设备内部的逻辑。
由上文所示,PCIe设备使用的FLR方式与传统复位方式有所不同。但是对于一些不支持FLR方式的PCIe设备,也可以使用传统复位方式实现FLR方式。但是采用这种方式,与FLR方式相比,PCIe设备的初始化恢复时间较长。因为传统复位方式几乎复位了所有“与PCIe链路相关”的逻辑,而FLR方式仅复位部分“与PCIe链路相关”的逻辑。在PCIe总线中,链路训练与重训练的过程较长。
当PCIe设备使用FLR方式进行复位时,有些与PCIe链路相关的状态和寄存器并不会被复位,如下所示。
●Sticky Registers。与传统复位方式相同,FLR方式也不能复位这些寄存器,但是系统软件可以对部分Sticky Registers进行修改。当Vaux被移除后,在这些寄存器中保存的数据才会丢失。
●HwInit类型的寄存器。在PCIe设备中,有些配置寄存器的属性为HwInit,这些寄存器的值由芯片的配置引脚决定,或者在上电复位后从E2PROM中获取。Cold和Warm Reset可以复位这些寄存器,然后从E2PROM中重新获取数据;但是使用FLR方式,不能复位这些寄存器。
●此外还有一些特殊的配置寄存器不能被FLR方式复位,如Max_Payload_Size、RCB和一些与电源管理、流量控制和链路控制直接相关的寄存器。
●FLR方式不会影响LTSSM状态机。
相关推荐