Messages in this thread Patch in this message | | | From | Jian-Hong Pan <> | Subject | [PATCH] net: bcmgenet: Fix attaching to PYH failed on RPi 4B | Date | Mon, 21 Jun 2021 18:33:11 +0800 |
| |
The Broadcom UniMAC MDIO bus comes too late. So, GENET cannot find the ethernet PHY on UniMAC MDIO bus. This leads GENET fail to attach the PHY.
bcmgenet fd580000.ethernet: GENET 5.0 EPHY: 0x0000 ... could not attach to PHY bcmgenet fd580000.ethernet eth0: failed to connect to PHY uart-pl011 fe201000.serial: no DMA platform data libphy: bcmgenet MII bus: probed ... unimac-mdio unimac-mdio.-19: Broadcom UniMAC MDIO bus
This patch makes GENET try to connect the PHY up to 3 times. Also, waits a while between each time for mdio-bcm-unimac module's loading and probing.
Buglink: https://bugzilla.kernel.org/show_bug.cgi?id=213485 Signed-off-by: Jian-Hong Pan <jhp@endlessos.org> --- drivers/net/ethernet/broadcom/genet/bcmmii.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c index 5335244e4577..64f244471fd3 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c @@ -289,6 +289,7 @@ int bcmgenet_mii_probe(struct net_device *dev) struct phy_device *phydev; u32 phy_flags = 0; int ret; + int i; /* Communicate the integrated PHY revision */ if (priv->internal_phy) @@ -301,8 +302,22 @@ int bcmgenet_mii_probe(struct net_device *dev) priv->old_pause = -1; if (dn) { - phydev = of_phy_connect(dev, priv->phy_dn, bcmgenet_mii_setup, - phy_flags, priv->phy_interface); + /* Try to connect the PHY on UniMAC DMIO bus up to 3 times. + * Wait a while between each time for mdio-bcm-unimac module's + * loading and probing. + */ + phydev = NULL; + for (i = 1; i < 4 && !phydev; i++) { + netdev_info(dev, + "connect %s on UniMAC MDIO bus %d time", + priv->phy_dn->full_name, i); + phydev = of_phy_connect(dev, priv->phy_dn, + bcmgenet_mii_setup, + phy_flags, priv->phy_interface); + if (!phydev && i < 3) + msleep(500); + } + if (!phydev) { pr_err("could not attach to PHY\n"); return -ENODEV; -- 2.32.0
| |