PCI Express学习篇---物理层LTSSM(一) Recovery子状态介绍

声明:此文章为原创,转载请注明 转自https://blog.csdn.net/weixin_48180416/article/details/116462197

物理层逻辑子层包含用于链路训练的状态机(LTSSM)如下图所示,本篇详细介绍Recovery的子状态。

Recovery主要有以下几个子状态:

  • Recovery.RcvrLock
  • Recovery.RcvrCfg
  • Recovery.Speed
  • Recovery.Equalization
  • Recovery.Idle

其中,Recovery.Equalization将在下一篇博文详细介绍。

Recovery.RcvrLock


从L0,L0s,L1进入的第一个状态就是RcvLock。

进入Recovery的原因有以下几类:

1) 从L1状态退出回到L0,因为L1没有FTS序列不能像L0s一样快速回到L0,所以必须通过Recovery再回到L0;

2) 从L0s退出,需要的时间内FTS序列没能成功Lock(Bit Lock, Symbol Lock/Block Alignment)会进入Recovery;

3) 从L0进入Recovery:

  • 最初的到2.5GT/s的训练完成后,如果支持更高速率就会进入Recovery;
  • 请求速率改变或link宽度的改变(一种为了省功耗,例如x16配置为x1,在L0状态的x1甚至比L0s下的x16更加省功耗,另外一种是目前的速率或link宽度不可靠unreliable);
  • 软件设置Link Control Register.Retrain Link(为了清除传输问题);
  • 链路层REPLAY_NUM rollover, PHY层Retrain Link;
  • Link partner进入Recovery状态而收到TS1或TS2;
  • Receiver所有的Configured Lane进入Electrical Idle(2.5GT/s时是电压阈值,5GT/s时是128us没收到FC Update DLLP或可选的SKP)但是没有事先收到EIOS.

RcvrLock状态的功能: 发送TS1重新Lock, TS1中的Link Num和Lane Num与Configuration状态下的需要一致。还有其他的一些功能:

  • 5GT/s时可以TS1中选择-3.5dB/-6dB De-emphasis;
  • 选择Transmitter Voltage Magin;

链路的带宽包含两个方面:速率和link宽度

以下介绍Speed Change时LTSSM的状态,有助于更好的理解Recovery的子状态


LTSSM在Polling状态时交互TS1,TS1中包含Rate ID,表示支持的速率,2.5GT/s是必须支持的,在Rate ID字段中:

bit 6 ---“Autonomous Change”表示链路的带宽改变是由于Power Management,不是因为链路可靠性问题;

bit 7 ---"Speed change" USP用来请求speed change

Speed Change 方式一:USP发起的Speed Change(硬件自主发起)

Speed change必须有USP来发起,通过Recovery状态来完成,以2.5GT/s-->5GT/s速率改变为例(因为5GT/s不包含EQ,所以会简化这个过程)

1. RcvrLock:交互TS1

USP发起,USP的Directed Speed Change=1,LTSSM先进入RcvrLock,发送TS1(包含支持的速率,speed change=1)

DSP收到TS1后,LTSSM进入RcvrLock,由于TS1中的speed change=1故将其Directed Speed Change也设置为1,也发送TS1给USP

2. RcvrCfg: 交互TS2

当USP检测到回复的TS1,LTSSM进入RcvrCfg,USP发起TS2,TS2中Speed Change=1,如果不是因为链路可靠性问题进入Recovery的话,设置Autonomous Change=1

当DSP检测到TS2,LTSSM进入RcvrCfg,DSP也发送TS2给USP,但是Autonomous Change字段是保留字段。

3. Speed: 改变速率

每个Port交互了8个TS2后,双方知道下个状态应该进入Speed.

注:Link Status寄存器有两个状态位autonomous bandwidth status和bandwidth management status可以报状态也可以使能中断给软件,两个状态位区别:

bandwidth management是由于链路可靠性问题引起的带宽改变,而Autonomous不是。

Speed状态下,两个方向都进入Electrical Idle状态,并且改变速率。

4. RcvrLock and RcvrCfg: 再次进入TS1 TS2交互

当Speed状态timeout后,退出Electrical Idle,回到RcvrLock,重复1、2过程,但是不同的是TS1/TS2的Speed change=0

之后经过Idle子状态(发送Idle Symbols)后进入L0,完成Speed Change.

Speed Change 方式二:软件控制Speed Change

软件不能直接控制Speed Change过程,只能配置Link Control 2寄存器中的Target Link Speed来设置最高支持的速率,

然后设置Link Control寄存器Retrain Link,LTSSM从L0状态重新进入Recovery改变速率,跟上述过程一样。

如果不支持硬件自主改变速率,只采用软件控制的方式,设置Link Control 2寄存器中的Hardware Autonomous Disable=1

 

以下介绍Link Width Change时LTSSM的状态


LTSSM在Configuration.Complete交互TS2,TS2中包含Rate ID,与TS1不同的是:

bit 6 ---“Link Upconfigure Capability”表示Link Parner是否支持Link width变宽,如果不支持的话,Link width就只能变窄,最适合出现链路可靠性问题的情况。

Link width change由USP发起,从L0进入Recovery再经过Configuration状态后回到L0状态;

1. RcvrLock->RcvrCfg->Speed->RcvrLock->RcvrCfg:交互TS1,TS2

这个过程与Speed Change过程基本相同,唯一的不同是TS序列中的Speed change=0

2. Recovery.Idle:USP发TS1,其中Link Num, Lane Num改为PAD

DSP继续发送Idle Symbols,USP不再发送Idle Symbols,而是发送包含Link Num=PAD, Lane Num=PAD的TS1,DSP收到后进入Config.Linkwidth.start。

3. Config.Linkwidth.start/accept, Config.Lanenum.wait/accept:交互TS1,确定active/inactive lane

Config.Complete:交互TS2,确认Link Num/Lane Num

Config.Linkwidth.Start

   1. DSP发送TS1, 其中Link Num为Link width改变之前协商好的Link Num, Lane Num=PAD;

   2. USP回复TS1, Link Num=PAD(inactive)或Link Num(active);

Config.Linkwidth.Accept

   3. DSP收到回复的TS1,进入Config.Linkwidth.Accept状态;

Config.Lanenum.Wait

   4. DSP发送TS1, 其中 Link Num=PAD(inactive)或Link Num(active), Lane Num=PAD(inactive)或Lane Num(active);USP回复相同的TS1;

Config.Lanenum.Accept

   5. DSP收到回复的TS1,进入Config.Lanenum.Accept状态;

   6. DSP检测到Autonomous Change=1,更新autonomous bandwidth status,进入Config.Complete状态;

Config.Complete

   7. 对于Active Lane交互TS2,这个时候的TS2包含““Link Upconfigure Capability”信息,inactive lane进入Electrical Idle;

   8. DSP收到回复的TS2进入Config.Idle,发Idle symbols,USP回复同样的Idle Symbols,然后双方进入L0

本篇总结


Speed Change状态跳转:RcvrLock->RcvrCfg->Speed->RcvrLock->RcvrCfg->Idle->L0

Link Width Change状态跳转: RcvrLock->RcvrCfg->Speed->RcvrLock->RcvrCfg->Idle->

Config.Linkwidth.Start->Config.Linkwidth.Accept->Config.Lanenum.Wait->Config.Lanenum.Accept->Config.Complete->Config.Idle->L0

 

  • 11
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值