Patchwork [(net.git),2/2] stmmac: mdio register has to fail if the phy is not found

login
register
mail settings
Submitter Giuseppe CAVALLARO
Date Feb. 7, 2013, 6:47 a.m.
Message ID <1360219672-27980-2-git-send-email-peppe.cavallaro@st.com>
Download mbox | patch
Permalink /patch/218827/
State Accepted
Delegated to: David Miller
Headers show

Comments

Giuseppe CAVALLARO - Feb. 7, 2013, 6:47 a.m.
With this patch the stmmac fails in case of the phy device
is not found; w/o this fix the mdio can be register twice when
do down/up the iface and this is not correct.

Reported-by: Stas <stsp@list.ru>
Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)
David Miller - Feb. 11, 2013, 1:12 a.m.
From: Giuseppe CAVALLARO <peppe.cavallaro@st.com>
Date: Thu,  7 Feb 2013 07:47:52 +0100

> With this patch the stmmac fails in case of the phy device
> is not found; w/o this fix the mdio can be register twice when
> do down/up the iface and this is not correct.
> 
> Reported-by: Stas <stsp@list.ru>
> Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>

Applied.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
index 0376a5e..0b9829f 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
@@ -188,8 +188,6 @@  int stmmac_mdio_register(struct net_device *ndev)
 		goto bus_register_fail;
 	}
 
-	priv->mii = new_bus;
-
 	found = 0;
 	for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
 		struct phy_device *phydev = new_bus->phy_map[addr];
@@ -237,8 +235,14 @@  int stmmac_mdio_register(struct net_device *ndev)
 		}
 	}
 
-	if (!found)
+	if (!found) {
 		pr_warning("%s: No PHY found\n", ndev->name);
+		mdiobus_unregister(new_bus);
+		mdiobus_free(new_bus);
+		return -ENODEV;
+	}
+
+	priv->mii = new_bus;
 
 	return 0;