YT8531(裕泰微phy芯片)必须强制百兆才能通信且过交换机不能通信的问题解决
问题现象:
- 板卡在boot环境下和电脑上位机进行ping通讯,只有上位机强制设置网络为百兆通信,两者才能ping通
- 上位机设置为自动协商则ping不通
- 板卡过交换机后即使上位机强制百兆也不能通信
解决思路:
-
首先考虑网络驱动代码里对mac控制器的自动协商的寄存器是不是已经配置了,然后检查了代码发现自动协商被配置好了
所以不是这个代码配置寄存器的问题
-
走读代码看到有一个自动协商超时的宏定义,考虑到是不是因为自动协商预留的时间太短,导致协商不成功,尝试增大超时时间
之后测试和上位机自动协商模式网络通信正常,插到交换机和上位机通信也是正常的。后查看代码发现是因为飞腾代码在初始化的时候检查自动协商的结果,也就是使用for循环去读取phy芯片的BMSR(basic mode status register)寄存器查看协商状态循环次数太少导致的,循环次数又是由FT_AUTONEG_TIMEOUT超时的宏定义直接计算得到的。所以就导致,协商还没完成,循环结束判定失败。
status = ft_phy_read_bmsr(ft); if (!(status & BMSR_LSTATUS)) { ft_phy_reset(ft, name); for (i = 0; i < FT_AUTONEG_TIMEOUT / 100; i++) { status = ft_phy_read_bmsr(ft); if (status & BMSR_LSTATUS) { /* * Delay a bit after the link is established, * so that the next xfer does not fail */ mdelay(10); break; } udelay(100); } }上位机设置成强制百兆之后能通是因为上位机强制百兆后强制板卡会跳过自动协商的步骤,直接按照强制百兆的速率进行link up
过了交换机强制百兆不通是因为,上位机只强制了交换机和电脑使用强制百兆跳过自动协商,但是交换机和板卡之间仍然是通过自动协商进行连接的,所以还是不通。
浙公网安备 33010602011771号