变量
1.changed_speed_recovery:
表示链路双方已经将链路速率协商为更高的速率。
在configuration.complete状态下此变量会reset成0;
当前状态在recovery.rcvrlock状态:
在经过24ms的timeout之后,任何一个已经configured的lane(收到过TS1/TS2)收到了和自己发送的link/lane num匹配的TS1/TS2,并且速率自从进入recovery状态之后没有切到协商的速率后,下个状态是configuration状态,directed_speed_change也会被reset成0;
当前状态在recovery.speed状态:
如果tx在如下条件下(此时不在需要处于Electrical Idle),那么下一个状态是Recovery.RcvrLock状态。
(1)如果当前状态是从Recovery.RcvrCfg状态进入的,并且link的两侧均切速成功的话(速率是两侧协商的最高公共速率,successful_speed_negotiation = 1),那么changed_speed_recovery被设为1;
(2)没有速率成功切换的情况下,如果当前子状态是自从L0/L1进入recovery状态下第二次进入该状态(changed_speed_recovery = 1b),那么速率将会切到最初的从L0/L1进入recovery状态下的速率,changed_speed_recovery被设为0;
(3)否则其他情况下新的工作速率将是2.5GT/s,changed_speed_recovery被设为0;
当前状态在recovery.rcvrcfg:
在往Recovery.Idle状态跳转时,changed_speed_recovery,directed_speed_change变量需要reset为0(idle_to_rlock_transitioned小于’hff);
在往Configuration状态跳转时,changed_speed_recovery,directed_speed_change变量需要reset为0;
在往recovery.speed状态跳转时,如果当前速率自从L0/L1进入recovery状态没有切到双方协商的速率(changed_speed_recovery = 0b),并且EIOS已经被检测到了/Electrical Idle的条件在任意config的lane被检测到了,并且当前工作速率高于2.5GT/s,并且自从进入Recovery.RcvrCfg状态后没有config的lane收到了TS2,那么状态跳转到recovery.speed,注意此时changed_speed_recovery将会变为0;
2.direct_speed_change:
If greater than 2.5 GT/s data rate support has been noted, the Downstream Port must set the directed_speed_change variable to 1b if the Retrain Link bit of the Link Control Register is set to 1b and the Target Link Speed field in the Link Control 2 Register is not equal to the current Link speed. (l1也会存在)
3.successful_speed_negotiation
Recovery.Speed状态下,
Recovery.RcvrCfg状态下,会将其设为1;具体细节??
4.use_modified_TS1_TS2_Ordered_Set:
使用Modified TS1/TS2
5.Flit_Mode_Enabled
6.L0p_capable
7.SRIS_Mode_Enabled
8.upconfigure_capable:
支持带宽从小变大
9.idle_to_rlock_transitioned:
该变量记录了因为配置过程没有起作用,从而导致状态机从 Configuration.Idle 状态跳转到 Recovery 状态的次数。这可能是因为均衡设置不合适,或者当前选择的速率无法正常工作导致的,Recovery 状态内会采取措施尝试解决这些问题。该变量限制了从本状态跳转至 Recovery 状态的尝试次数,从而避免了永久的无限循环。如果链路在 256 次尝试后(变量计数至 FFh)仍然没法正常工作,那么跳转回 Detect 状态重新开始,并希望这次能有更好的结果。
10.start_equalization_w_preset:
为1表示使用预设值,这个变量仅仅在Recovery状态下使用:
(1)Recovery.Equalization: dsp进入phase1后start_equalization_w_preset设为0;usp进入phase0之后start_equalization_w_preset设为0;
(2)Recovery.RcvrCfg:
进入该子状态之后该变量reset为0;
对于usp来说,如果当前速率工作在2.5GT/s或者5.0GT/s下,8个TS2已经进行彼此之间的advertising(8.0 GT/s是支持的最高速率),那么必须要将start_equalization_w_preset设定为1,并且执行一些更新(这些更新包含:1. 用收到的连续的8个EQ TS2去更新更新tx的preset值,也就是Lane Equalization Control Register Entry寄存器中的域,2.用收到的连续的8个EQ TS2去更新8.0GT/s的Lane Equalization Control Register Entry中的Receiver Preset Hint fields);
对于usp来说,当前速率工作在2.5GT/s或者5.0GT/s下 -> 32.0 GT/s是支持的最高速率,并且equalization bypass to the highest NRZ rate在彼此之间已经协商成功(configuration阶段),那么start_equalization_w_preset设定为1,执行一些更新(仅更新tx preset,Lane Equalization Control Register Entry寄存器中的);
对于usp来说,当前速率工作在8.0GT/s下 -> 16.0 GT/s是支持的最高速率,收到的连续的TS2是128b/130b EQ TS2,那么start_equalization_w_preset设定为1,执行一些更新(仅更新tx preset,Lane Equalization Control Register Entry寄存器中的);
对于usp来说,当前速率工作在16.0GT/s下 -> 32.0 GT/s是支持的最高速率,收到的连续的TS2是128b/130b EQ TS2,那么start_equalization_w_preset设定为1,执行一些更新(仅更新tx preset,Lane Equalization Control Register Entry寄存器中的);
对于usp来说,当前速率工作在32.0GT/s下 -> 64.0 GT/s是支持的最高速率,收到的连续的TS2是128b/130b EQ TS2,那么start_equalization_w_preset设定为1,执行一些更新(仅更新tx preset,Lane Equalization Control Register Entry寄存器中的);
对于dsp来说,在如下条件之一满足的情况下,start_equalization_w_preset设定为1:
(1)equalization_done_8GT_data_rate 为0;
(2)彼此双方支持16.0 GT/s的速率,但是equalization_done_16GT_data_rate变量为0;
(3)彼此双方支持16.0 GT/s的速率,但是equalization_done_16GT_data_rate变量为0;
(4)彼此双方支持32.0 GT/s的速率,但是equalization_done_32GT_data_rate变量为0;
(5)彼此双方支持64.0 GT/s的速率,但是equalization_done_64GT_data_rate变量为0;
(6)link control3中的Perform Equalization bit被设定为1;
11.select_deemphasis:
a:detect.quit:The select_deemphasis variable must be set to either 0b or 1b based on platform specific needs for an Upstream Port and identical to the Selectable Preset/De-emphasis bit in the Link Control 2 Register for a Downstream Port.
b:recovery.speed:If the negotiated data rate is 5.0 GT/s, and if operating in full swing mode, -6 dB de-emphasis level must be selected for operation if the select_deemphasis variable is 0b and -3.5 dB de-emphasis level must be selected for operation if the select_deemphasis variable is 1b.
c:recovery.cfg:On entry to this substate, a Downstream Port must set the select_deemphasis variable equal to the Selectable De-emphasis field in the Link Control 2 Register or adopt some implementation specific mechanism to set the select_deemphasis variable, including using the value requested by the Upstream Port in the eight consecutive TS1 Ordered Sets it received. A Downstream Port advertising 5.0 GT/s data rate support must set the Selectable De-emphasis bit (Symbol 4 bit 6) of the TS2 Ordered Sets it transmits identical to the select_deemphasis variable.
Upstream Ports must register the Selectable De-emphasis bit (bit 6 of Symbol 4) advertised in these eight consecutive TS2 Ordered Sets in the select_deemphasis variable.
12.select_preset:仅仅用在Polling.Compliance状态中
13.equalization_done_8GT_data_rate
14.equalization_done_16GT_data_rate
15.equalization_done_32GT_data_rate
16.equalization_done_64GT_data_rate