提交 976c90b9 编写于 作者: S Simon Baatz 提交者: David S. Miller

mv643xx_eth: defer probing if Marvell Orion MDIO driver not loaded

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: NSimon Baatz <gmbnomis@gmail.com>
Acked-by: NFlorian Fainelli <florian@openwrt.org>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 404b8bed
......@@ -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;
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册