imx: ventana: add dt fixup for eth1 mac-address
authorTim Harvey <tharvey@gateworks.com>
Fri, 17 Jun 2016 13:10:42 +0000 (06:10 -0700)
committerStefano Babic <sbabic@denx.de>
Thu, 28 Jul 2016 11:27:16 +0000 (13:27 +0200)
Ventana boards with a PCI Marvell Sky2 GigE MAC require the MAC address to
be placed in a DT node in order for the mainline linux driver to obtain it.

Signed-off-by: Tim Harvey <tharvey@gateworks.com>
board/gateworks/gw_ventana/gw_ventana.c

index 7d569ad625be30eb1c5aa195c2d72996243e76c3..b3390a17b92606b559df955693d8332de10f79a7 100644 (file)
@@ -995,6 +995,32 @@ int fdt_fixup_gw16082(void *blob, int np, struct pci_dev *dev)
        return 0;
 }
 
+/* The sky2 GigE MAC obtains it's MAC addr from device-tree by default */
+int fdt_fixup_sky2(void *blob, int np, struct pci_dev *dev)
+{
+       char *tmp, *end;
+       char mac[16];
+       unsigned char mac_addr[6];
+       int j;
+
+       sprintf(mac, "eth1addr");
+       tmp = getenv(mac);
+       if (tmp) {
+               for (j = 0; j < 6; j++) {
+                       mac_addr[j] = tmp ?
+                                     simple_strtoul(tmp, &end,16) : 0;
+                       if (tmp)
+                               tmp = (*end) ? end+1 : end;
+               }
+               fdt_setprop(blob, np, "local-mac-address", mac_addr,
+                           sizeof(mac_addr));
+               printf("   Added mac addr for eth1\n");
+               return 0;
+       }
+
+       return -1;
+}
+
 /*
  * PCI DT nodes must be nested therefore if we need to apply a DT fixup
  * we will walk the PCI bus and add bridge nodes up to the device receiving
@@ -1021,6 +1047,15 @@ void ft_board_pci_fixup(void *blob, bd_t *bd)
                        if (np > 0)
                                fdt_fixup_gw16082(blob, np, dev);
                }
+
+               /* ethernet1 mac address */
+               else if ((dev->vendor == PCI_VENDOR_ID_MARVELL) &&
+                        (dev->device == 0x4380))
+               {
+                       np = fdt_add_pci_path(blob, dev);
+                       if (np > 0)
+                               fdt_fixup_sky2(blob, np, dev);
+               }
        }
 }
 #endif /* if defined(CONFIG_CMD_PCI) */