tg3: optionally use eth_platform_get_mac_address() to get mac address
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>
This commit is contained in:
Родитель
80cc49507b
Коммит
cddaf02bcb
|
@ -66,11 +66,6 @@
|
||||||
#include <uapi/linux/net_tstamp.h>
|
#include <uapi/linux/net_tstamp.h>
|
||||||
#include <linux/ptp_clock_kernel.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_0 0
|
||||||
#define BAR_2 2
|
#define BAR_2 2
|
||||||
|
|
||||||
|
@ -16976,32 +16971,6 @@ static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent)
|
||||||
return err;
|
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)
|
static int tg3_get_device_address(struct tg3 *tp)
|
||||||
{
|
{
|
||||||
struct net_device *dev = tp->dev;
|
struct net_device *dev = tp->dev;
|
||||||
|
@ -17009,10 +16978,8 @@ static int tg3_get_device_address(struct tg3 *tp)
|
||||||
int addr_ok = 0;
|
int addr_ok = 0;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
#ifdef CONFIG_SPARC
|
if (!eth_platform_get_mac_address(&tp->pdev->dev, dev->dev_addr))
|
||||||
if (!tg3_get_macaddr_sparc(tp))
|
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
|
||||||
|
|
||||||
if (tg3_flag(tp, IS_SSB_CORE)) {
|
if (tg3_flag(tp, IS_SSB_CORE)) {
|
||||||
err = ssb_gige_get_macaddr(tp->pdev, &dev->dev_addr[0]);
|
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])) {
|
if (!is_valid_ether_addr(&dev->dev_addr[0]))
|
||||||
#ifdef CONFIG_SPARC
|
|
||||||
if (!tg3_get_default_macaddr_sparc(tp))
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче