写在前面:
1、本文参考来源PCIe 6.2,2024.02.25
2、仅作为个人学习记录和分享,转载请注明出处
3、个人能力有限,协议的理解均基于个人,如有错误还望指出
4、这里只介绍基本概念和行为
目录
一、传统复位
一般来说,PCIe包含四中复位,分别为Cold Reset、Warm Reset、Hot Reset和FLR,其中Cold Reset、Warm Reset、Hot Reset称为传统复位,FLR则为单独一类。
1.基本复位
传统复位中的Cold Reset和Warm Reset被称为基本复位。一般来说基本复位是由硬件实现的,将所有端口状态回复初始化的机制。
1.1 实现方式-触发条件
协议上允许两种实现方式,一种是通过PERST#的信号实现,另一种是组件或者adapter独立产生,一般这种情况是通过断电的方式实现的,但是不在协议规定范围内。
Cold Reset一般来说在上电后必须执行。Warm Reset的执行不需要重新上电。(6.2协议上有一个有意思的地方是,协议上表示没有指定Cold Reset或者Warm Reset的产生方法,但是基于一般的理解Cold Reset在PERST#驱动或者主电源断电的情况下是会触发的)
1.2 复位范围
所有寄存器和状态机必须回复为初始值,除了了sticky register
复位结束退出后,需要进行链路链路训练,一般来说链路上的两个组件都需要进行,链路训练之后进行VC0的流量控制初始化,从而使得数据链路层和事务层做好准备被操作(一般流量控制初始化完成后,TLP和DLLP就可以在链路间传递)
1.3 时间要求
一般来说链路速度在5.0GT/s以上的需要在基本复位结束后100ms内进入链路训练状态,5.0GT/s及其以下速度的,则在20ms内进入。
设备退出复位后的1.0s内,必须能够接收配置请求并返回配置成功的完成(如果请求有效的话)
2.Hot Reset
Hot Reset是一种带内可跨链路传播的传统复位,通过带内信号可进行触发实现。
2.1 实现方式-触发条件
协议中规定失效链路会导致下游组件经历Hot Reset(一般来说对Switch和Bridge生效)。
lane上连续接收到两个包含Hot Reset位置1的TS1序列集则会触发Hot Reset
2.2 复位范围
所有寄存器和状态机必须回复为初始值,除了了sticky register
2.3 时间要求
设备退出复位后的1.0s内,必须能够接收配置请求并返回配置成功的完成(如果请求有效的话)
二、FLR
FLR的全称位Function Level Reset,字面理解就是Function级别的复位,也就是说这种复位只针对目标Function进行操作。
1. 实现方式-触发条件
通过向Function Level Reset位写1来进行触发
2.复位范围
只影响目标Function,不影响链路状态,VC0保持初始化状态
Function寄存器和状态机回复到初始状态除了如下寄存器:
sticky-type register(ROS,RWS,RW1CS);寄存器属性为HwInit的寄存器;
在FM下,如下寄存器也不会被影响:
ARI Extended Capability寄存器中的ARI Control Register;L1 PM Substates Extended Capability寄存器;Latency Tolerance Reporting Extended Capability寄存器;Precision Time Measurement Extended Capability寄存器。
3. 时间要求
FLR必须在100ms内完成
如果失效completion超时的话,pre-FLR期间,设备最少等待时间为100ms(也就是等待request的completion的时间,这个前提是没有实现Readiness Notification)
4.一些限制和要求
会失效Bus Master使能、MSI使能等,从而让Function在链路上保持静默状态
启动FLR之前必须解复位所有INTX中断,在多功能设备下,只对目标设备生效
对于存在Transaction Pending位拉高情况下的Function,software不可以初始化Function,除非等待足够的时间后接收到对应的completion或者确定completion不会到来。
在设备收到FLR之后,允许目标Function清除所有transaction的状态,包括Transaction Pending位和Completion Timeout为初始值(这样所有penging transaction均会超时)。
Function必须在返回配置写请求的completion之后才能进入FLR
在FLR期间:如果接收到request,可以悄悄丢弃(流量控制Credit更新后),不记录或者标记为错误;如果接收到completion,可以处理为unexpected completion或者悄悄丢弃(流量控制Credit更新后),不记录或者标记为错误;如果在FLR时间限制后接收到配置请求后,Function必须返回RRS(Reuqest Retry Status)的completion
三、补充说明
1. Readiness Notifications
Readiness Notification是消息通知机制,其主要包括DRS(Device Readiness Status)和FRS(Function Readiness Status),简单理解就是用来通知Device或者Function的配置处于Ready状态,在这里进行补充介绍的原因是传统复位中,采用这种通知机制可以大大缩短复位后的等待时间。这里对其消息格式等不进行介绍,简单知道概念即可。
2. sticky register
寄存器属性,一般RWS-ROS-RW1CS属性的寄存器均为sticky register
3.Flit Mode
对支持FM的设备其被要求实现DRS(主要通过下游端口的Downstream Component Presence和Flit Mode Status寄存器域来指示)