距上次88e1512的sgmii不穩定的問題已經過去好久,這幾天測試部發現sgmii網口偶爾會出現丢包現象,裝置是做過EMC測試(靜電,群脈沖,浪湧)的,經硬體工程師排查EMC實驗造成phy損壞的機率很低,但是裝置上下電網線插着時出現CRC錯誤/丢包的很容易出現,終端裡面一直會列印如下錯誤資訊,
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL3FFVOFTQq1keNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2cTM3MDO0kDMzAzNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
看datasheet想做一下環路測試以判斷是實體層一側傳輸就有問題還是軟體處理這邊有問題,
設定了這個寄存器值接下去不知道怎麼搭建測試環境,經同僚提醒可以用ethool工具直接進行環路測試,但是需要網卡驅動封裝完善,才能支援ethtool對網卡的自檢功能。參照https://www.cnblogs.com/imapla/p/4575621.html
很遺憾我直接輸入ethtool -t eth2 online就輸出不支援的資訊,看來drivers/net/phy/marvell.c這個驅動封裝不夠完善。
隻能再看datasheet,看關于sgmii寄存器配置,發現第一頁的第26個寄存器有對于sgmii接口電平的配置,
在驅動中将該寄存器列印出來是預設值0x42,初始化的時候沒有對其進行配置,猜測這個跟sgmii信号品質有關,于是将這個值設為0x47(700mV),在dts中修改入下
&mdio {
status = "okay";
phy0: [email protected] {
compatible = "marvell,88e1510";
reg = <0>;
};
phy1: [email protected] {
compatible = "marvell,88e1510";
reg = <1>;
marvell,reg-init = <0x01 0x1A 0x0 0x47>;
};
};
編譯後替換dtb,之後開關機測試幾十次沒有發現出現CRC錯誤丢包,至此問題解決。
其它裝置在未替換dtb之前沒有發現以上錯誤資訊。猜測是EMC實驗之後,使sgmii接口達到了某一個臨界值,在資料傳輸時容易出現CRC丢包錯誤。