Message ID | 20181114135202.27104-1-TheSven73@googlemail.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
Series | [v2] tg3: optionally get mac address from devicetree | expand |
On Wed, Nov 14, 2018 at 08:52:01AM -0500, thesven73@gmail.com wrote: > If the tg3 has a device node, and that node contains a valid > mac address property, use that as the tg3's mac address. > > This behaviour was previously only present on SPARC, using a > conditional compile (#ifdef CONFIG_SPARC), presumably because > at the time, devicetree nodes for pci devices only worked on > SPARC. However, this has recently been made universal, see > commit 98d9f30c820d ("pci/of: Match PCI devices to OF nodes dynamically") > > 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> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew
Please this cancel this patch. As suggested by Dave Miller, it has been replaced by: [PATCH v1] tg3: optionally use eth_platform_get_mac_address() to get mac address
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index 89295306f161..e49112cac1fd 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c @@ -55,6 +55,7 @@ #include <linux/hwmon.h> #include <linux/hwmon-sysfs.h> #include <linux/crc32poly.h> +#include <linux/of_net.h> #include <net/checksum.h> #include <net/ip.h> @@ -16959,23 +16960,21 @@ 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) +static int tg3_of_get_macaddr(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; + struct device_node *np = pci_device_to_OF_node(tp->pdev); + const void *mac; - 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; + if (!np) + return -ENODEV; + mac = of_get_mac_address(np); + if (!mac) + return -EINVAL; + memcpy(tp->dev->dev_addr, mac, ETH_ALEN); + return 0; } +#ifdef CONFIG_SPARC static int tg3_get_default_macaddr_sparc(struct tg3 *tp) { struct net_device *dev = tp->dev; @@ -16992,10 +16991,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 (!tg3_of_get_macaddr(tp)) return 0; -#endif if (tg3_flag(tp, IS_SSB_CORE)) { err = ssb_gige_get_macaddr(tp->pdev, &dev->dev_addr[0]);
If the tg3 has a device node, and that node contains a valid mac address property, use that as the tg3's mac address. This behaviour was previously only present on SPARC, using a conditional compile (#ifdef CONFIG_SPARC), presumably because at the time, devicetree nodes for pci devices only worked on SPARC. However, this has recently been made universal, see commit 98d9f30c820d ("pci/of: Match PCI devices to OF nodes dynamically") 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> --- v2: removed redundant call to is_valid_ether_addr() drivers/net/ethernet/broadcom/tg3.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-)