
On Tue, 16 Jun 2020 at 23:31, Tom Rini trini@konsulko.com wrote:
On Tue, Jun 16, 2020 at 11:21:08PM +0300, Vladimir Oltean wrote:
On Tue, 16 Jun 2020 at 23:10, Tom Rini trini@konsulko.com wrote:
On Tue, Jun 16, 2020 at 10:58:26PM +0300, Vladimir Oltean wrote:
Hi Tom,
On Tue, 16 Jun 2020 at 22:55, Tom Rini trini@konsulko.com wrote:
Hey all,
In commit 4346df3392c0 ("phy: atheros: Make RGMII Tx delays actually configurable for AR8035") we brought in changes to get in to line with upstream linux kernel support for this PHY and in turn deal with more "driver was wrong, DT was wrong too" changes. Now the problem I have is that ethernet on my Hummingboard doesn't work AND as far as I can tell, the DTB is correct and saying phy-mode = "rgmii-id" now not "rgmii". It also looks to match what's in v5.7 for the kernel. What do I need to do here next? Thanks!
-- Tom
Reverting 4346df3392c0 makes your interface work?
Yup.
What is the DTS path that your hummingboard uses?
Good question. Per board/solidrun/mx6cuboxi/mx6cuboxi.c: /*
- This is not a perfect match. Avoid dependency on the DM GPIO driver
- needed
- for accurate board detection. Hummingboard2 DT is good enough for
- U-Boot on
- all Hummingboard/Cubox-i platforms.
*/ so arch/arm/dts/imx6dl-hummingboard2-emmc-som-v15.dts is the base. But the board really is the original hummingboard platform. Thanks!
-- Tom
Does it work if you say PHY_INTERFACE_MODE_RGMII_ID here? https://gitlab.denx.de/u-boot/u-boot/-/blob/master/drivers/net/fec_mxc.c#L12...
No change. And to be clear, I bisect'd the issue down and at that commit, reverting it fixes ethernet. It doesn't revert cleanly (nor obviously to me) on master.
-- Tom
On master, the revert would look like this:
diff --git a/drivers/net/phy/atheros.c b/drivers/net/phy/atheros.c index 13f7275d1706..5ba639e8119f 100644 --- a/drivers/net/phy/atheros.c +++ b/drivers/net/phy/atheros.c @@ -124,6 +124,7 @@ static int ar8021_config(struct phy_device *phydev)
static int ar803x_delay_config(struct phy_device *phydev) { + int regval; int ret;
if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID || @@ -138,6 +139,10 @@ static int ar803x_delay_config(struct phy_device *phydev) else ret = ar803x_enable_rx_delay(phydev, false);
+ phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05); + regval = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e); + phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, (regval|0x0100)); + return ret; }
The next thing to check is to print the value of phydev->interface there. 7 is PHY_INTERFACE_MODE_RGMII, 8 is PHY_INTERFACE_MODE_RGMII_ID, 9 is PHY_INTERFACE_MODE_RGMII_RXID, 10 is PHY_INTERFACE_MODE_RGMII_TXID,
You want it to be 8.
Thanks, -Vladimir