change_speed_revovery作为LTSSM中一个关键变量之一,本文记录下此变量的赋值过程,望各位指正.
从下面涉及到的状态可知,在recovery.speed下才会将changed_speed_recovery置1.
1.configuration.complete
当device支持的速率大于2.5G,configuration.complete状态会将change_speed_revovery置0.
2.recovery.speed
a.在speed状态下,如果是从rcvrcfg跳转过来,成功实现速率切换,链路工作在最高的声明速率,下一个状态是rcvrlock,且将changed_speed_recovery置1.如果是第一次进入speed,那么changed_speed_recovery的值之前应该为0.
b.
3.recovery.rcvrcfg
在rcvrcfg状态下,如果链路已经切换到共同速率,但是收到EIOS或者inferred electrical idle,那么需要跳转到speed状态(一端故障的场景,个人理解)
4.L0
5.reovery.rcvrlock
从L0进入reovery.rcvrlock那么changed_speed_recovery会清0,此动作在L0执行.即在rcvrlock状态下不会设置changed_speed_recovery的状态.
正常情况下,recovery.rcvrlock不会直接跳转到speed状态;只有当24ms超时才有可能跳转到speed状态. 在changed_speed_recovery为0,表明链路没有切换到协商的共同速率,且当前速率大于2.5G时,下一个状态是speed,从speed状态出去时要工作在2.5G.