net: fec_mxc: fix PHY initialization bug with CONFIG_DM_ETH
authorLothar Waßmann <LW@KARO-electronics.de>
Tue, 27 Jun 2017 13:23:16 +0000 (15:23 +0200)
committerStefano Babic <sbabic@denx.de>
Wed, 12 Jul 2017 07:44:22 +0000 (09:44 +0200)
When CONFIG_DM_ETH is set, the FEC ethernet controller is reset after
the PHY has been set up and initialzed. This breaks the communication
with the PHY and results in an inoperable ethernet interface.

Do the initialization with CONFIG_DM_ETH in the same order as with
legacy ETH support to fix this.

Signed-off-by: Lothar Waßmann <LW@KARO-electronics.de>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
drivers/net/fec_mxc.c

index 6840908fb2a382cd0d66b3b01fe1640c4eb94691..4ad4ddc86602adf87f8c1efdbc1d6edb18536817 100644 (file)
@@ -1223,17 +1223,6 @@ static int fecmxc_probe(struct udevice *dev)
        if (ret)
                return ret;
 
-       bus = fec_get_miibus((uint32_t)priv->eth, dev_id);
-       if (!bus)
-               goto err_mii;
-
-       priv->bus = bus;
-       priv->xcv_type = CONFIG_FEC_XCV_TYPE;
-       priv->interface = pdata->phy_interface;
-       ret = fec_phy_init(priv, dev);
-       if (ret)
-               goto err_phy;
-
        /* Reset chip. */
        writel(readl(&priv->eth->ecntrl) | FEC_ECNTRL_RESET,
               &priv->eth->ecntrl);
@@ -1249,6 +1238,19 @@ static int fecmxc_probe(struct udevice *dev)
        fec_reg_setup(priv);
        priv->dev_id = (dev_id == -1) ? 0 : dev_id;
 
+       bus = fec_get_miibus(dev, dev_id);
+       if (!bus) {
+               ret = -ENOMEM;
+               goto err_mii;
+       }
+
+       priv->bus = bus;
+       priv->xcv_type = CONFIG_FEC_XCV_TYPE;
+       priv->interface = pdata->phy_interface;
+       ret = fec_phy_init(priv, dev);
+       if (ret)
+               goto err_phy;
+
        return 0;
 
 err_timeout: