PCIe协议定义了四种类型的复位:冷复位、暖复位、热复位和FLR复位(Function Level Reset)。前三个是PCIe规范早期版本就已经定义的,称为传统复位(Conventional Reset)。PCIe 2.0规范新增的Function Level Reset称为功能级复位。
1. 传统复位(Conventional Reset)
传统复位包括Cold Reset、Warm Reset和Hot Reset这三种复位,其中Cold Reset和Warm Reset统称为基本复位(Fundamental Reset);而Hot Reset是非基本的复位方式,它是一种带内复位,来自上游设备,以包的形式通过链路向下游设备传达。
基本复位使设备的状态机、硬件逻辑、端口状态和配置寄存器初始化为默认状态,除了设备的从辅电源Vaux汲取电能的粘性(sticky)配置寄存器(它们在主电源关闭的情况下靠辅电源Vaux仍处于工作状态)。
1.1 冷复位
冷复位(Cold Reset)是指设备主电源打开后的结果,重启电源也会导致冷复位。
1.2 暖复位
暖复位(Warm Rest)是在系统电源稳定的情况下(即不关闭/重加主电源),由硬件触发的复位,比如压下复位按钮。这种复位触发系统电源电路的POWERGOOD信号,进而引发复位。PCIe规范并未明确规定暖复位的产生机制。
基本复位有以下两种生成的方法:
通过边带信号PERST#产生基本复位。PERST#(PCI Express复位,低有效)是PCIe系统中的一个边带信号,用来传递复位信号。
PCIe设备也可以不使用边带信号PERST# 来复位自己的电路,而设计成在检测到主电源加电(或重加电)的情况下自己产生基本复位信号复位自身电路。
下图是通过边带信号PERST# 产生基本复位的一个例子。
1.3 热复位
热复位也称为带内(In-band)复位,它不是由边带的复位信号产生的,而是通过发送TS1有序集在带内传播。热复位是由软件生成的复位,由上游向下游逐级传播,即只有根复合体RC和交换开关Switch能够产生热复位,端点不产生热复位。
当PCIe设备出现某种异常的时候,可以使用软件手段对该设备进行热复位。
软件通知热复位的方法:
软件欲在根复合体或交换开关某端口上生成热复位时,向该端口配置空间头标区中桥控制寄存器的次级总线复位(Secondary Bus Reset)位写1,就会在相应端口物理层上生成Assert Hot Reset 位为1的TS1有序集,并向下传送。
设备对热复位命令的响应:
当设备接收到热复位后,链路训练状态机LTSSM会先进入Recovery状态, 然后进入Hot Reset状态,然后回到Detect状态,并重新开始链路初始化训练。PCIe设备的所有状态机,硬件逻辑,端口状态和配置寄存器(除了Sticky寄存器)都将被初始化为默认状态。
2. FLR复位(Function Level Reset)
FLR复位机制使软件能够以Function粒度来复位PCIe Endpoint设备。FLR复位仅作用于PCIe设备中的目标Function,不会影响其他Function的正常工作。而且FLR也不会像Fundamental Reset那样对设备进行彻底的Reset,比如PCIe设备的链路状态就不会被复位,因此FLR所花的时间要比Fundamental Reset所花的时间少。
FLR复位的实现是可选的(不是必需的),但PCIe规范强烈建议使用。软件通过检查Device Capabilities Register[28]进行确认,bit[28]为1表示支持FLR。
软件可以向Device Control Register中的Initiate Function Level Reset bit写1,来产生FLR,该function必须在100ms内完成FLR复位。
FLR只复位对应Function的内部状态和寄存器(例如BME、MSI enable寄存器等),并不影响Sticky bits、有硬件初始化的值(Hardware-initialized bits)和链路专用寄存器。
PCIe协议规定FLR复位需要在100ms内完成。此外,PCIe协议要求软件进行FLR复位时需要满足如下要求:
1.软件与其他可能访问该function的软件进行协调,以确保它在FLR期间不会尝试访问。
2.软件清除整个command寄存器,从而使function停止发送任何新请求。
3.软件通过轮询Transactions Pending bit(在Device Status寄存器里)被清零来确保先前请求的完成报文已返回,或等待足够长的时间来确保完成报文不会返回。(如果正在使用完成超时,请等待超时时间后再发送FLR。如果禁用了超时,那么至少等待100ms)
4.软件启动FLR复位。
5.软件等待100ms。
6.软件重新配置Function,使其正常工作。
注:一旦FLR完成, Transaction Pending bit 必须被clear。Function必须为产生FLR的配置写返回一个completion响应,然后启动FLR复位操作。在FLR复位期间,接收到的完成报文被视为Unexpected Completions或者直接丢弃,既不记录也不报错。
参考:
PCI Express Base Specification Revision 5.0
PCI、PCI-X和PCI Express的原理及体系结构
276