PCIE Link Equalizaton
1. 均衡概述
link均衡是用于通过调整tx rx的参数来提高信号质量, 所有有LTSSM关联的lane都需要进行均衡操作。均衡只有在低速率的均衡完成之后才可以进行后续高速度的均衡,虽然协议规定可以重复做均衡,但是还是不建议进行同意速率的重复多次均衡,链路两端的组件必须存储TX的参数并在后续更高的速度等级上使用它,同时组件也允许进行Receivr的细调(只要它不会导致link的稳定性,不会导致LTSSM进入Recovery)。
2. 均衡
均衡可以通过自动机制 或者 软件机制完成,协议非常建议采用自动机制完成均衡,然而对于那些没有参与自动均衡的组件必须要有软件进制进行控制。
自动均衡
只要链路两端均支持相同的速率(TS1 or TS2中通告),自动均衡才可以启动。在自动均衡完成之前,即便是处于L0阶段也不允许发送DLLP。 DSP会在链路宽度调整结束后,自动从L0跳转到 Recovery 先进行链路速度切换在进行链路均衡, USP也允许自发从L0跳转到Recovery。
DSP 捕捉到Eq存在错误, 或者USP请求进行redo requese (通过设置 TS2 OS
中的 Req Equalizaiton bit and Equalizaton Request Data Rate ), 必须完成重新均衡之后才可以进行下一个高速率的均衡。
使用自动均衡的组件不允许启动自动链路位宽降低的流程,DSP 必须等待均衡结束才可以进行DLLP发送,USP必须接收到DSP的DLLP才会进行DLLP发送。DSP可以根据自己的需求或者USP的请求选择时候进行均衡操作。
自动均衡
软件均衡必须确保当前时刻链路空闲,确保均衡操作不会对连续产生副作用。软件通过 写Perform Equalization bit 1 , 配置寄存器 Target link Speed, 最后对 Retrain Link bit 写 1, 完成均衡的启动。 软件均衡必须禁止 硬件自动位宽调整以确保链路处于full functional width, 对于那些已经进行链路位宽降低的lane,则必须在配置bit后的1ms内启动链路位宽的恢复流程。
如果当前工作在8G速率,则16G均衡必须斤西瓜。
3. 重新均衡
DSP 和 USP都允许使用 特定的方法对均衡流程进行问题检测。
- error导致 通过TS2 OS 发起均衡(USP DSP都可以发起均衡)。
当USP发现均衡存在问题,可以通过在Recovery.RcvrCfg阶段发送Requese Equalization bit 为1 Equalization Data Rate 为 desired rate 的 TS2 OS 来启动重新均衡流程。USP也允许使用 Quiesce Guaranteed 机制通告DSP可以进行重新均衡。 当 DSP在 Rcvrcfg状态 收到来自USP的重新均衡请求,它必须按照USP的均衡速率请求,并在1ms 完成 当前状态到 L0, 然后重新进入Recovery启动一次均衡流程。
当DSP发现均衡存在问题 ,它是通过请求USP发起一个重新均衡请求, 它也是在Rcvrcfg阶段配置 Requese Equalization bit & Equalization Data Rate, 告知USP你来发起一次重新均衡请求然后再如上所属开始一个新的均衡。
- 均衡问题导致降速,可通过在TS1 发起均衡(DSP发起)。
如果组件在通告均衡问题后,由于Recovery.speed超时或者发起向低速率切换操作,导致链路速率降低了。 如果当前时2.5G or 5G bps且准备做8G均衡, DSP则需要在Recovery.RcvrLock 阶段发送 EQ TS1 序列 告知USP我准备去进行“redo” 均衡, USP在rcvrcfg阶段通告8G速率(如果他想进行该速率的均衡流程)。 如果当前是 8G ,想做16G 的均衡,则需要在rcvrlock阶段发送 Equalization Redo =1 的 TS 序列, 如果USP同意本次均衡则需要在rcvrcfg阶段通告16G的速率。如果当前是2.5 or 5G, 又准备做16G均衡,则必须率先切换到8G(是否做均衡看链路需求。 )
注意在一次的RECOVERY状态只允许进一次均衡流程,言外之意均衡无论失败与否都需要回到L0 , 然后进入RECOVERY重新开始一次均衡。