tg3: optionally use eth_platform_get_mac_address() to get mac address
authorthesven73@gmail.com <thesven73@gmail.com>
Sat, 17 Nov 2018 15:56:18 +0000 (10:56 -0500)
committerDavid S. Miller <davem@davemloft.net>
Sun, 18 Nov 2018 20:57:59 +0000 (12:57 -0800)
This function will try to determine the mac address via the devicetree,
or via an architecture-specific method (e.g. a PROM on SPARC).

The SPARC-specific code in this driver (#ifdef SPARC) did exactly this,
and is therefore removed.

Note that you can now specify the tg3 mac address via the devicetree,
on any platform, not just SPARC:

Devicetree example:
(see Documentation/devicetree/bindings/pci/pci.txt)

&pcie {
host@0 {
#address-cells = <3>;
#size-cells = <2>;
reg = <0 0 0 0 0>;
bcm5778: bcm5778@0 {
reg = <0 0 0 0 0>;
mac-address = [CA 11 AB 1E 10 01];
};
};
};

Signed-off-by: Sven Van Asbroeck <svendev@arcx.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/tg3.c

index 79b881d9cdb073340da77338861b5a29865dc29d..dc155c692c40712ad87ee766c4f1ae4a85cc98b4 100644 (file)
 #include <uapi/linux/net_tstamp.h>
 #include <linux/ptp_clock_kernel.h>
 
-#ifdef CONFIG_SPARC
-#include <asm/idprom.h>
-#include <asm/prom.h>
-#endif
-
 #define BAR_0  0
 #define BAR_2  2
 
@@ -16976,32 +16971,6 @@ static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent)
        return err;
 }
 
-#ifdef CONFIG_SPARC
-static int tg3_get_macaddr_sparc(struct tg3 *tp)
-{
-       struct net_device *dev = tp->dev;
-       struct pci_dev *pdev = tp->pdev;
-       struct device_node *dp = pci_device_to_OF_node(pdev);
-       const unsigned char *addr;
-       int len;
-
-       addr = of_get_property(dp, "local-mac-address", &len);
-       if (addr && len == ETH_ALEN) {
-               memcpy(dev->dev_addr, addr, ETH_ALEN);
-               return 0;
-       }
-       return -ENODEV;
-}
-
-static int tg3_get_default_macaddr_sparc(struct tg3 *tp)
-{
-       struct net_device *dev = tp->dev;
-
-       memcpy(dev->dev_addr, idprom->id_ethaddr, ETH_ALEN);
-       return 0;
-}
-#endif
-
 static int tg3_get_device_address(struct tg3 *tp)
 {
        struct net_device *dev = tp->dev;
@@ -17009,10 +16978,8 @@ static int tg3_get_device_address(struct tg3 *tp)
        int addr_ok = 0;
        int err;
 
-#ifdef CONFIG_SPARC
-       if (!tg3_get_macaddr_sparc(tp))
+       if (!eth_platform_get_mac_address(&tp->pdev->dev, dev->dev_addr))
                return 0;
-#endif
 
        if (tg3_flag(tp, IS_SSB_CORE)) {
                err = ssb_gige_get_macaddr(tp->pdev, &dev->dev_addr[0]);
@@ -17074,13 +17041,8 @@ static int tg3_get_device_address(struct tg3 *tp)
                }
        }
 
-       if (!is_valid_ether_addr(&dev->dev_addr[0])) {
-#ifdef CONFIG_SPARC
-               if (!tg3_get_default_macaddr_sparc(tp))
-                       return 0;
-#endif
+       if (!is_valid_ether_addr(&dev->dev_addr[0]))
                return -EINVAL;
-       }
        return 0;
 }