1 From 83216e3988cd196183542937c9bd58b279f946af Mon Sep 17 00:00:00 2001
2 From: Michael Walle <michael@walle.cc>
3 Date: Mon, 12 Apr 2021 19:47:17 +0200
4 Subject: of: net: pass the dst buffer to of_get_mac_address()
6 of_get_mac_address() returns a "const void*" pointer to a MAC address.
7 Lately, support to fetch the MAC address by an NVMEM provider was added.
8 But this will only work with platform devices. It will not work with
9 PCI devices (e.g. of an integrated root complex) and esp. not with DSA
12 There is an of_* variant of the nvmem binding which works without
13 devices. The returned data of a nvmem_cell_read() has to be freed after
14 use. On the other hand the return of_get_mac_address() points to some
15 static data without a lifetime. The trick for now, was to allocate a
16 device resource managed buffer which is then returned. This will only
17 work if we have an actual device.
19 Change it, so that the caller of of_get_mac_address() has to supply a
20 buffer where the MAC address is written to. Unfortunately, this will
21 touch all drivers which use the of_get_mac_address().
23 Usually the code looks like:
26 addr = of_get_mac_address(np);
28 ether_addr_copy(ndev->dev_addr, addr);
30 This can then be simply rewritten as:
32 of_get_mac_address(np, ndev->dev_addr);
34 Sometimes is_valid_ether_addr() is used to test the MAC address.
35 of_get_mac_address() already makes sure, it just returns a valid MAC
36 address. Thus we can just test its return code. But we have to be
37 careful if there are still other sources for the MAC address before the
38 of_get_mac_address(). In this case we have to keep the
39 is_valid_ether_addr() call.
41 The following coccinelle patch was used to convert common cases to the
42 new style. Afterwards, I've manually gone over the drivers and fixed the
43 return code variable: either used a new one or if one was already
44 available use that. Mansour Moufid, thanks for that coccinelle patch!
51 - x = of_get_mac_address(y);
52 + x = of_get_mac_address(y, z);
54 - ether_addr_copy(z, x);
60 - if (<+... x ...+>) {}
74 - if (<+... x ...+>@e)
83 - x = of_get_mac_address(y, z);
84 + of_get_mac_address(y, z);
88 All drivers, except drivers/net/ethernet/aeroflex/greth.c, were
91 Suggested-by: Andrew Lunn <andrew@lunn.ch>
92 Signed-off-by: Michael Walle <michael@walle.cc>
93 Reviewed-by: Andrew Lunn <andrew@lunn.ch>
94 Signed-off-by: David S. Miller <davem@davemloft.net>
96 arch/arm/mach-mvebu/kirkwood.c | 3 +-
97 arch/powerpc/sysdev/tsi108_dev.c | 5 +-
98 drivers/net/ethernet/aeroflex/greth.c | 6 +--
99 drivers/net/ethernet/allwinner/sun4i-emac.c | 10 ++--
100 drivers/net/ethernet/altera/altera_tse_main.c | 7 +--
101 drivers/net/ethernet/arc/emac_main.c | 8 +--
102 drivers/net/ethernet/atheros/ag71xx.c | 7 +--
103 drivers/net/ethernet/broadcom/bcm4908_enet.c | 7 +--
104 drivers/net/ethernet/broadcom/bcmsysport.c | 7 +--
105 drivers/net/ethernet/broadcom/bgmac-bcma.c | 10 ++--
106 drivers/net/ethernet/broadcom/bgmac-platform.c | 11 ++--
107 drivers/net/ethernet/cadence/macb_main.c | 11 ++--
108 drivers/net/ethernet/cavium/octeon/octeon_mgmt.c | 8 +--
109 drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 5 +-
110 drivers/net/ethernet/davicom/dm9000.c | 10 ++--
111 drivers/net/ethernet/ethoc.c | 6 +--
112 drivers/net/ethernet/ezchip/nps_enet.c | 7 +--
113 drivers/net/ethernet/freescale/fec_main.c | 7 +--
114 drivers/net/ethernet/freescale/fec_mpc52xx.c | 7 +--
115 drivers/net/ethernet/freescale/fman/mac.c | 9 ++--
116 .../net/ethernet/freescale/fs_enet/fs_enet-main.c | 5 +-
117 drivers/net/ethernet/freescale/gianfar.c | 8 +--
118 drivers/net/ethernet/freescale/ucc_geth.c | 5 +-
119 drivers/net/ethernet/hisilicon/hisi_femac.c | 7 +--
120 drivers/net/ethernet/hisilicon/hix5hd2_gmac.c | 7 +--
121 drivers/net/ethernet/lantiq_xrx200.c | 7 +--
122 drivers/net/ethernet/marvell/mv643xx_eth.c | 5 +-
123 drivers/net/ethernet/marvell/mvneta.c | 6 +--
124 .../net/ethernet/marvell/prestera/prestera_main.c | 11 ++--
125 drivers/net/ethernet/marvell/pxa168_eth.c | 9 +---
126 drivers/net/ethernet/marvell/sky2.c | 8 ++-
127 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 11 ++--
128 drivers/net/ethernet/micrel/ks8851_common.c | 7 ++-
129 drivers/net/ethernet/microchip/lan743x_main.c | 5 +-
130 drivers/net/ethernet/nxp/lpc_eth.c | 4 +-
131 drivers/net/ethernet/qualcomm/qca_spi.c | 10 ++--
132 drivers/net/ethernet/qualcomm/qca_uart.c | 9 +---
133 drivers/net/ethernet/renesas/ravb_main.c | 12 +++--
134 drivers/net/ethernet/renesas/sh_eth.c | 5 +-
135 .../net/ethernet/samsung/sxgbe/sxgbe_platform.c | 13 ++---
136 drivers/net/ethernet/socionext/sni_ave.c | 10 ++--
137 .../net/ethernet/stmicro/stmmac/dwmac-anarion.c | 2 +-
138 .../ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c | 2 +-
139 .../net/ethernet/stmicro/stmmac/dwmac-generic.c | 2 +-
140 drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c | 2 +-
141 .../net/ethernet/stmicro/stmmac/dwmac-intel-plat.c | 2 +-
142 .../net/ethernet/stmicro/stmmac/dwmac-ipq806x.c | 2 +-
143 .../net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c | 2 +-
144 .../net/ethernet/stmicro/stmmac/dwmac-mediatek.c | 2 +-
145 drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c | 2 +-
146 .../net/ethernet/stmicro/stmmac/dwmac-meson8b.c | 2 +-
147 drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c | 2 +-
148 .../ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 2 +-
149 drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 2 +-
150 .../net/ethernet/stmicro/stmmac/dwmac-socfpga.c | 2 +-
151 drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c | 2 +-
152 drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c | 2 +-
153 drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 2 +-
154 drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c | 2 +-
155 .../net/ethernet/stmicro/stmmac/dwmac-visconti.c | 2 +-
156 drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 +-
157 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +-
158 .../net/ethernet/stmicro/stmmac/stmmac_platform.c | 14 ++---
159 .../net/ethernet/stmicro/stmmac/stmmac_platform.h | 2 +-
160 drivers/net/ethernet/ti/am65-cpsw-nuss.c | 19 ++++---
161 drivers/net/ethernet/ti/cpsw.c | 7 +--
162 drivers/net/ethernet/ti/cpsw_new.c | 7 +--
163 drivers/net/ethernet/ti/davinci_emac.c | 8 +--
164 drivers/net/ethernet/ti/netcp_core.c | 7 +--
165 drivers/net/ethernet/wiznet/w5100-spi.c | 8 ++-
166 drivers/net/ethernet/wiznet/w5100.c | 2 +-
167 drivers/net/ethernet/xilinx/ll_temac_main.c | 8 +--
168 drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 15 +++---
169 drivers/net/ethernet/xilinx/xilinx_emaclite.c | 8 +--
170 drivers/net/wireless/ath/ath9k/init.c | 5 +-
171 drivers/net/wireless/mediatek/mt76/eeprom.c | 9 +---
172 drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 6 +--
173 drivers/of/of_net.c | 60 ++++++++++------------
174 drivers/staging/octeon/ethernet.c | 10 ++--
175 drivers/staging/wfx/main.c | 7 ++-
176 include/linux/of_net.h | 6 +--
177 include/net/dsa.h | 2 +-
178 net/dsa/dsa2.c | 2 +-
179 net/dsa/slave.c | 2 +-
180 net/ethernet/eth.c | 11 ++--
181 85 files changed, 218 insertions(+), 364 deletions(-)
183 --- a/arch/arm/mach-mvebu/kirkwood.c
184 +++ b/arch/arm/mach-mvebu/kirkwood.c
185 @@ -84,6 +84,7 @@ static void __init kirkwood_dt_eth_fixup
186 struct device_node *pnp = of_get_parent(np);
188 struct property *pmac;
189 + u8 tmpmac[ETH_ALEN];
193 @@ -93,7 +94,7 @@ static void __init kirkwood_dt_eth_fixup
195 /* skip disabled nodes or nodes with valid MAC address*/
196 if (!of_device_is_available(pnp) ||
197 - !IS_ERR(of_get_mac_address(np)))
198 + !of_get_mac_address(np, tmpmac))
201 clk = of_clk_get(pnp, 0);
202 --- a/arch/powerpc/sysdev/tsi108_dev.c
203 +++ b/arch/powerpc/sysdev/tsi108_dev.c
204 @@ -73,7 +73,6 @@ static int __init tsi108_eth_of_init(voi
205 struct device_node *phy, *mdio;
206 hw_info tsi_eth_data;
207 const unsigned int *phy_id;
208 - const void *mac_addr;
211 memset(r, 0, sizeof(r));
212 @@ -101,9 +100,7 @@ static int __init tsi108_eth_of_init(voi
216 - mac_addr = of_get_mac_address(np);
217 - if (!IS_ERR(mac_addr))
218 - ether_addr_copy(tsi_eth_data.mac_addr, mac_addr);
219 + of_get_mac_address(np, tsi_eth_data.mac_addr);
221 ph = of_get_property(np, "mdio-handle", NULL);
222 mdio = of_find_node_by_phandle(*ph);
223 --- a/drivers/net/ethernet/aeroflex/greth.c
224 +++ b/drivers/net/ethernet/aeroflex/greth.c
225 @@ -1451,10 +1451,10 @@ static int greth_of_probe(struct platfor
232 - addr = of_get_mac_address(ofdev->dev.of_node);
233 - if (!IS_ERR(addr)) {
234 + err = of_get_mac_address(ofdev->dev.of_node, addr);
236 for (i = 0; i < 6; i++)
237 macaddr[i] = (unsigned int) addr[i];
239 --- a/drivers/net/ethernet/allwinner/sun4i-emac.c
240 +++ b/drivers/net/ethernet/allwinner/sun4i-emac.c
241 @@ -807,7 +807,6 @@ static int emac_probe(struct platform_de
242 struct emac_board_info *db;
243 struct net_device *ndev;
245 - const char *mac_addr;
247 ndev = alloc_etherdev(sizeof(struct emac_board_info));
249 @@ -870,12 +869,9 @@ static int emac_probe(struct platform_de
252 /* Read MAC-address from DT */
253 - mac_addr = of_get_mac_address(np);
254 - if (!IS_ERR(mac_addr))
255 - ether_addr_copy(ndev->dev_addr, mac_addr);
257 - /* Check if the MAC address is valid, if not get a random one */
258 - if (!is_valid_ether_addr(ndev->dev_addr)) {
259 + ret = of_get_mac_address(np, ndev->dev_addr);
261 + /* if the MAC address is invalid get a random one */
262 eth_hw_addr_random(ndev);
263 dev_warn(&pdev->dev, "using random MAC address %pM\n",
265 --- a/drivers/net/ethernet/altera/altera_tse_main.c
266 +++ b/drivers/net/ethernet/altera/altera_tse_main.c
267 @@ -1351,7 +1351,6 @@ static int altera_tse_probe(struct platf
268 struct resource *control_port;
269 struct resource *dma_res;
270 struct altera_tse_private *priv;
271 - const unsigned char *macaddr;
272 void __iomem *descmap;
273 const struct of_device_id *of_id = NULL;
275 @@ -1525,10 +1524,8 @@ static int altera_tse_probe(struct platf
276 priv->rx_dma_buf_sz = ALTERA_RXDMABUFFER_SIZE;
278 /* get default MAC address from device tree */
279 - macaddr = of_get_mac_address(pdev->dev.of_node);
280 - if (!IS_ERR(macaddr))
281 - ether_addr_copy(ndev->dev_addr, macaddr);
283 + ret = of_get_mac_address(pdev->dev.of_node, ndev->dev_addr);
285 eth_hw_addr_random(ndev);
287 /* get phy addr and create mdio */
288 --- a/drivers/net/ethernet/arc/emac_main.c
289 +++ b/drivers/net/ethernet/arc/emac_main.c
290 @@ -870,7 +870,6 @@ int arc_emac_probe(struct net_device *nd
291 struct device_node *phy_node;
292 struct phy_device *phydev = NULL;
293 struct arc_emac_priv *priv;
294 - const char *mac_addr;
295 unsigned int id, clock_frequency, irq;
298 @@ -955,11 +954,8 @@ int arc_emac_probe(struct net_device *nd
301 /* Get MAC address from device tree */
302 - mac_addr = of_get_mac_address(dev->of_node);
304 - if (!IS_ERR(mac_addr))
305 - ether_addr_copy(ndev->dev_addr, mac_addr);
307 + err = of_get_mac_address(dev->of_node, ndev->dev_addr);
309 eth_hw_addr_random(ndev);
311 arc_emac_set_address_internal(ndev);
312 --- a/drivers/net/ethernet/atheros/ag71xx.c
313 +++ b/drivers/net/ethernet/atheros/ag71xx.c
314 @@ -1634,7 +1634,6 @@ static int ag71xx_probe(struct platform_
315 const struct ag71xx_dcfg *dcfg;
316 struct net_device *ndev;
317 struct resource *res;
318 - const void *mac_addr;
322 @@ -1735,10 +1734,8 @@ static int ag71xx_probe(struct platform_
323 ag->stop_desc->ctrl = 0;
324 ag->stop_desc->next = (u32)ag->stop_desc_dma;
326 - mac_addr = of_get_mac_address(np);
327 - if (!IS_ERR(mac_addr))
328 - memcpy(ndev->dev_addr, mac_addr, ETH_ALEN);
329 - if (IS_ERR(mac_addr) || !is_valid_ether_addr(ndev->dev_addr)) {
330 + err = of_get_mac_address(np, ndev->dev_addr);
332 netif_err(ag, probe, ndev, "invalid MAC address, using random address\n");
333 eth_random_addr(ndev->dev_addr);
335 --- a/drivers/net/ethernet/broadcom/bcmsysport.c
336 +++ b/drivers/net/ethernet/broadcom/bcmsysport.c
337 @@ -2420,7 +2420,6 @@ static int bcm_sysport_probe(struct plat
338 struct bcm_sysport_priv *priv;
339 struct device_node *dn;
340 struct net_device *dev;
341 - const void *macaddr;
345 @@ -2502,12 +2501,10 @@ static int bcm_sysport_probe(struct plat
348 /* Initialize netdevice members */
349 - macaddr = of_get_mac_address(dn);
350 - if (IS_ERR(macaddr)) {
351 + ret = of_get_mac_address(dn, dev->dev_addr);
353 dev_warn(&pdev->dev, "using random Ethernet MAC\n");
354 eth_hw_addr_random(dev);
356 - ether_addr_copy(dev->dev_addr, macaddr);
359 SET_NETDEV_DEV(dev, &pdev->dev);
360 --- a/drivers/net/ethernet/broadcom/bgmac-bcma.c
361 +++ b/drivers/net/ethernet/broadcom/bgmac-bcma.c
362 @@ -115,7 +115,7 @@ static int bgmac_probe(struct bcma_devic
363 struct ssb_sprom *sprom = &core->bus->sprom;
364 struct mii_bus *mii_bus;
366 - const u8 *mac = NULL;
370 bgmac = bgmac_alloc(&core->dev);
371 @@ -128,11 +128,10 @@ static int bgmac_probe(struct bcma_devic
373 bcma_set_drvdata(core, bgmac);
375 - if (bgmac->dev->of_node)
376 - mac = of_get_mac_address(bgmac->dev->of_node);
377 + err = of_get_mac_address(bgmac->dev->of_node, bgmac->net_dev->dev_addr);
379 /* If no MAC address assigned via device tree, check SPROM */
380 - if (IS_ERR_OR_NULL(mac)) {
382 switch (core->core_unit) {
385 @@ -149,10 +148,9 @@ static int bgmac_probe(struct bcma_devic
389 + ether_addr_copy(bgmac->net_dev->dev_addr, mac);
392 - ether_addr_copy(bgmac->net_dev->dev_addr, mac);
394 /* On BCM4706 we need common core to access PHY */
395 if (core->id.id == BCMA_CORE_4706_MAC_GBIT &&
396 !core->bus->drv_gmac_cmn.core) {
397 --- a/drivers/net/ethernet/broadcom/bgmac-platform.c
398 +++ b/drivers/net/ethernet/broadcom/bgmac-platform.c
399 @@ -173,7 +173,7 @@ static int bgmac_probe(struct platform_d
400 struct device_node *np = pdev->dev.of_node;
402 struct resource *regs;
403 - const u8 *mac_addr;
406 bgmac = bgmac_alloc(&pdev->dev);
408 @@ -192,11 +192,10 @@ static int bgmac_probe(struct platform_d
409 bgmac->dev = &pdev->dev;
410 bgmac->dma_dev = &pdev->dev;
412 - mac_addr = of_get_mac_address(np);
413 - if (!IS_ERR(mac_addr))
414 - ether_addr_copy(bgmac->net_dev->dev_addr, mac_addr);
416 - dev_warn(&pdev->dev, "MAC address not present in device tree\n");
417 + ret = of_get_mac_address(np, bgmac->net_dev->dev_addr);
419 + dev_warn(&pdev->dev,
420 + "MAC address not present in device tree\n");
422 bgmac->irq = platform_get_irq(pdev, 0);
424 --- a/drivers/net/ethernet/cadence/macb_main.c
425 +++ b/drivers/net/ethernet/cadence/macb_main.c
426 @@ -4206,7 +4206,6 @@ static int macb_probe(struct platform_de
427 struct net_device *dev;
428 struct resource *regs;
434 @@ -4319,15 +4318,11 @@ static int macb_probe(struct platform_de
435 if (bp->caps & MACB_CAPS_NEEDS_RSTONUBR)
436 bp->rx_intr_mask |= MACB_BIT(RXUBR);
438 - mac = of_get_mac_address(np);
439 - if (PTR_ERR(mac) == -EPROBE_DEFER) {
440 - err = -EPROBE_DEFER;
441 + err = of_get_mac_address(np, bp->dev->dev_addr);
442 + if (err == -EPROBE_DEFER)
443 goto err_out_free_netdev;
444 - } else if (!IS_ERR_OR_NULL(mac)) {
445 - ether_addr_copy(bp->dev->dev_addr, mac);
451 err = of_get_phy_mode(np);
453 --- a/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
454 +++ b/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
455 @@ -1391,7 +1391,6 @@ static int octeon_mgmt_probe(struct plat
456 struct net_device *netdev;
457 struct octeon_mgmt *p;
460 struct resource *res_mix;
461 struct resource *res_agl;
462 struct resource *res_agl_prt_ctl;
463 @@ -1508,11 +1507,8 @@ static int octeon_mgmt_probe(struct plat
464 netdev->min_mtu = 64 - OCTEON_MGMT_RX_HEADROOM;
465 netdev->max_mtu = 16383 - OCTEON_MGMT_RX_HEADROOM - VLAN_HLEN;
467 - mac = of_get_mac_address(pdev->dev.of_node);
470 - ether_addr_copy(netdev->dev_addr, mac);
472 + result = of_get_mac_address(pdev->dev.of_node, netdev->dev_addr);
474 eth_hw_addr_random(netdev);
476 p->phy_np = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0);
477 --- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
478 +++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
479 @@ -1474,7 +1474,6 @@ static int bgx_init_of_phy(struct bgx *b
480 device_for_each_child_node(&bgx->pdev->dev, fwn) {
481 struct phy_device *pd;
482 struct device_node *phy_np;
485 /* Should always be an OF node. But if it is not, we
486 * cannot handle it, so exit the loop.
487 @@ -1483,9 +1482,7 @@ static int bgx_init_of_phy(struct bgx *b
491 - mac = of_get_mac_address(node);
493 - ether_addr_copy(bgx->lmac[lmac].mac, mac);
494 + of_get_mac_address(node, bgx->lmac[lmac].mac);
496 SET_NETDEV_DEV(&bgx->lmac[lmac].netdev, &bgx->pdev->dev);
497 bgx->lmac[lmac].lmacid = lmac;
498 --- a/drivers/net/ethernet/davicom/dm9000.c
499 +++ b/drivers/net/ethernet/davicom/dm9000.c
500 @@ -1390,7 +1390,7 @@ static struct dm9000_plat_data *dm9000_p
502 struct dm9000_plat_data *pdata;
503 struct device_node *np = dev->of_node;
504 - const void *mac_addr;
507 if (!IS_ENABLED(CONFIG_OF) || !np)
508 return ERR_PTR(-ENXIO);
509 @@ -1404,11 +1404,9 @@ static struct dm9000_plat_data *dm9000_p
510 if (of_find_property(np, "davicom,no-eeprom", NULL))
511 pdata->flags |= DM9000_PLATF_NO_EEPROM;
513 - mac_addr = of_get_mac_address(np);
514 - if (!IS_ERR(mac_addr))
515 - ether_addr_copy(pdata->dev_addr, mac_addr);
516 - else if (PTR_ERR(mac_addr) == -EPROBE_DEFER)
517 - return ERR_CAST(mac_addr);
518 + ret = of_get_mac_address(np, pdata->dev_addr);
519 + if (ret == -EPROBE_DEFER)
520 + return ERR_PTR(ret);
524 --- a/drivers/net/ethernet/ethoc.c
525 +++ b/drivers/net/ethernet/ethoc.c
526 @@ -1147,11 +1147,7 @@ static int ethoc_probe(struct platform_d
527 ether_addr_copy(netdev->dev_addr, pdata->hwaddr);
528 priv->phy_id = pdata->phy_id;
532 - mac = of_get_mac_address(pdev->dev.of_node);
534 - ether_addr_copy(netdev->dev_addr, mac);
535 + of_get_mac_address(pdev->dev.of_node, netdev->dev_addr);
539 --- a/drivers/net/ethernet/ezchip/nps_enet.c
540 +++ b/drivers/net/ethernet/ezchip/nps_enet.c
541 @@ -575,7 +575,6 @@ static s32 nps_enet_probe(struct platfor
542 struct net_device *ndev;
543 struct nps_enet_priv *priv;
545 - const char *mac_addr;
549 @@ -602,10 +601,8 @@ static s32 nps_enet_probe(struct platfor
550 dev_dbg(dev, "Registers base address is 0x%p\n", priv->regs_base);
552 /* set kernel MAC address to dev */
553 - mac_addr = of_get_mac_address(dev->of_node);
554 - if (!IS_ERR(mac_addr))
555 - ether_addr_copy(ndev->dev_addr, mac_addr);
557 + err = of_get_mac_address(dev->of_node, ndev->dev_addr);
559 eth_hw_addr_random(ndev);
562 --- a/drivers/net/ethernet/freescale/fec_main.c
563 +++ b/drivers/net/ethernet/freescale/fec_main.c
564 @@ -1695,6 +1695,7 @@ static void fec_get_mac(struct net_devic
565 struct fec_enet_private *fep = netdev_priv(ndev);
566 struct fec_platform_data *pdata = dev_get_platdata(&fep->pdev->dev);
567 unsigned char *iap, tmpaddr[ETH_ALEN];
571 * try to get mac address in following order:
572 @@ -1710,9 +1711,9 @@ static void fec_get_mac(struct net_devic
573 if (!is_valid_ether_addr(iap)) {
574 struct device_node *np = fep->pdev->dev.of_node;
576 - const char *mac = of_get_mac_address(np);
578 - iap = (unsigned char *) mac;
579 + ret = of_get_mac_address(np, tmpaddr);
585 --- a/drivers/net/ethernet/freescale/fec_mpc52xx.c
586 +++ b/drivers/net/ethernet/freescale/fec_mpc52xx.c
587 @@ -823,7 +823,6 @@ static int mpc52xx_fec_probe(struct plat
590 struct device_node *np = op->dev.of_node;
591 - const char *mac_addr;
595 @@ -901,10 +900,8 @@ static int mpc52xx_fec_probe(struct plat
597 * First try to read MAC address from DT
599 - mac_addr = of_get_mac_address(np);
600 - if (!IS_ERR(mac_addr)) {
601 - ether_addr_copy(ndev->dev_addr, mac_addr);
603 + rv = of_get_mac_address(np, ndev->dev_addr);
605 struct mpc52xx_fec __iomem *fec = priv->fec;
608 --- a/drivers/net/ethernet/freescale/fman/mac.c
609 +++ b/drivers/net/ethernet/freescale/fman/mac.c
610 @@ -605,7 +605,6 @@ static int mac_probe(struct platform_dev
611 struct platform_device *of_dev;
613 struct mac_priv_s *priv;
614 - const u8 *mac_addr;
618 @@ -723,13 +722,12 @@ static int mac_probe(struct platform_dev
619 priv->cell_index = (u8)val;
621 /* Get the MAC address */
622 - mac_addr = of_get_mac_address(mac_node);
623 - if (IS_ERR(mac_addr)) {
624 + err = of_get_mac_address(mac_node, mac_dev->addr);
626 dev_err(dev, "of_get_mac_address(%pOF) failed\n", mac_node);
628 goto _return_of_get_parent;
630 - ether_addr_copy(mac_dev->addr, mac_addr);
632 /* Get the port handles */
633 nph = of_count_phandle_with_args(mac_node, "fsl,fman-ports", NULL);
634 --- a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
635 +++ b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
636 @@ -925,7 +925,6 @@ static int fs_enet_probe(struct platform
640 - const u8 *mac_addr;
641 const char *phy_connection_type;
642 int privsize, len, ret = -ENODEV;
644 @@ -1013,9 +1012,7 @@ static int fs_enet_probe(struct platform
645 spin_lock_init(&fep->lock);
646 spin_lock_init(&fep->tx_lock);
648 - mac_addr = of_get_mac_address(ofdev->dev.of_node);
649 - if (!IS_ERR(mac_addr))
650 - ether_addr_copy(ndev->dev_addr, mac_addr);
651 + of_get_mac_address(ofdev->dev.of_node, ndev->dev_addr);
653 ret = fep->ops->allocate_bd(ndev);
655 --- a/drivers/net/ethernet/freescale/gianfar.c
656 +++ b/drivers/net/ethernet/freescale/gianfar.c
657 @@ -643,7 +643,6 @@ static phy_interface_t gfar_get_interfac
658 static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
661 - const void *mac_addr;
663 struct net_device *dev = NULL;
664 struct gfar_private *priv = NULL;
665 @@ -784,10 +783,7 @@ static int gfar_of_init(struct platform_
666 if (stash_len || stash_idx)
667 priv->device_flags |= FSL_GIANFAR_DEV_HAS_BUF_STASHING;
669 - mac_addr = of_get_mac_address(np);
671 - if (!IS_ERR(mac_addr))
672 - ether_addr_copy(dev->dev_addr, mac_addr);
673 + err = of_get_mac_address(np, dev->dev_addr);
675 if (model && !strcasecmp(model, "TSEC"))
676 priv->device_flags |= FSL_GIANFAR_DEV_HAS_GIGABIT |
677 --- a/drivers/net/ethernet/freescale/ucc_geth.c
678 +++ b/drivers/net/ethernet/freescale/ucc_geth.c
679 @@ -3697,7 +3697,6 @@ static int ucc_geth_probe(struct platfor
680 int err, ucc_num, max_speed = 0;
681 const unsigned int *prop;
683 - const void *mac_addr;
684 phy_interface_t phy_interface;
685 static const int enet_to_speed[] = {
686 SPEED_10, SPEED_10, SPEED_10,
687 @@ -3907,9 +3906,7 @@ static int ucc_geth_probe(struct platfor
688 goto err_free_netdev;
691 - mac_addr = of_get_mac_address(np);
692 - if (!IS_ERR(mac_addr))
693 - ether_addr_copy(dev->dev_addr, mac_addr);
694 + of_get_mac_address(np, dev->dev_addr);
696 ugeth->ug_info = ug_info;
698 --- a/drivers/net/ethernet/hisilicon/hisi_femac.c
699 +++ b/drivers/net/ethernet/hisilicon/hisi_femac.c
700 @@ -784,7 +784,6 @@ static int hisi_femac_drv_probe(struct p
701 struct net_device *ndev;
702 struct hisi_femac_priv *priv;
703 struct phy_device *phy;
704 - const char *mac_addr;
707 ndev = alloc_etherdev(sizeof(*priv));
708 @@ -854,10 +853,8 @@ static int hisi_femac_drv_probe(struct p
709 (unsigned long)phy->phy_id,
710 phy_modes(phy->interface));
712 - mac_addr = of_get_mac_address(node);
713 - if (!IS_ERR(mac_addr))
714 - ether_addr_copy(ndev->dev_addr, mac_addr);
715 - if (!is_valid_ether_addr(ndev->dev_addr)) {
716 + ret = of_get_mac_address(node, ndev->dev_addr);
718 eth_hw_addr_random(ndev);
719 dev_warn(dev, "using random MAC address %pM\n",
721 --- a/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c
722 +++ b/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c
723 @@ -1098,7 +1098,6 @@ static int hix5hd2_dev_probe(struct plat
724 struct net_device *ndev;
725 struct hix5hd2_priv *priv;
727 - const char *mac_addr;
730 ndev = alloc_etherdev(sizeof(struct hix5hd2_priv));
731 @@ -1221,10 +1220,8 @@ static int hix5hd2_dev_probe(struct plat
735 - mac_addr = of_get_mac_address(node);
736 - if (!IS_ERR(mac_addr))
737 - ether_addr_copy(ndev->dev_addr, mac_addr);
738 - if (!is_valid_ether_addr(ndev->dev_addr)) {
739 + ret = of_get_mac_address(node, ndev->dev_addr);
741 eth_hw_addr_random(ndev);
742 netdev_warn(ndev, "using random MAC address %pM\n",
744 --- a/drivers/net/ethernet/lantiq_xrx200.c
745 +++ b/drivers/net/ethernet/lantiq_xrx200.c
746 @@ -439,7 +439,6 @@ static int xrx200_probe(struct platform_
747 struct resource *res;
748 struct xrx200_priv *priv;
749 struct net_device *net_dev;
753 /* alloc the network device */
754 @@ -483,10 +482,8 @@ static int xrx200_probe(struct platform_
755 return PTR_ERR(priv->clk);
758 - mac = of_get_mac_address(np);
760 - ether_addr_copy(net_dev->dev_addr, mac);
762 + err = of_get_mac_address(np, net_dev->dev_addr);
764 eth_hw_addr_random(net_dev);
766 /* bring up the dma engine and IP core */
767 --- a/drivers/net/ethernet/marvell/mv643xx_eth.c
768 +++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
769 @@ -2705,7 +2705,6 @@ static int mv643xx_eth_shared_of_add_por
770 struct platform_device *ppdev;
771 struct mv643xx_eth_platform_data ppd;
773 - const char *mac_addr;
777 @@ -2736,9 +2735,7 @@ static int mv643xx_eth_shared_of_add_por
781 - mac_addr = of_get_mac_address(pnp);
782 - if (!IS_ERR(mac_addr))
783 - ether_addr_copy(ppd.mac_addr, mac_addr);
784 + of_get_mac_address(pnp, ppd.mac_addr);
786 mv643xx_eth_property(pnp, "tx-queue-size", ppd.tx_queue_size);
787 mv643xx_eth_property(pnp, "tx-sram-addr", ppd.tx_sram_addr);
788 --- a/drivers/net/ethernet/marvell/mvneta.c
789 +++ b/drivers/net/ethernet/marvell/mvneta.c
790 @@ -4526,7 +4526,6 @@ static int mvneta_probe(struct platform_
791 struct net_device *dev;
792 struct phylink *phylink;
794 - const char *dt_mac_addr;
795 char hw_mac_addr[ETH_ALEN];
796 const char *mac_from;
798 @@ -4623,10 +4622,9 @@ static int mvneta_probe(struct platform_
802 - dt_mac_addr = of_get_mac_address(dn);
803 - if (!IS_ERR(dt_mac_addr)) {
804 + err = of_get_mac_address(dn, dev->dev_addr);
806 mac_from = "device tree";
807 - ether_addr_copy(dev->dev_addr, dt_mac_addr);
809 mvneta_get_mac_addr(pp, hw_mac_addr);
810 if (is_valid_ether_addr(hw_mac_addr)) {
811 --- a/drivers/net/ethernet/marvell/pxa168_eth.c
812 +++ b/drivers/net/ethernet/marvell/pxa168_eth.c
813 @@ -1402,7 +1402,6 @@ static int pxa168_eth_probe(struct platf
814 struct resource *res;
816 struct device_node *np;
817 - const unsigned char *mac_addr = NULL;
820 printk(KERN_NOTICE "PXA168 10/100 Ethernet Driver\n");
821 @@ -1445,12 +1444,8 @@ static int pxa168_eth_probe(struct platf
823 INIT_WORK(&pep->tx_timeout_task, pxa168_eth_tx_timeout_task);
825 - if (pdev->dev.of_node)
826 - mac_addr = of_get_mac_address(pdev->dev.of_node);
828 - if (!IS_ERR_OR_NULL(mac_addr)) {
829 - ether_addr_copy(dev->dev_addr, mac_addr);
831 + err = of_get_mac_address(pdev->dev.of_node, dev->dev_addr);
833 /* try reading the mac address, if set by the bootloader */
834 pxa168_eth_get_mac_address(dev, dev->dev_addr);
835 if (!is_valid_ether_addr(dev->dev_addr)) {
836 --- a/drivers/net/ethernet/marvell/sky2.c
837 +++ b/drivers/net/ethernet/marvell/sky2.c
838 @@ -4721,7 +4721,7 @@ static struct net_device *sky2_init_netd
840 struct sky2_port *sky2;
841 struct net_device *dev = alloc_etherdev(sizeof(*sky2));
847 @@ -4791,10 +4791,8 @@ static struct net_device *sky2_init_netd
848 * 1) from device tree data
849 * 2) from internal registers set by bootloader
851 - iap = of_get_mac_address(hw->pdev->dev.of_node);
853 - ether_addr_copy(dev->dev_addr, iap);
855 + ret = of_get_mac_address(hw->pdev->dev.of_node, dev->dev_addr);
857 memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port * 8,
860 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
861 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
862 @@ -2490,14 +2490,11 @@ static int __init mtk_init(struct net_de
864 struct mtk_mac *mac = netdev_priv(dev);
865 struct mtk_eth *eth = mac->hw;
866 - const char *mac_addr;
869 - mac_addr = of_get_mac_address(mac->of_node);
870 - if (!IS_ERR(mac_addr))
871 - ether_addr_copy(dev->dev_addr, mac_addr);
873 - /* If the mac address is invalid, use random mac address */
874 - if (!is_valid_ether_addr(dev->dev_addr)) {
875 + ret = of_get_mac_address(mac->of_node, dev->dev_addr);
877 + /* If the mac address is invalid, use random mac address */
878 eth_hw_addr_random(dev);
879 dev_err(eth->dev, "generated random MAC address %pM\n",
881 --- a/drivers/net/ethernet/nxp/lpc_eth.c
882 +++ b/drivers/net/ethernet/nxp/lpc_eth.c
883 @@ -1350,9 +1350,7 @@ static int lpc_eth_drv_probe(struct plat
884 __lpc_get_mac(pldat, ndev->dev_addr);
886 if (!is_valid_ether_addr(ndev->dev_addr)) {
887 - const char *macaddr = of_get_mac_address(np);
888 - if (!IS_ERR(macaddr))
889 - ether_addr_copy(ndev->dev_addr, macaddr);
890 + of_get_mac_address(np, ndev->dev_addr);
892 if (!is_valid_ether_addr(ndev->dev_addr))
893 eth_hw_addr_random(ndev);
894 --- a/drivers/net/ethernet/qualcomm/qca_spi.c
895 +++ b/drivers/net/ethernet/qualcomm/qca_spi.c
896 @@ -885,7 +885,7 @@ qca_spi_probe(struct spi_device *spi)
897 struct net_device *qcaspi_devs = NULL;
903 if (!spi->dev.of_node) {
904 dev_err(&spi->dev, "Missing device tree\n");
905 @@ -962,12 +962,8 @@ qca_spi_probe(struct spi_device *spi)
907 spi_set_drvdata(spi, qcaspi_devs);
909 - mac = of_get_mac_address(spi->dev.of_node);
912 - ether_addr_copy(qca->net_dev->dev_addr, mac);
914 - if (!is_valid_ether_addr(qca->net_dev->dev_addr)) {
915 + ret = of_get_mac_address(spi->dev.of_node, qca->net_dev->dev_addr);
917 eth_hw_addr_random(qca->net_dev);
918 dev_info(&spi->dev, "Using random MAC address: %pM\n",
919 qca->net_dev->dev_addr);
920 --- a/drivers/net/ethernet/qualcomm/qca_uart.c
921 +++ b/drivers/net/ethernet/qualcomm/qca_uart.c
922 @@ -323,7 +323,6 @@ static int qca_uart_probe(struct serdev_
924 struct net_device *qcauart_dev = alloc_etherdev(sizeof(struct qcauart));
930 @@ -348,12 +347,8 @@ static int qca_uart_probe(struct serdev_
932 of_property_read_u32(serdev->dev.of_node, "current-speed", &speed);
934 - mac = of_get_mac_address(serdev->dev.of_node);
937 - ether_addr_copy(qca->net_dev->dev_addr, mac);
939 - if (!is_valid_ether_addr(qca->net_dev->dev_addr)) {
940 + ret = of_get_mac_address(serdev->dev.of_node, qca->net_dev->dev_addr);
942 eth_hw_addr_random(qca->net_dev);
943 dev_info(&serdev->dev, "Using random MAC address: %pM\n",
944 qca->net_dev->dev_addr);
945 --- a/drivers/net/ethernet/renesas/ravb_main.c
946 +++ b/drivers/net/ethernet/renesas/ravb_main.c
947 @@ -109,11 +109,13 @@ static void ravb_set_buffer_align(struct
948 * Ethernet AVB device doesn't have ROM for MAC address.
949 * This function gets the MAC address that was used by a bootloader.
951 -static void ravb_read_mac_address(struct net_device *ndev, const u8 *mac)
952 +static void ravb_read_mac_address(struct device_node *np,
953 + struct net_device *ndev)
955 - if (!IS_ERR(mac)) {
956 - ether_addr_copy(ndev->dev_addr, mac);
960 + ret = of_get_mac_address(np, ndev->dev_addr);
962 u32 mahr = ravb_read(ndev, MAHR);
963 u32 malr = ravb_read(ndev, MALR);
965 @@ -2152,7 +2154,7 @@ static int ravb_probe(struct platform_de
966 priv->msg_enable = RAVB_DEF_MSG_ENABLE;
968 /* Read and set MAC address */
969 - ravb_read_mac_address(ndev, of_get_mac_address(np));
970 + ravb_read_mac_address(np, ndev);
971 if (!is_valid_ether_addr(ndev->dev_addr)) {
973 "no valid MAC address supplied, using a random one\n");
974 --- a/drivers/net/ethernet/renesas/sh_eth.c
975 +++ b/drivers/net/ethernet/renesas/sh_eth.c
976 @@ -3194,7 +3194,6 @@ static struct sh_eth_plat_data *sh_eth_p
978 struct device_node *np = dev->of_node;
979 struct sh_eth_plat_data *pdata;
980 - const char *mac_addr;
983 pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
984 @@ -3206,9 +3205,7 @@ static struct sh_eth_plat_data *sh_eth_p
986 pdata->phy_interface = ret;
988 - mac_addr = of_get_mac_address(np);
989 - if (!IS_ERR(mac_addr))
990 - ether_addr_copy(pdata->mac_addr, mac_addr);
991 + of_get_mac_address(np, pdata->mac_addr);
993 pdata->no_ether_link =
994 of_property_read_bool(np, "renesas,no-ether-link");
995 --- a/drivers/net/ethernet/samsung/sxgbe/sxgbe_platform.c
996 +++ b/drivers/net/ethernet/samsung/sxgbe/sxgbe_platform.c
1000 static int sxgbe_probe_config_dt(struct platform_device *pdev,
1001 - struct sxgbe_plat_data *plat,
1003 + struct sxgbe_plat_data *plat)
1005 struct device_node *np = pdev->dev.of_node;
1006 struct sxgbe_dma_cfg *dma_cfg;
1007 @@ -34,7 +33,6 @@ static int sxgbe_probe_config_dt(struct
1011 - *mac = of_get_mac_address(np);
1012 plat->interface = of_get_phy_mode(np);
1014 plat->bus_id = of_alias_get_id(np, "ethernet");
1015 @@ -60,8 +58,7 @@ static int sxgbe_probe_config_dt(struct
1018 static int sxgbe_probe_config_dt(struct platform_device *pdev,
1019 - struct sxgbe_plat_data *plat,
1021 + struct sxgbe_plat_data *plat)
1025 @@ -82,7 +79,6 @@ static int sxgbe_platform_probe(struct p
1027 struct sxgbe_priv_data *priv = NULL;
1028 struct sxgbe_plat_data *plat_dat = NULL;
1029 - const char *mac = NULL;
1030 struct net_device *ndev = platform_get_drvdata(pdev);
1031 struct device_node *node = dev->of_node;
1033 @@ -98,7 +94,7 @@ static int sxgbe_platform_probe(struct p
1037 - ret = sxgbe_probe_config_dt(pdev, plat_dat, &mac);
1038 + ret = sxgbe_probe_config_dt(pdev, plat_dat);
1040 pr_err("%s: main dt probe failed\n", __func__);
1042 @@ -119,8 +115,7 @@ static int sxgbe_platform_probe(struct p
1045 /* Get MAC address if available (DT) */
1046 - if (!IS_ERR_OR_NULL(mac))
1047 - ether_addr_copy(priv->dev->dev_addr, mac);
1048 + of_get_mac_address(node, priv->dev->dev_addr);
1050 /* Get the TX/RX IRQ numbers */
1051 for (i = 0, chan = 1; i < SXGBE_TX_QUEUES; i++) {
1052 --- a/drivers/net/ethernet/socionext/sni_ave.c
1053 +++ b/drivers/net/ethernet/socionext/sni_ave.c
1054 @@ -1559,7 +1559,6 @@ static int ave_probe(struct platform_dev
1055 struct ave_private *priv;
1056 struct net_device *ndev;
1057 struct device_node *np;
1058 - const void *mac_addr;
1062 @@ -1600,12 +1599,9 @@ static int ave_probe(struct platform_dev
1064 ndev->max_mtu = AVE_MAX_ETHFRAME - (ETH_HLEN + ETH_FCS_LEN);
1066 - mac_addr = of_get_mac_address(np);
1067 - if (!IS_ERR(mac_addr))
1068 - ether_addr_copy(ndev->dev_addr, mac_addr);
1070 - /* if the mac address is invalid, use random mac address */
1071 - if (!is_valid_ether_addr(ndev->dev_addr)) {
1072 + ret = of_get_mac_address(np, ndev->dev_addr);
1074 + /* if the mac address is invalid, use random mac address */
1075 eth_hw_addr_random(ndev);
1076 dev_warn(dev, "Using random MAC address: %pM\n",
1078 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c
1079 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c
1080 @@ -110,7 +110,7 @@ static int anarion_dwmac_probe(struct pl
1082 return PTR_ERR(gmac);
1084 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1085 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1086 if (IS_ERR(plat_dat))
1087 return PTR_ERR(plat_dat);
1089 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c
1090 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c
1091 @@ -438,7 +438,7 @@ static int dwc_eth_dwmac_probe(struct pl
1092 if (IS_ERR(stmmac_res.addr))
1093 return PTR_ERR(stmmac_res.addr);
1095 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1096 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1097 if (IS_ERR(plat_dat))
1098 return PTR_ERR(plat_dat);
1100 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c
1101 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c
1102 @@ -27,7 +27,7 @@ static int dwmac_generic_probe(struct pl
1105 if (pdev->dev.of_node) {
1106 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1107 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1108 if (IS_ERR(plat_dat)) {
1109 dev_err(&pdev->dev, "dt configuration failed\n");
1110 return PTR_ERR(plat_dat);
1111 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
1112 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
1113 @@ -254,7 +254,7 @@ static int ipq806x_gmac_probe(struct pla
1117 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1118 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1119 if (IS_ERR(plat_dat))
1120 return PTR_ERR(plat_dat);
1122 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c
1123 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c
1124 @@ -37,7 +37,7 @@ static int lpc18xx_dwmac_probe(struct pl
1128 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1129 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1130 if (IS_ERR(plat_dat))
1131 return PTR_ERR(plat_dat);
1133 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c
1134 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c
1135 @@ -348,7 +348,7 @@ static int mediatek_dwmac_probe(struct p
1139 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1140 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1141 if (IS_ERR(plat_dat))
1142 return PTR_ERR(plat_dat);
1144 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c
1145 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c
1146 @@ -52,7 +52,7 @@ static int meson6_dwmac_probe(struct pla
1150 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1151 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1152 if (IS_ERR(plat_dat))
1153 return PTR_ERR(plat_dat);
1155 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c
1156 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c
1157 @@ -324,7 +324,7 @@ static int meson8b_dwmac_probe(struct pl
1161 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1162 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1163 if (IS_ERR(plat_dat))
1164 return PTR_ERR(plat_dat);
1166 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c
1167 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c
1168 @@ -118,7 +118,7 @@ static int oxnas_dwmac_probe(struct plat
1172 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1173 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1174 if (IS_ERR(plat_dat))
1175 return PTR_ERR(plat_dat);
1177 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
1178 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
1179 @@ -461,7 +461,7 @@ static int qcom_ethqos_probe(struct plat
1183 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1184 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1185 if (IS_ERR(plat_dat)) {
1186 dev_err(&pdev->dev, "dt configuration failed\n");
1187 return PTR_ERR(plat_dat);
1188 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
1189 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
1190 @@ -1396,7 +1396,7 @@ static int rk_gmac_probe(struct platform
1194 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1195 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1196 if (IS_ERR(plat_dat))
1197 return PTR_ERR(plat_dat);
1199 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
1200 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
1201 @@ -398,7 +398,7 @@ static int socfpga_dwmac_probe(struct pl
1205 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1206 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1207 if (IS_ERR(plat_dat))
1208 return PTR_ERR(plat_dat);
1210 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c
1211 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c
1212 @@ -320,7 +320,7 @@ static int sti_dwmac_probe(struct platfo
1216 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1217 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1218 if (IS_ERR(plat_dat))
1219 return PTR_ERR(plat_dat);
1221 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c
1222 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c
1223 @@ -364,7 +364,7 @@ static int stm32_dwmac_probe(struct plat
1227 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1228 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1229 if (IS_ERR(plat_dat))
1230 return PTR_ERR(plat_dat);
1232 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
1233 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
1234 @@ -1127,7 +1127,7 @@ static int sun8i_dwmac_probe(struct plat
1238 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1239 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1240 if (IS_ERR(plat_dat))
1241 return PTR_ERR(plat_dat);
1243 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
1244 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
1245 @@ -108,7 +108,7 @@ static int sun7i_gmac_probe(struct platf
1249 - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
1250 + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
1251 if (IS_ERR(plat_dat))
1252 return PTR_ERR(plat_dat);
1254 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
1255 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
1258 struct stmmac_resources {
1265 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1266 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1267 @@ -4469,7 +4469,7 @@ int stmmac_dvr_probe(struct device *devi
1268 priv->wol_irq = res->wol_irq;
1269 priv->lpi_irq = res->lpi_irq;
1271 - if (!IS_ERR_OR_NULL(res->mac))
1272 + if (!is_zero_ether_addr(res->mac))
1273 memcpy(priv->dev->dev_addr, res->mac, ETH_ALEN);
1275 dev_set_drvdata(device, priv->dev);
1276 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
1277 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
1278 @@ -393,7 +393,7 @@ static int stmmac_of_get_mac_mode(struct
1279 * set some private fields that will be used by the main at runtime.
1281 struct plat_stmmacenet_data *
1282 -stmmac_probe_config_dt(struct platform_device *pdev, const char **mac)
1283 +stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)
1285 struct device_node *np = pdev->dev.of_node;
1286 struct plat_stmmacenet_data *plat;
1287 @@ -404,12 +404,12 @@ stmmac_probe_config_dt(struct platform_d
1289 return ERR_PTR(-ENOMEM);
1291 - *mac = of_get_mac_address(np);
1292 - if (IS_ERR(*mac)) {
1293 - if (PTR_ERR(*mac) == -EPROBE_DEFER)
1294 - return ERR_CAST(*mac);
1295 + rc = of_get_mac_address(np, mac);
1297 + if (rc == -EPROBE_DEFER)
1298 + return ERR_PTR(rc);
1301 + eth_zero_addr(mac);
1304 plat->phy_interface = of_get_phy_mode(np);
1305 @@ -631,7 +631,7 @@ void stmmac_remove_config_dt(struct plat
1308 struct plat_stmmacenet_data *
1309 -stmmac_probe_config_dt(struct platform_device *pdev, const char **mac)
1310 +stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)
1312 return ERR_PTR(-EINVAL);
1314 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.h
1315 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.h
1319 struct plat_stmmacenet_data *
1320 -stmmac_probe_config_dt(struct platform_device *pdev, const char **mac);
1321 +stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac);
1322 void stmmac_remove_config_dt(struct platform_device *pdev,
1323 struct plat_stmmacenet_data *plat);
1325 --- a/drivers/net/ethernet/ti/cpsw.c
1326 +++ b/drivers/net/ethernet/ti/cpsw.c
1327 @@ -2555,7 +2555,6 @@ static int cpsw_probe_dt(struct cpsw_pla
1329 for_each_available_child_of_node(node, slave_node) {
1330 struct cpsw_slave_data *slave_data = data->slave_data + i;
1331 - const void *mac_addr = NULL;
1335 @@ -2628,10 +2627,8 @@ static int cpsw_probe_dt(struct cpsw_pla
1339 - mac_addr = of_get_mac_address(slave_node);
1340 - if (!IS_ERR(mac_addr)) {
1341 - ether_addr_copy(slave_data->mac_addr, mac_addr);
1343 + ret = of_get_mac_address(slave_node, slave_data->mac_addr);
1345 ret = ti_cm_get_macid(&pdev->dev, i,
1346 slave_data->mac_addr);
1348 --- a/drivers/net/ethernet/ti/davinci_emac.c
1349 +++ b/drivers/net/ethernet/ti/davinci_emac.c
1350 @@ -1685,7 +1685,6 @@ davinci_emac_of_get_pdata(struct platfor
1351 const struct of_device_id *match;
1352 const struct emac_platform_data *auxdata;
1353 struct emac_platform_data *pdata = NULL;
1354 - const u8 *mac_addr;
1356 if (!IS_ENABLED(CONFIG_OF) || !pdev->dev.of_node)
1357 return dev_get_platdata(&pdev->dev);
1358 @@ -1697,11 +1696,8 @@ davinci_emac_of_get_pdata(struct platfor
1359 np = pdev->dev.of_node;
1360 pdata->version = EMAC_VERSION_2;
1362 - if (!is_valid_ether_addr(pdata->mac_addr)) {
1363 - mac_addr = of_get_mac_address(np);
1364 - if (!IS_ERR(mac_addr))
1365 - ether_addr_copy(pdata->mac_addr, mac_addr);
1367 + if (!is_valid_ether_addr(pdata->mac_addr))
1368 + of_get_mac_address(np, pdata->mac_addr);
1370 of_property_read_u32(np, "ti,davinci-ctrl-reg-offset",
1371 &pdata->ctrl_reg_offset);
1372 --- a/drivers/net/ethernet/ti/netcp_core.c
1373 +++ b/drivers/net/ethernet/ti/netcp_core.c
1374 @@ -1966,7 +1966,6 @@ static int netcp_create_interface(struct
1375 struct resource res;
1376 void __iomem *efuse = NULL;
1378 - const void *mac_addr;
1379 u8 efuse_mac_addr[6];
1382 @@ -2036,10 +2035,8 @@ static int netcp_create_interface(struct
1383 devm_iounmap(dev, efuse);
1384 devm_release_mem_region(dev, res.start, size);
1386 - mac_addr = of_get_mac_address(node_interface);
1387 - if (!IS_ERR(mac_addr))
1388 - ether_addr_copy(ndev->dev_addr, mac_addr);
1390 + ret = of_get_mac_address(node_interface, ndev->dev_addr);
1392 eth_random_addr(ndev->dev_addr);
1395 --- a/drivers/net/ethernet/wiznet/w5100-spi.c
1396 +++ b/drivers/net/ethernet/wiznet/w5100-spi.c
1397 @@ -423,8 +423,14 @@ static int w5100_spi_probe(struct spi_de
1398 const struct of_device_id *of_id;
1399 const struct w5100_ops *ops;
1400 kernel_ulong_t driver_data;
1401 + const void *mac = NULL;
1402 + u8 tmpmac[ETH_ALEN];
1404 - const void *mac = of_get_mac_address(spi->dev.of_node);
1407 + ret = of_get_mac_address(spi->dev.of_node, tmpmac);
1411 if (spi->dev.of_node) {
1412 of_id = of_match_device(w5100_of_match, &spi->dev);
1413 --- a/drivers/net/ethernet/wiznet/w5100.c
1414 +++ b/drivers/net/ethernet/wiznet/w5100.c
1415 @@ -1157,7 +1157,7 @@ int w5100_probe(struct device *dev, cons
1416 INIT_WORK(&priv->setrx_work, w5100_setrx_work);
1417 INIT_WORK(&priv->restart_work, w5100_restart_work);
1419 - if (!IS_ERR_OR_NULL(mac_addr))
1421 memcpy(ndev->dev_addr, mac_addr, ETH_ALEN);
1423 eth_hw_addr_random(ndev);
1424 --- a/drivers/net/ethernet/xilinx/ll_temac_main.c
1425 +++ b/drivers/net/ethernet/xilinx/ll_temac_main.c
1426 @@ -434,7 +434,7 @@ static void temac_do_set_mac_address(str
1428 static int temac_init_mac_address(struct net_device *ndev, const void *address)
1430 - ether_addr_copy(ndev->dev_addr, address);
1431 + memcpy(ndev->dev_addr, address, ETH_ALEN);
1432 if (!is_valid_ether_addr(ndev->dev_addr))
1433 eth_hw_addr_random(ndev);
1434 temac_do_set_mac_address(ndev);
1435 @@ -1298,7 +1298,7 @@ static int temac_probe(struct platform_d
1436 struct temac_local *lp;
1437 struct net_device *ndev;
1438 struct resource *res;
1440 + u8 addr[ETH_ALEN];
1444 @@ -1494,8 +1494,8 @@ static int temac_probe(struct platform_d
1447 /* Retrieve the MAC address */
1448 - addr = of_get_mac_address(temac_np);
1449 - if (IS_ERR(addr)) {
1450 + rc = of_get_mac_address(temac_np, addr);
1452 dev_err(&pdev->dev, "could not find MAC address\n");
1455 --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
1456 +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
1457 @@ -1663,7 +1663,7 @@ static int axienet_probe(struct platform
1458 struct device_node *np;
1459 struct axienet_local *lp;
1460 struct net_device *ndev;
1461 - const void *mac_addr;
1462 + u8 mac_addr[ETH_ALEN];
1463 struct resource *ethres;
1466 @@ -1835,13 +1835,14 @@ static int axienet_probe(struct platform
1467 dev_info(&pdev->dev, "Ethernet core IRQ not defined\n");
1469 /* Retrieve the MAC address */
1470 - mac_addr = of_get_mac_address(pdev->dev.of_node);
1471 - if (IS_ERR(mac_addr)) {
1472 - dev_warn(&pdev->dev, "could not find MAC address property: %ld\n",
1473 - PTR_ERR(mac_addr));
1475 + ret = of_get_mac_address(pdev->dev.of_node, mac_addr);
1477 + axienet_set_mac_address(ndev, mac_addr);
1479 + dev_warn(&pdev->dev, "could not find MAC address property: %d\n",
1481 + axienet_set_mac_address(ndev, NULL);
1483 - axienet_set_mac_address(ndev, mac_addr);
1485 lp->coalesce_count_rx = XAXIDMA_DFT_RX_THRESHOLD;
1486 lp->coalesce_count_tx = XAXIDMA_DFT_TX_THRESHOLD;
1487 --- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c
1488 +++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
1489 @@ -1113,7 +1113,6 @@ static int xemaclite_of_probe(struct pla
1490 struct net_device *ndev = NULL;
1491 struct net_local *lp = NULL;
1492 struct device *dev = &ofdev->dev;
1493 - const void *mac_address;
1497 @@ -1155,12 +1154,9 @@ static int xemaclite_of_probe(struct pla
1498 lp->next_rx_buf_to_use = 0x0;
1499 lp->tx_ping_pong = get_bool(ofdev, "xlnx,tx-ping-pong");
1500 lp->rx_ping_pong = get_bool(ofdev, "xlnx,rx-ping-pong");
1501 - mac_address = of_get_mac_address(ofdev->dev.of_node);
1503 - if (!IS_ERR(mac_address)) {
1504 - /* Set the MAC address. */
1505 - ether_addr_copy(ndev->dev_addr, mac_address);
1507 + rc = of_get_mac_address(ofdev->dev.of_node, ndev->dev_addr);
1509 dev_warn(dev, "No MAC address found, using random\n");
1510 eth_hw_addr_random(ndev);
1512 --- a/drivers/net/wireless/ath/ath9k/init.c
1513 +++ b/drivers/net/wireless/ath/ath9k/init.c
1514 @@ -618,7 +618,6 @@ static int ath9k_of_init(struct ath_soft
1515 struct ath_hw *ah = sc->sc_ah;
1516 struct ath_common *common = ath9k_hw_common(ah);
1517 enum ath_bus_type bus_type = common->bus_ops->ath_bus_type;
1519 char eeprom_name[100];
1522 @@ -641,9 +640,7 @@ static int ath9k_of_init(struct ath_soft
1523 ah->ah_flags |= AH_NO_EEP_SWAP;
1526 - mac = of_get_mac_address(np);
1528 - ether_addr_copy(common->macaddr, mac);
1529 + of_get_mac_address(np, common->macaddr);
1533 --- a/drivers/net/wireless/mediatek/mt76/eeprom.c
1534 +++ b/drivers/net/wireless/mediatek/mt76/eeprom.c
1535 @@ -75,17 +75,9 @@ out_put_node:
1537 mt76_eeprom_override(struct mt76_dev *dev)
1540 struct device_node *np = dev->dev->of_node;
1546 - mac = of_get_mac_address(np);
1548 - ether_addr_copy(dev->macaddr, mac);
1550 + of_get_mac_address(np, dev->macaddr);
1552 if (!is_valid_ether_addr(dev->macaddr)) {
1553 eth_random_addr(dev->macaddr);
1554 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
1555 +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
1556 @@ -990,11 +990,7 @@ static void rt2x00lib_rate(struct ieee80
1558 void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
1560 - const char *mac_addr;
1562 - mac_addr = of_get_mac_address(rt2x00dev->dev->of_node);
1563 - if (!IS_ERR(mac_addr))
1564 - ether_addr_copy(eeprom_mac_addr, mac_addr);
1565 + of_get_mac_address(rt2x00dev->dev->of_node, eeprom_mac_addr);
1567 if (!is_valid_ether_addr(eeprom_mac_addr)) {
1568 eth_random_addr(eeprom_mac_addr);
1569 --- a/drivers/of/of_net.c
1570 +++ b/drivers/of/of_net.c
1571 @@ -39,37 +39,29 @@ int of_get_phy_mode(struct device_node *
1573 EXPORT_SYMBOL_GPL(of_get_phy_mode);
1575 -static const void *of_get_mac_addr(struct device_node *np, const char *name)
1576 +static int of_get_mac_addr(struct device_node *np, const char *name, u8 *addr)
1578 struct property *pp = of_find_property(np, name, NULL);
1580 - if (pp && pp->length == ETH_ALEN && is_valid_ether_addr(pp->value))
1583 + if (pp && pp->length == ETH_ALEN && is_valid_ether_addr(pp->value)) {
1584 + memcpy(addr, pp->value, ETH_ALEN);
1590 -static const void *of_get_mac_addr_nvmem(struct device_node *np)
1591 +static int of_get_mac_addr_nvmem(struct device_node *np, u8 *addr)
1595 - u8 nvmem_mac[ETH_ALEN];
1596 struct platform_device *pdev = of_find_device_by_node(np);
1600 - return ERR_PTR(-ENODEV);
1603 - ret = nvmem_get_mac_address(&pdev->dev, &nvmem_mac);
1605 - put_device(&pdev->dev);
1606 - return ERR_PTR(ret);
1609 - mac = devm_kmemdup(&pdev->dev, nvmem_mac, ETH_ALEN, GFP_KERNEL);
1610 + ret = nvmem_get_mac_address(&pdev->dev, addr);
1611 put_device(&pdev->dev);
1613 - return ERR_PTR(-ENOMEM);
1620 @@ -92,24 +84,27 @@ static const void *of_get_mac_addr_nvmem
1621 * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists
1624 - * Return: Will be a valid pointer on success and ERR_PTR in case of error.
1625 + * Return: 0 on success and errno in case of error.
1627 -const void *of_get_mac_address(struct device_node *np)
1628 +int of_get_mac_address(struct device_node *np, u8 *addr)
1632 - addr = of_get_mac_addr(np, "mac-address");
1637 - addr = of_get_mac_addr(np, "local-mac-address");
1643 - addr = of_get_mac_addr(np, "address");
1646 + ret = of_get_mac_addr(np, "mac-address", addr);
1650 + ret = of_get_mac_addr(np, "local-mac-address", addr);
1654 + ret = of_get_mac_addr(np, "address", addr);
1658 - return of_get_mac_addr_nvmem(np);
1659 + return of_get_mac_addr_nvmem(np, addr);
1661 EXPORT_SYMBOL(of_get_mac_address);
1662 --- a/drivers/staging/octeon/ethernet.c
1663 +++ b/drivers/staging/octeon/ethernet.c
1664 @@ -407,14 +407,10 @@ static int cvm_oct_common_set_mac_addres
1665 int cvm_oct_common_init(struct net_device *dev)
1667 struct octeon_ethernet *priv = netdev_priv(dev);
1668 - const u8 *mac = NULL;
1671 - if (priv->of_node)
1672 - mac = of_get_mac_address(priv->of_node);
1674 - if (!IS_ERR_OR_NULL(mac))
1675 - ether_addr_copy(dev->dev_addr, mac);
1677 + ret = of_get_mac_address(priv->of_node, dev->dev_addr);
1679 eth_hw_addr_random(dev);
1682 --- a/include/linux/of_net.h
1683 +++ b/include/linux/of_net.h
1687 extern int of_get_phy_mode(struct device_node *np);
1688 -extern const void *of_get_mac_address(struct device_node *np);
1689 +extern int of_get_mac_address(struct device_node *np, u8 *mac);
1690 extern struct net_device *of_find_net_device_by_node(struct device_node *np);
1692 static inline int of_get_phy_mode(struct device_node *np)
1693 @@ -19,9 +19,9 @@ static inline int of_get_phy_mode(struct
1697 -static inline const void *of_get_mac_address(struct device_node *np)
1698 +static inline int of_get_mac_address(struct device_node *np, u8 *mac)
1700 - return ERR_PTR(-ENODEV);
1704 static inline struct net_device *of_find_net_device_by_node(struct device_node *np)
1705 --- a/include/net/dsa.h
1706 +++ b/include/net/dsa.h
1707 @@ -186,7 +186,7 @@ struct dsa_port {
1710 struct dsa_port *cpu_dp;
1713 struct device_node *dn;
1714 unsigned int ageing_time;
1715 bool vlan_filtering;
1716 --- a/net/dsa/dsa2.c
1717 +++ b/net/dsa/dsa2.c
1718 @@ -318,7 +318,7 @@ static int dsa_port_setup(struct dsa_por
1720 devlink_port_registered = true;
1722 - dp->mac = of_get_mac_address(dp->dn);
1723 + of_get_mac_address(dp->dn, dp->mac);
1724 err = dsa_slave_create(dp);
1727 --- a/net/dsa/slave.c
1728 +++ b/net/dsa/slave.c
1729 @@ -1416,7 +1416,7 @@ int dsa_slave_create(struct dsa_port *po
1730 slave_dev->hw_features |= NETIF_F_HW_TC;
1731 slave_dev->features |= NETIF_F_LLTX;
1732 slave_dev->ethtool_ops = &dsa_slave_ethtool_ops;
1733 - if (!IS_ERR_OR_NULL(port->mac))
1734 + if (!is_zero_ether_addr(port->mac))
1735 ether_addr_copy(slave_dev->dev_addr, port->mac);
1737 eth_hw_addr_inherit(slave_dev, master);
1738 --- a/net/ethernet/eth.c
1739 +++ b/net/ethernet/eth.c
1740 @@ -550,13 +550,14 @@ unsigned char * __weak arch_get_platform
1742 int eth_platform_get_mac_address(struct device *dev, u8 *mac_addr)
1744 - const unsigned char *addr = NULL;
1745 + unsigned char *addr;
1749 - addr = of_get_mac_address(dev->of_node);
1750 - if (IS_ERR_OR_NULL(addr))
1751 - addr = arch_get_platform_mac_address();
1752 + ret = of_get_mac_address(dev->of_node, mac_addr);
1756 + addr = arch_get_platform_mac_address();
1760 --- a/drivers/net/usb/smsc75xx.c
1761 +++ b/drivers/net/usb/smsc75xx.c
1762 @@ -757,11 +757,12 @@ static int smsc75xx_ioctl(struct net_dev
1764 static void smsc75xx_init_mac_address(struct usbnet *dev)
1766 - const u8 *mac_addr;
1767 + u8 mac_addr[ETH_ALEN];
1770 /* maybe the boot loader passed the MAC address in devicetree */
1771 - mac_addr = of_get_mac_address(dev->udev->dev.of_node);
1772 - if (!IS_ERR(mac_addr)) {
1773 + ret = of_get_mac_address(dev->udev->dev.of_node, mac_addr);
1775 ether_addr_copy(dev->net->dev_addr, mac_addr);
1778 --- a/drivers/net/usb/smsc95xx.c
1779 +++ b/drivers/net/usb/smsc95xx.c
1780 @@ -901,11 +901,12 @@ static int smsc95xx_ioctl(struct net_dev
1782 static void smsc95xx_init_mac_address(struct usbnet *dev)
1784 - const u8 *mac_addr;
1785 + u8 mac_addr[ETH_ALEN];
1788 /* maybe the boot loader passed the MAC address in devicetree */
1789 - mac_addr = of_get_mac_address(dev->udev->dev.of_node);
1790 - if (!IS_ERR(mac_addr)) {
1791 + ret = of_get_mac_address(dev->udev->dev.of_node, mac_addr);
1793 ether_addr_copy(dev->net->dev_addr, mac_addr);
1796 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
1797 +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
1798 @@ -3444,10 +3444,11 @@ static int bcmgenet_probe(struct platfor
1799 const struct of_device_id *of_id = NULL;
1800 struct bcmgenet_priv *priv;
1801 struct net_device *dev;
1802 - const void *macaddr;
1803 + u8 macaddr[ETH_ALEN];
1806 const char *phy_mode_str;
1809 /* Up to GENET_MAX_MQ_CNT + 1 TX queues and RX queues */
1810 dev = alloc_etherdev_mqs(sizeof(*priv), GENET_MAX_MQ_CNT + 1,
1811 @@ -3474,14 +3475,15 @@ static int bcmgenet_probe(struct platfor
1815 - macaddr = of_get_mac_address(dn);
1816 - if (IS_ERR(macaddr)) {
1817 + ret = of_get_mac_address(dn, macaddr);
1819 dev_err(&pdev->dev, "can't find MAC address\n");
1823 + ether_addr_copy(dev->dev_addr, macaddr);
1825 - macaddr = pd->mac_address;
1826 + ether_addr_copy(dev->dev_addr, pd->mac_address);
1829 priv->base = devm_platform_ioremap_resource(pdev, 0);
1830 @@ -3494,7 +3496,6 @@ static int bcmgenet_probe(struct platfor
1832 SET_NETDEV_DEV(dev, &pdev->dev);
1833 dev_set_drvdata(&pdev->dev, dev);
1834 - ether_addr_copy(dev->dev_addr, macaddr);
1835 dev->watchdog_timeo = 2 * HZ;
1836 dev->ethtool_ops = &bcmgenet_ethtool_ops;
1837 dev->netdev_ops = &bcmgenet_netdev_ops;