Merge branch 'master' of https://gitlab.denx.de/u-boot/custodians/u-boot-spi
[platform/kernel/u-boot.git] / drivers / net / designware.c
index 2c5d956..c4fe40b 100644 (file)
@@ -480,18 +480,16 @@ static int _dw_free_pkt(struct dw_eth_dev *priv)
 static int dw_phy_init(struct dw_eth_dev *priv, void *dev)
 {
        struct phy_device *phydev;
-       int mask = 0xffffffff, ret;
+       int phy_addr = -1, ret;
 
 #ifdef CONFIG_PHY_ADDR
-       mask = 1 << CONFIG_PHY_ADDR;
+       phy_addr = CONFIG_PHY_ADDR;
 #endif
 
-       phydev = phy_find_by_mask(priv->bus, mask, priv->interface);
+       phydev = phy_connect(priv->bus, phy_addr, dev, priv->interface);
        if (!phydev)
                return -ENODEV;
 
-       phy_connect_dev(phydev, dev);
-
        phydev->supported &= PHY_GBIT_FEATURES;
        if (priv->max_speed) {
                ret = phy_set_supported(phydev, priv->max_speed);
@@ -677,10 +675,10 @@ int designware_eth_probe(struct udevice *dev)
        struct dw_eth_dev *priv = dev_get_priv(dev);
        u32 iobase = pdata->iobase;
        ulong ioaddr;
-       int ret;
+       int ret, err;
        struct reset_ctl_bulk reset_bulk;
 #ifdef CONFIG_CLK
-       int i, err, clock_nb;
+       int i, clock_nb;
 
        priv->clock_count = 0;
        clock_nb = dev_count_phandle_with_args(dev, "clocks", "#clock-cells");
@@ -753,13 +751,23 @@ int designware_eth_probe(struct udevice *dev)
        priv->interface = pdata->phy_interface;
        priv->max_speed = pdata->max_speed;
 
-       dw_mdio_init(dev->name, dev);
+       ret = dw_mdio_init(dev->name, dev);
+       if (ret) {
+               err = ret;
+               goto mdio_err;
+       }
        priv->bus = miiphy_get_dev_by_name(dev->name);
 
        ret = dw_phy_init(priv, dev);
        debug("%s, ret=%d\n", __func__, ret);
+       if (!ret)
+               return 0;
 
-       return ret;
+       /* continue here for cleanup if no PHY found */
+       err = ret;
+       mdio_unregister(priv->bus);
+       mdio_free(priv->bus);
+mdio_err:
 
 #ifdef CONFIG_CLK
 clk_err:
@@ -767,8 +775,8 @@ clk_err:
        if (ret)
                pr_err("failed to disable all clocks\n");
 
-       return err;
 #endif
+       return err;
 }
 
 static int designware_eth_remove(struct udevice *dev)