]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - drivers/net/zynq_gem.c
Merge branch 'u-boot/master'
[karo-tx-uboot.git] / drivers / net / zynq_gem.c
index 6d4001b01736bd340f8059925fecd4410b53d445..3cadd23bb46aa77529b9a15909f20409588eb4e9 100644 (file)
 
 #include <common.h>
 #include <net.h>
+#include <netdev.h>
 #include <config.h>
+#include <fdtdec.h>
+#include <libfdt.h>
 #include <malloc.h>
 #include <asm/io.h>
 #include <phy.h>
@@ -336,7 +339,8 @@ static int zynq_gem_init(struct eth_device *dev, bd_t * bis)
        phy_detection(dev);
 
        /* interface - look at tsec */
-       phydev = phy_connect(priv->bus, priv->phyaddr, dev, 0);
+       phydev = phy_connect(priv->bus, priv->phyaddr, dev,
+                            PHY_INTERFACE_MODE_MII);
 
        phydev->supported = supported | ADVERTISED_Pause |
                            ADVERTISED_Asym_Pause;
@@ -534,3 +538,43 @@ int zynq_gem_initialize(bd_t *bis, int base_addr, int phy_addr, u32 emio)
 
        return 1;
 }
+
+#ifdef CONFIG_OF_CONTROL
+int zynq_gem_of_init(const void *blob)
+{
+       int offset = 0;
+       u32 ret = 0;
+       u32 reg, phy_reg;
+
+       debug("ZYNQ GEM: Initialization\n");
+
+       do {
+               offset = fdt_node_offset_by_compatible(blob, offset,
+                                       "xlnx,ps7-ethernet-1.00.a");
+               if (offset != -1) {
+                       reg = fdtdec_get_addr(blob, offset, "reg");
+                       if (reg != FDT_ADDR_T_NONE) {
+                               offset = fdtdec_lookup_phandle(blob, offset,
+                                                              "phy-handle");
+                               if (offset != -1)
+                                       phy_reg = fdtdec_get_addr(blob, offset,
+                                                                 "reg");
+                               else
+                                       phy_reg = 0;
+
+                               debug("ZYNQ GEM: addr %x, phyaddr %x\n",
+                                     reg, phy_reg);
+
+                               ret |= zynq_gem_initialize(NULL, reg,
+                                                          phy_reg, 0);
+
+                       } else {
+                               debug("ZYNQ GEM: Can't get base address\n");
+                               return -1;
+                       }
+               }
+       } while (offset != -1);
+
+       return ret;
+}
+#endif