[PATCH 2/2] mdiobus: do not scan the bus at registration time

Sascha Hauer s.hauer at pengutronix.de
Tue Oct 30 12:32:37 EDT 2012


Scanning the bus can take some time. If we do not need the ethernet
device, this is unnecessary, so delay the scan until the phy device
iactually is needed.

Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 drivers/net/phy/mdio_bus.c |   23 +----------------------
 drivers/net/phy/phy.c      |    4 ++--
 2 files changed, 3 insertions(+), 24 deletions(-)

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index 5025e3f..35319b4 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -36,7 +36,7 @@
  */
 int mdiobus_register(struct mii_bus *bus)
 {
-	int i, err;
+	int err;
 
 	if (NULL == bus ||
 			NULL == bus->read ||
@@ -59,29 +59,8 @@ int mdiobus_register(struct mii_bus *bus)
 	if (bus->reset)
 		bus->reset(bus);
 
-	for (i = 0; i < PHY_MAX_ADDR; i++) {
-		if ((bus->phy_mask & (1 << i)) == 0) {
-			struct phy_device *phydev;
-
-			phydev = mdiobus_scan(bus, i);
-			if (IS_ERR(phydev)) {
-				err = PTR_ERR(phydev);
-				goto error;
-			}
-		}
-	}
-
 	pr_info("%s: probed\n", dev_name(&bus->dev));
 	return 0;
-
-error:
-	while (--i >= 0) {
-		if (bus->phy_map[i]) {
-			kfree(bus->phy_map[i]);
-			bus->phy_map[i] = NULL;
-		}
-	}
-	return err;
 }
 EXPORT_SYMBOL(mdiobus_register);
 
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 88c3ff7..8d36300 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -154,7 +154,7 @@ int phy_device_connect(struct eth_device *edev, struct mii_bus *bus, int addr,
 
 	if (!edev->phydev) {
 		if (addr >= 0) {
-			dev = bus->phy_map[addr];
+			dev = mdiobus_scan(bus, addr);
 			if (!dev) {
 				ret = -EIO;
 				goto fail;
@@ -169,7 +169,7 @@ int phy_device_connect(struct eth_device *edev, struct mii_bus *bus, int addr,
 				goto fail;
 		} else {
 			for (i = 0; i < PHY_MAX_ADDR && !edev->phydev; i++) {
-				dev = bus->phy_map[i];
+				dev = mdiobus_scan(bus, addr);
 				if (!dev || dev->attached_dev)
 					continue;
 
-- 
1.7.10.4




More information about the barebox mailing list