目录
一 PCIe定义的复位方式
PCIe总线规定了两大类复位方式,一类是传统复位(Conventional Reset)方式,另一类是FLR(Function-Level Reset)方式。
传统复位方式划分为两类,一个是Fundamental Reset,另一个是Non-Fundamental Reset。
PCIe提供多种复位方式的主要原因是减少PCIe设备的复位延时,其中传统复位方式的延时大于 FLR 方式。
1 Function-Level Reset
系统软件填写某些寄存器时,PCIe设备将使用 FLR 方式进行复位,此时PCIe设备需要在其BAR空间提供一个寄存器。在一个处理器系统中,如果某个PCIe设备出现故障时,系统软件需要停止这个PCIe设备的所有操作,此时就需要使用 FLR 方式合理复位这个设备。
当PCIe设备使用 FLR 方式进行复位时,有些与PCIe链路相关的状态和寄存器并不会被复位,从而节约了初始化恢复时间。
2 Fundamental Reset
Fundamental 复位方式包括Cold和Warm复位。
Vcc电源上电后,Cold Reset是一种彻底的复位方式,通过处理器系统置该设备的PERST#信号有效来实现,此时所有使用Vcc进行供电的寄存器和PCIe端口逻辑将无条件进入初始状态(non-sticky类
),但依然无法复位使用Vaux供电的寄存器和逻辑(sticky类
),这些寄存器和逻辑只能在处理器完全下电时才能被彻底复位。
PCIe设备完成上电过程后,进行的复位方式为Warm Reset,如Watchdog逻辑就是Warm Reset的一种。
值得注意的是,Cold复位的延时要大于Warm复位的延。
3 Non-Fundamental Reset
Non-Fundamental Reset方式又指Hot复位,等同于我们常说的link down。
当PCIe设备出现某种异常时,可以使用软件手段对该设备进行复位,这种方式就是Hot复位,该复位也可以将PCIe设备的多数寄存器和状态恢复初始值。
Hot复位的延时,在传统复位方式中所需的时间最少。
当PCIe设备完成传统复位后,经过一段时间延时后,将开始进行PCIe总线的链路训练。
二 sticky和non-sticky
我们知道,PCIe设备使用了两种电源信号供电,分别是Vcc和Vaux,其额定电压为3.3V。其中Vcc为主电源,PCIe设备的主要逻辑模块均使用Vcc供电,我们将这种供电的逻辑或寄存器划分为non-sticky类
;而一些与电源管理相关的逻辑则采用Vaux供电,我们将这种供电的逻辑或寄存器划分为sticky类
。
在PCIe设备中,使用Vaux的主要原因是为了降低功耗和缩短系统恢复时间。因为Vaux在多数情况下并不会被移除,因此当PCIe设备的Vcc恢复后,该设备不用重新恢复使用Vaux供电的逻辑,从而设备可以很快恢复到正常工作状态。
因此,sticky类型逻辑不会因为复位而发生改变(断电后的上电复位除外),即不会受到功能层复位(FLR)、热复位(Hot Reset)、暖复位(Warm Reset)的影响,甚至不会受冷复位(Cold Reset)的影响。