Marvell以太网PHY链路连通时无法获取眼图统计信息的问题求助
我之前调试Marvell PHY眼图功能时也碰到过一模一样的问题,给你分享几个实际试过的可行思路:
临时切换PHY到测试模式(不物理拔线)
很多Marvell PHY的眼图测量需要暂时退出正常链路工作状态,哪怕流量极低也会占用PHY的链路处理资源。你可以查对应型号的PHY datasheet,找到控制链路状态的寄存器,比如强制关闭自动协商、把PHY设置为“测试模式”而非正常链路模式,触发眼图测量完成后再恢复正常配置。我之前用88E1116的时候,就是通过写PHY_CONTROL和TEST_MODE寄存器实现的,整个过程几百毫秒,对正常流量影响几乎可以忽略。调整测试功能的优先级
部分Marvell PHY内部对正常链路流量和测试命令有优先级调度,你可以找找手册里有没有相关寄存器能提升测试请求的优先级。比如有些型号的EXTENDED_CONTROL寄存器里有测试模式优先级配置位,把它设为最高级后,PHY会优先响应眼图测量请求,即使有低流量也不会返回“busy”。在流量空闲窗口期触发测量
既然你的流量是15秒一次288字节,完全可以在两次数据包传输的间隙发起测量。可以在内核模块里通过监听网络设备的收发统计(比如记录最后一个数据包的时间戳),当判断处于空闲期时,再触发PHY的眼图测量命令。配合netif_carrier_ok()确认链路连通状态,就能在不影响正常通信的前提下拿到有效眼图数据。核对型号专属的测试流程
一定要仔细看你用的PHY型号的官方应用笔记,不同系列的Marvell PHY眼图测试流程差异很大。比如有些型号需要先锁定链路的训练状态,有些需要配置采样时钟偏移,还有些需要先关闭某些链路优化功能(比如均衡、纠错)才能启动测量。我之前踩过坑,就是没看应用笔记,直接按通用流程触发,结果一直返回busy。
备注:内容来源于stack exchange,提问作者Aleksandar

