094、 PCIE动态链路速度与宽度控制:一次深夜调试的启示
094、 PCIE动态链路速度与宽度控制:一次深夜调试的启示
凌晨两点,示波器上的眼图突然塌陷,链路训练反复失败。设备管理器里那个熟悉的黄色叹号再次出现——这是今年第三次遇到PCIE链路降速问题。上次是热插拔后链路宽度锁死在x1,上上次是系统休眠唤醒后速率卡在Gen2。今晚的问题更诡异:设备在Gen4模式下正常工作了半小时,突然自动降速到Gen1,系统日志里只有一句模糊的“链路训练错误”。
链路状态机:不只是理论
PCIE规范里那张链路状态转移图,很多工程师只是考前背一背。真正调试时才发现,LTSSM(链路训练与状态状态机)的每个状态转换都可能出问题。比如Recovery状态,当链路需要重新训练时,设备会进入这个状态。但有些芯片的Recovery定时器配置过于激进,稍微有点信号抖动就触发重训练,导致系统频繁降速。
// 某厂商参考代码里的配置 - 这里踩过坑pcie_cfg_write(dev,LTSSM_TIMER_CTRL,0xFAST_RECOVERY