]> git.sur5r.net Git - u-boot/blobdiff - drivers/net/fec_mxc.c
Merge git://www.denx.de/git/u-boot-imx
[u-boot] / drivers / net / fec_mxc.c
index 5f34c8fe3c6e22fde41aa50bd8d2874be51a41c5..f16b2990d7ce4c56c6a45983cd7c5775bcbe670c 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <asm/arch/clock.h>
 #include <asm/arch/imx-regs.h>
-#include <asm/imx-common/sys_proto.h>
+#include <asm/mach-imx/sys_proto.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -563,7 +563,7 @@ static int fec_init(struct eth_device *dev, bd_t *bd)
        writel(0x00000000, &fec->eth->gaddr2);
 
        /* Do not access reserved register for i.MX6UL */
-       if (!is_mx6ul()) {
+       if (!is_mx6ul() && !is_mx6ull()) {
                /* clear MIB RAM */
                for (i = mib_ptr; i <= mib_ptr + 0xfc; i += 4)
                        writel(0, i);
@@ -985,9 +985,18 @@ static void fec_free_descs(struct fec_priv *fec)
        free(fec->tbd_base);
 }
 
+#ifdef CONFIG_DM_ETH
+struct mii_dev *fec_get_miibus(struct udevice *dev, int dev_id)
+#else
 struct mii_dev *fec_get_miibus(uint32_t base_addr, int dev_id)
+#endif
 {
+#ifdef CONFIG_DM_ETH
+       struct fec_priv *priv = dev_get_priv(dev);
+       struct ethernet_regs *eth = priv->eth;
+#else
        struct ethernet_regs *eth = (struct ethernet_regs *)base_addr;
+#endif
        struct mii_dev *bus;
        int ret;
 
@@ -1023,6 +1032,7 @@ static int fec_probe(bd_t *bd, int dev_id, uint32_t base_addr,
        struct eth_device *edev;
        struct fec_priv *fec;
        unsigned char ethaddr[6];
+       char mac[16];
        uint32_t start;
        int ret = 0;
 
@@ -1085,12 +1095,18 @@ static int fec_probe(bd_t *bd, int dev_id, uint32_t base_addr,
        fec->phy_id = phy_id;
 #endif
        eth_register(edev);
+       /* only support one eth device, the index number pointed by dev_id */
+       edev->index = fec->dev_id;
 
-       if (fec_get_hwaddr(dev_id, ethaddr) == 0) {
-               debug("got MAC%d address from fuse: %pM\n", dev_id, ethaddr);
+       if (fec_get_hwaddr(fec->dev_id, ethaddr) == 0) {
+               debug("got MAC%d address from fuse: %pM\n", fec->dev_id, ethaddr);
                memcpy(edev->enetaddr, ethaddr, 6);
-               if (!getenv("ethaddr"))
-                       eth_setenv_enetaddr("ethaddr", ethaddr);
+               if (fec->dev_id)
+                       sprintf(mac, "eth%daddr", fec->dev_id);
+               else
+                       strcpy(mac, "ethaddr");
+               if (!env_get(mac))
+                       eth_env_set_enetaddr(mac, ethaddr);
        }
        return ret;
 err4:
@@ -1216,17 +1232,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);
@@ -1240,9 +1245,21 @@ static int fecmxc_probe(struct udevice *dev)
        }
 
        fec_reg_setup(priv);
-       fec_set_dev_name((char *)dev->name, dev_id);
        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:
@@ -1273,7 +1290,7 @@ static int fecmxc_ofdata_to_platdata(struct udevice *dev)
        struct fec_priv *priv = dev_get_priv(dev);
        const char *phy_mode;
 
-       pdata->iobase = (phys_addr_t)dev_get_addr(dev);
+       pdata->iobase = (phys_addr_t)devfdt_get_addr(dev);
        priv->eth = (struct ethernet_regs *)pdata->iobase;
 
        pdata->phy_interface = -1;