先确定硬件上千兆网所用的时钟(一般为125MHz)是否正常。
若排除硬件问题,基本上是RXCLK和TXCLK的时延没有调好。根据交换机或phy的手册调整MAC端或phy端的RXC delay和TXC delay后可解决此问题。
比如楠菲的SF2507的RGMII2外挂了一颗phy芯片,phy网口可用百兆,但千兆用不了,经调整SF2507的RGMII2的RXC/TXC delay后解决。
--- a/kernel/drivers/net/ethernet/stmicro/stmmac/sf2507_l2sw/l2sw_switch.c
+++ b/kernel/drivers/net/ethernet/stmicro/stmmac/sf2507_l2sw/l2sw_switch.c
@@ -119,7 +119,7 @@ static void l2sw_rgmii_set(l2sw_uint8 units)
l2sw_setAsicReg(units, L2SW_REG_DIGITAL_INTERFACE2_FORCE, 0x1006);
l2sw_setAsicReg(units, L2SW_REG_DIGITAL_INTERFACE1_FORCE, 0x1016);
l2sw_setAsicReg(units, L2SW_REG_EXT1_RGMXF, 0x986);
- l2sw_setAsicReg(units, L2SW_REG_EXT2_RGMXF, 0x986);
+ l2sw_setAsicReg(units, L2SW_REG_EXT2_RGMXF, 0x965);^M
l2sw_setAsicReg(units, L2SW_REG_ECO_0_REG, 0x22);
l2sw_setAsicReg(units, 0x3b0c, 0x7);
l2sw_setAsicReg(units, 0x3b0d, 0x3);