[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210621103310.186334-1-jhp@endlessos.org>
Date: Mon, 21 Jun 2021 18:33:11 +0800
From: Jian-Hong Pan <jhp@...lessos.org>
To: Doug Berger <opendmb@...il.com>,
Florian Fainelli <f.fainelli@...il.com>,
Stefan Wahren <stefan.wahren@...e.com>
Cc: bcm-kernel-feedback-list@...adcom.com, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org, linux@...lessos.org,
linux-rpi-kernel@...ts.infradead.org,
Jian-Hong Pan <jhp@...lessos.org>
Subject: [PATCH] net: bcmgenet: Fix attaching to PYH failed on RPi 4B
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@...lessos.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
Powered by blists - more mailing lists