net: netcp: add support for phy with rgmii ids
[oweals/u-boot.git] / drivers / net / fec_mxc.c
index a14fe43a5b0aff1907fb29b5b8132201780bf306..84f010d80576457ddf2d9f6b67b8e002ab1396df 100644 (file)
@@ -1284,22 +1284,16 @@ static int fec_phy_init(struct fec_priv *priv, struct udevice *dev)
 {
        struct phy_device *phydev;
        int addr;
-       int mask = 0xffffffff;
 
        addr = device_get_phy_addr(dev);
-       if (addr >= 0)
-               mask = 1 << addr;
-
 #ifdef CONFIG_FEC_MXC_PHYADDR
-       mask = 1 << CONFIG_FEC_MXC_PHYADDR;
+       addr = CONFIG_FEC_MXC_PHYADDR;
 #endif
 
-       phydev = phy_find_by_mask(priv->bus, mask, priv->interface);
+       phydev = phy_connect(priv->bus, addr, dev, priv->interface);
        if (!phydev)
                return -ENODEV;
 
-       phy_connect_dev(phydev, dev);
-
        priv->phydev = phydev;
        phy_config(phydev);
 
@@ -1315,6 +1309,8 @@ static void fec_gpio_reset(struct fec_priv *priv)
                dm_gpio_set_value(&priv->phy_reset_gpio, 1);
                mdelay(priv->reset_delay);
                dm_gpio_set_value(&priv->phy_reset_gpio, 0);
+               if (priv->reset_post_delay)
+                       mdelay(priv->reset_post_delay);
        }
 }
 #endif
@@ -1474,6 +1470,15 @@ static int fecmxc_ofdata_to_platdata(struct udevice *dev)
                /* property value wrong, use default value */
                priv->reset_delay = 1;
        }
+
+       priv->reset_post_delay = dev_read_u32_default(dev,
+                                                     "phy-reset-post-delay",
+                                                     0);
+       if (priv->reset_post_delay > 1000) {
+               printf("FEC MXC: phy reset post delay should be <= 1000ms\n");
+               /* property value wrong, use default value */
+               priv->reset_post_delay = 0;
+       }
 #endif
 
        return 0;