We have a custom board based on a LS1043A. It has 3 ethernet ports and phys on it. 1 is connected to mdio0 and it is RGMII the other two are SGMII connected to mdio1.
The 2 SGMIIs are working in both u-boot and linux.
The RGMII works in u-boot but only works in linux if it is prevented from resetting itself or reconfiguring itself in autonegotation in the marvell phy driver. Since autonegotiation succeeds in u-boot we are wondering why it does not in linux and if others have used the marvell phy (in our case 1512) with the ls1043a and dpa/fman etc.
For anyone else having this problem, the answer was a fix in the marvell phy driver (drivers/net/phy/marvell.c) the fix is in the mainline 4.15-rc2 kernel (and probably earlier ones as well). Basically in m88e1121_config_aneg() in the RGMII cases, don't mask off after reading the MII_88E1121_PHY_MSCR_REG, because it will be written back and some bits will get lost.
Thanks for sharing information.
I'm having trouble with the same Marvell PHY (1512) on RGMII of LS1043A rev1.1 custom board. In my case the port is working in u-boot with little data transfer but hangs and fails with timeout on large transfer. My u-boot port was based on SDK2.0-1703. I made a new port based on LSDK1806 and the RGMII port doesn't work at all. Could you please tell me which SDK you used? and SoC revision ?
SDK 2.0 1703. Soc rev 1.1.
I had to change the ls1043ardb.c file in board/freescale/ls1043ardb in order to accomodate our MDIO and phy differences on our custom board, too.