|
@@ -441,7 +441,7 @@ static int macb_mii_init(struct macb *bp)
|
|
|
snprintf(bp->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
|
|
|
bp->pdev->name, bp->pdev->id);
|
|
|
bp->mii_bus->priv = bp;
|
|
|
- bp->mii_bus->parent = &bp->dev->dev;
|
|
|
+ bp->mii_bus->parent = &bp->pdev->dev;
|
|
|
pdata = dev_get_platdata(&bp->pdev->dev);
|
|
|
|
|
|
dev_set_drvdata(&bp->dev->dev, bp->mii_bus);
|
|
@@ -3020,29 +3020,36 @@ static int macb_probe(struct platform_device *pdev)
|
|
|
if (err)
|
|
|
goto err_out_free_netdev;
|
|
|
|
|
|
+ err = macb_mii_init(bp);
|
|
|
+ if (err)
|
|
|
+ goto err_out_free_netdev;
|
|
|
+
|
|
|
+ phydev = bp->phy_dev;
|
|
|
+
|
|
|
+ netif_carrier_off(dev);
|
|
|
+
|
|
|
err = register_netdev(dev);
|
|
|
if (err) {
|
|
|
dev_err(&pdev->dev, "Cannot register net device, aborting.\n");
|
|
|
- goto err_out_unregister_netdev;
|
|
|
+ goto err_out_unregister_mdio;
|
|
|
}
|
|
|
|
|
|
- err = macb_mii_init(bp);
|
|
|
- if (err)
|
|
|
- goto err_out_unregister_netdev;
|
|
|
-
|
|
|
- netif_carrier_off(dev);
|
|
|
+ phy_attached_info(phydev);
|
|
|
|
|
|
netdev_info(dev, "Cadence %s rev 0x%08x at 0x%08lx irq %d (%pM)\n",
|
|
|
macb_is_gem(bp) ? "GEM" : "MACB", macb_readl(bp, MID),
|
|
|
dev->base_addr, dev->irq, dev->dev_addr);
|
|
|
|
|
|
- phydev = bp->phy_dev;
|
|
|
- phy_attached_info(phydev);
|
|
|
-
|
|
|
return 0;
|
|
|
|
|
|
-err_out_unregister_netdev:
|
|
|
- unregister_netdev(dev);
|
|
|
+err_out_unregister_mdio:
|
|
|
+ phy_disconnect(bp->phy_dev);
|
|
|
+ mdiobus_unregister(bp->mii_bus);
|
|
|
+ mdiobus_free(bp->mii_bus);
|
|
|
+
|
|
|
+ /* Shutdown the PHY if there is a GPIO reset */
|
|
|
+ if (bp->reset_gpio)
|
|
|
+ gpiod_set_value(bp->reset_gpio, 0);
|
|
|
|
|
|
err_out_free_netdev:
|
|
|
free_netdev(dev);
|