PCIe复位

写在前面:

1、本文参考来源PCIe 6.2,2024.02.25

2、仅作为个人学习记录和分享,转载请注明出处

3、个人能力有限,协议的理解均基于个人,如有错误还望指出

4、这里只介绍基本概念和行为


目录

一、传统复位

1.基本复位

1.1 实现方式-触发条件

1.2 复位范围

1.3 时间要求

2.Hot Reset

2.1 实现方式-触发条件

2.2 复位范围

2.3 时间要求

二、FLR

1. 实现方式-触发条件

2.复位范围

3. 时间要求

4.一些限制和要求

三、补充说明

1. Readiness Notifications

2. sticky register

3.Flit Mode


一、传统复位

  一般来说,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寄存器域来指示)

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值