Pcie equalization 的过程可以调整发送端和接收端的 lane 的配置进而达到提升信号质量的目的。Equalization 从 Gen3(8.0GT/s) 开始引入。所有与 LTSSM 相关的lane,不管是否正在工作,只要能通过 Link Upconfig配置的lane都必须参与到 Equalization 过程中来。
如果没有设置跳过 Equalization,那么 Equalization 必须在第一次向 Gen3 或者更高速率进行 Link Training 时执行。LinkUp = 1b 时,组件必须已经按照Equalization的要求设置完毕。任何速率下,都不可以发起重复进行 Equalization 的请求,尽管有redo eq的情况存在。在 Equalization 过程中已经被双方认可的发送端关于 EQ 的设置,要被记录下来,以便于后续在8.0GT/s及更高速率下的操作。即使 Equalization 的过程已经结束,组件依然可以去优化接收端的设置,只要不会让链路变得不可靠或者进入 Recovery 状态即可。
链路 Equalization 的过程并不是所有的速率都需要做的,而且当所有链路组件在它们发出的Ts Ordered sets 或者 Modified Ts Ordered Sets 里面都已经公布不需要做 Equalization 时,可以完全跳过 Equalization。链路组件如果支持 32.0GT/s 或者更高速率时,可以选择在大于 5.0GT/s 的任意速率公布它不需要 Equalization (下简称EQ)。并且它可以依靠已经做过的 EQ 的设置进行工作或者在可靠操作下并不需要 EQ 。
PCIE6.0 Spec 里面 Table4-22 详细描述了Equalization过程的要求:
从Gen1/2 train Gen3的过程如下:
首先,EQ必须由Downstream port发起。DSP会通过8b/10b编码发送transmitter和receiver的preset value给USP。在向更高速率train之前,这些值会通过EQ TS2 在recovery config状态机下发送。8GT/s 的preset值会在
Lane Equalization Control Register Entry寄存器中获取。
达到更高速率后,需要做EQ,USP收到preset value后再通过Ts1传给DSP,保证两端用的是同样的EQ setting。DSP 也需要将带有preset value的Ts1发给USP。
如果需要redo Eq,DSP必须发起一次speed change,在recovery lock状态下通过EQ Ts1 通知USP自己想要在更高的速率下重做EQ。USP如果想要在更高速率下工作,在接受到speed_change=1的TS1后,在recovery状态下需要advertise这个更高的速率。
从Gen3 train Gen4,Gen4 train Gen5,Gen5 train Gen6
DSP在recovery config将transmitter 的 preset value用128/130b编码发给USP。
在过渡到需要EQ的更高速率之前,若速率协商已经完成,USP在recovery_config时,可以选择通过EQ TS2将初始的transmitter preset setting 发送给DSP。这些preset value是由具体的实施情况决定的。
当速率转换到更高速率后,USP会通过TS1发送它收到的preset value。如果DSP在recovery_config没有收到preset value,在速率切换到更高速率后,DSP会根据Equalization Control Register Entry来发送相应的preset value。
如果想要做redo eq, DSP必须在recovery lock的时候通过Equalization Redo bit置1 的TS1 OS通知USP它需要redo eq。USP收到speed_change 以及Equalization Redo bit为1的TS1 OS, 在recovery时需要advertise 这个速率。
从Gen1/2 train Gen5
从gen1/gen2 train到gen5的唯一可能性是Link支持by eq。需要将bypass capabilities reg置1,bypass disable reg置0。
从Gen1/2 train Gen6
不可行,Gen6的eq必须从Gen5发起
从当前速率向当前速率发起
这种情况只可以通过redo eq来实现,可以的情况有:Gen3 train Gen3;Gen4 train Gen4;Gen5 train Gen5。这种情况下,初始的preset value是上一次做Eq的时候记录的preset值。
Gen6不支持train Gen6。