Skip to content

Commit

Permalink
mv643xx_eth: defer probing if Marvell Orion MDIO driver not loaded
Browse files Browse the repository at this point in the history
When both the Marvell MV643XX ethernet driver and the Orion MDIO driver
are compiled as modules, the ethernet driver may be probed before the
MDIO driver.  Let mv643xx_eth_probe() return EPROBE_DEFER in this case,
i.e. when it cannot find the PHY.

Signed-off-by: Simon Baatz <gmbnomis@gmail.com>
Acked-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Simon Baatz authored and David S. Miller committed Mar 24, 2013
1 parent 404b8be commit 976c90b
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions drivers/net/ethernet/marvell/mv643xx_eth.c
Original file line number Diff line number Diff line change
Expand Up @@ -2681,7 +2681,7 @@ static struct phy_device *phy_scan(struct mv643xx_eth_private *mp,
}

/* Attempt to connect to the PHY using orion-mdio */
phydev = NULL;
phydev = ERR_PTR(-ENODEV);
for (i = 0; i < num; i++) {
int addr = (start + i) & 0x1f;

Expand Down Expand Up @@ -2812,11 +2812,17 @@ static int mv643xx_eth_probe(struct platform_device *pdev)
netif_set_real_num_tx_queues(dev, mp->txq_count);
netif_set_real_num_rx_queues(dev, mp->rxq_count);

if (pd->phy_addr != MV643XX_ETH_PHY_NONE)
if (pd->phy_addr != MV643XX_ETH_PHY_NONE) {
mp->phy = phy_scan(mp, pd->phy_addr);

if (mp->phy != NULL)
if (IS_ERR(mp->phy)) {
err = PTR_ERR(mp->phy);
if (err == -ENODEV)
err = -EPROBE_DEFER;
goto out;
}
phy_init(mp, pd->speed, pd->duplex);
}

SET_ETHTOOL_OPS(dev, &mv643xx_eth_ethtool_ops);

Expand Down

0 comments on commit 976c90b

Please sign in to comment.