123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935 |
- From 83216e3988cd196183542937c9bd58b279f946af Mon Sep 17 00:00:00 2001
- From: Michael Walle <[email protected]>
- Date: Mon, 12 Apr 2021 19:47:17 +0200
- Subject: of: net: pass the dst buffer to of_get_mac_address()
- of_get_mac_address() returns a "const void*" pointer to a MAC address.
- Lately, support to fetch the MAC address by an NVMEM provider was added.
- But this will only work with platform devices. It will not work with
- PCI devices (e.g. of an integrated root complex) and esp. not with DSA
- ports.
- There is an of_* variant of the nvmem binding which works without
- devices. The returned data of a nvmem_cell_read() has to be freed after
- use. On the other hand the return of_get_mac_address() points to some
- static data without a lifetime. The trick for now, was to allocate a
- device resource managed buffer which is then returned. This will only
- work if we have an actual device.
- Change it, so that the caller of of_get_mac_address() has to supply a
- buffer where the MAC address is written to. Unfortunately, this will
- touch all drivers which use the of_get_mac_address().
- Usually the code looks like:
- const char *addr;
- addr = of_get_mac_address(np);
- if (!IS_ERR(addr))
- ether_addr_copy(ndev->dev_addr, addr);
- This can then be simply rewritten as:
- of_get_mac_address(np, ndev->dev_addr);
- Sometimes is_valid_ether_addr() is used to test the MAC address.
- of_get_mac_address() already makes sure, it just returns a valid MAC
- address. Thus we can just test its return code. But we have to be
- careful if there are still other sources for the MAC address before the
- of_get_mac_address(). In this case we have to keep the
- is_valid_ether_addr() call.
- The following coccinelle patch was used to convert common cases to the
- new style. Afterwards, I've manually gone over the drivers and fixed the
- return code variable: either used a new one or if one was already
- available use that. Mansour Moufid, thanks for that coccinelle patch!
- <spml>
- @a@
- identifier x;
- expression y, z;
- @@
- - x = of_get_mac_address(y);
- + x = of_get_mac_address(y, z);
- <...
- - ether_addr_copy(z, x);
- ...>
- @@
- identifier a.x;
- @@
- - if (<+... x ...+>) {}
- @@
- identifier a.x;
- @@
- if (<+... x ...+>) {
- ...
- }
- - else {}
- @@
- identifier a.x;
- expression e;
- @@
- - if (<+... x ...+>@e)
- - {}
- - else
- + if (!(e))
- {...}
- @@
- expression x, y, z;
- @@
- - x = of_get_mac_address(y, z);
- + of_get_mac_address(y, z);
- ... when != x
- </spml>
- All drivers, except drivers/net/ethernet/aeroflex/greth.c, were
- compile-time tested.
- Suggested-by: Andrew Lunn <[email protected]>
- Signed-off-by: Michael Walle <[email protected]>
- Reviewed-by: Andrew Lunn <[email protected]>
- Signed-off-by: David S. Miller <[email protected]>
- ---
- arch/arm/mach-mvebu/kirkwood.c | 3 +-
- arch/powerpc/sysdev/tsi108_dev.c | 5 +-
- drivers/net/ethernet/aeroflex/greth.c | 6 +--
- drivers/net/ethernet/allwinner/sun4i-emac.c | 10 ++--
- drivers/net/ethernet/altera/altera_tse_main.c | 7 +--
- drivers/net/ethernet/arc/emac_main.c | 8 +--
- drivers/net/ethernet/atheros/ag71xx.c | 7 +--
- drivers/net/ethernet/broadcom/bcm4908_enet.c | 7 +--
- drivers/net/ethernet/broadcom/bcmsysport.c | 7 +--
- drivers/net/ethernet/broadcom/bgmac-bcma.c | 10 ++--
- drivers/net/ethernet/broadcom/bgmac-platform.c | 11 ++--
- drivers/net/ethernet/cadence/macb_main.c | 11 ++--
- drivers/net/ethernet/cavium/octeon/octeon_mgmt.c | 8 +--
- drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 5 +-
- drivers/net/ethernet/davicom/dm9000.c | 10 ++--
- drivers/net/ethernet/ethoc.c | 6 +--
- drivers/net/ethernet/ezchip/nps_enet.c | 7 +--
- drivers/net/ethernet/freescale/fec_main.c | 7 +--
- drivers/net/ethernet/freescale/fec_mpc52xx.c | 7 +--
- drivers/net/ethernet/freescale/fman/mac.c | 9 ++--
- .../net/ethernet/freescale/fs_enet/fs_enet-main.c | 5 +-
- drivers/net/ethernet/freescale/gianfar.c | 8 +--
- drivers/net/ethernet/freescale/ucc_geth.c | 5 +-
- drivers/net/ethernet/hisilicon/hisi_femac.c | 7 +--
- drivers/net/ethernet/hisilicon/hix5hd2_gmac.c | 7 +--
- drivers/net/ethernet/lantiq_xrx200.c | 7 +--
- drivers/net/ethernet/marvell/mv643xx_eth.c | 5 +-
- drivers/net/ethernet/marvell/mvneta.c | 6 +--
- .../net/ethernet/marvell/prestera/prestera_main.c | 11 ++--
- drivers/net/ethernet/marvell/pxa168_eth.c | 9 +---
- drivers/net/ethernet/marvell/sky2.c | 8 ++-
- drivers/net/ethernet/mediatek/mtk_eth_soc.c | 11 ++--
- drivers/net/ethernet/micrel/ks8851_common.c | 7 ++-
- drivers/net/ethernet/microchip/lan743x_main.c | 5 +-
- drivers/net/ethernet/nxp/lpc_eth.c | 4 +-
- drivers/net/ethernet/qualcomm/qca_spi.c | 10 ++--
- drivers/net/ethernet/qualcomm/qca_uart.c | 9 +---
- drivers/net/ethernet/renesas/ravb_main.c | 12 +++--
- drivers/net/ethernet/renesas/sh_eth.c | 5 +-
- .../net/ethernet/samsung/sxgbe/sxgbe_platform.c | 13 ++---
- drivers/net/ethernet/socionext/sni_ave.c | 10 ++--
- .../net/ethernet/stmicro/stmmac/dwmac-anarion.c | 2 +-
- .../ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c | 2 +-
- .../net/ethernet/stmicro/stmmac/dwmac-generic.c | 2 +-
- drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c | 2 +-
- .../net/ethernet/stmicro/stmmac/dwmac-intel-plat.c | 2 +-
- .../net/ethernet/stmicro/stmmac/dwmac-ipq806x.c | 2 +-
- .../net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c | 2 +-
- .../net/ethernet/stmicro/stmmac/dwmac-mediatek.c | 2 +-
- drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c | 2 +-
- .../net/ethernet/stmicro/stmmac/dwmac-meson8b.c | 2 +-
- drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c | 2 +-
- .../ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 2 +-
- drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 2 +-
- .../net/ethernet/stmicro/stmmac/dwmac-socfpga.c | 2 +-
- drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c | 2 +-
- drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c | 2 +-
- drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 2 +-
- drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c | 2 +-
- .../net/ethernet/stmicro/stmmac/dwmac-visconti.c | 2 +-
- drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 +-
- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +-
- .../net/ethernet/stmicro/stmmac/stmmac_platform.c | 14 ++---
- .../net/ethernet/stmicro/stmmac/stmmac_platform.h | 2 +-
- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 19 ++++---
- drivers/net/ethernet/ti/cpsw.c | 7 +--
- drivers/net/ethernet/ti/cpsw_new.c | 7 +--
- drivers/net/ethernet/ti/davinci_emac.c | 8 +--
- drivers/net/ethernet/ti/netcp_core.c | 7 +--
- drivers/net/ethernet/wiznet/w5100-spi.c | 8 ++-
- drivers/net/ethernet/wiznet/w5100.c | 2 +-
- drivers/net/ethernet/xilinx/ll_temac_main.c | 8 +--
- drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 15 +++---
- drivers/net/ethernet/xilinx/xilinx_emaclite.c | 8 +--
- drivers/net/wireless/ath/ath9k/init.c | 5 +-
- drivers/net/wireless/mediatek/mt76/eeprom.c | 9 +---
- drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 6 +--
- drivers/of/of_net.c | 60 ++++++++++------------
- drivers/staging/octeon/ethernet.c | 10 ++--
- drivers/staging/wfx/main.c | 7 ++-
- include/linux/of_net.h | 6 +--
- include/net/dsa.h | 2 +-
- net/dsa/dsa2.c | 2 +-
- net/dsa/slave.c | 2 +-
- net/ethernet/eth.c | 11 ++--
- 85 files changed, 218 insertions(+), 364 deletions(-)
- --- a/arch/arm/mach-mvebu/kirkwood.c
- +++ b/arch/arm/mach-mvebu/kirkwood.c
- @@ -84,6 +84,7 @@ static void __init kirkwood_dt_eth_fixup
- struct device_node *pnp = of_get_parent(np);
- struct clk *clk;
- struct property *pmac;
- + u8 tmpmac[ETH_ALEN];
- void __iomem *io;
- u8 *macaddr;
- u32 reg;
- @@ -93,7 +94,7 @@ static void __init kirkwood_dt_eth_fixup
-
- /* skip disabled nodes or nodes with valid MAC address*/
- if (!of_device_is_available(pnp) ||
- - !IS_ERR(of_get_mac_address(np)))
- + !of_get_mac_address(np, tmpmac))
- goto eth_fixup_skip;
-
- clk = of_clk_get(pnp, 0);
- --- a/arch/powerpc/sysdev/tsi108_dev.c
- +++ b/arch/powerpc/sysdev/tsi108_dev.c
- @@ -73,7 +73,6 @@ static int __init tsi108_eth_of_init(voi
- struct device_node *phy, *mdio;
- hw_info tsi_eth_data;
- const unsigned int *phy_id;
- - const void *mac_addr;
- const phandle *ph;
-
- memset(r, 0, sizeof(r));
- @@ -101,9 +100,7 @@ static int __init tsi108_eth_of_init(voi
- goto err;
- }
-
- - mac_addr = of_get_mac_address(np);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(tsi_eth_data.mac_addr, mac_addr);
- + of_get_mac_address(np, tsi_eth_data.mac_addr);
-
- ph = of_get_property(np, "mdio-handle", NULL);
- mdio = of_find_node_by_phandle(*ph);
- --- a/drivers/net/ethernet/aeroflex/greth.c
- +++ b/drivers/net/ethernet/aeroflex/greth.c
- @@ -1449,10 +1449,10 @@ static int greth_of_probe(struct platfor
- break;
- }
- if (i == 6) {
- - const u8 *addr;
- + u8 addr[ETH_ALEN];
-
- - addr = of_get_mac_address(ofdev->dev.of_node);
- - if (!IS_ERR(addr)) {
- + err = of_get_mac_address(ofdev->dev.of_node, addr);
- + if (!err) {
- for (i = 0; i < 6; i++)
- macaddr[i] = (unsigned int) addr[i];
- } else {
- --- a/drivers/net/ethernet/allwinner/sun4i-emac.c
- +++ b/drivers/net/ethernet/allwinner/sun4i-emac.c
- @@ -790,7 +790,6 @@ static int emac_probe(struct platform_de
- struct emac_board_info *db;
- struct net_device *ndev;
- int ret = 0;
- - const char *mac_addr;
-
- ndev = alloc_etherdev(sizeof(struct emac_board_info));
- if (!ndev) {
- @@ -853,12 +852,9 @@ static int emac_probe(struct platform_de
- }
-
- /* Read MAC-address from DT */
- - mac_addr = of_get_mac_address(np);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(ndev->dev_addr, mac_addr);
- -
- - /* Check if the MAC address is valid, if not get a random one */
- - if (!is_valid_ether_addr(ndev->dev_addr)) {
- + ret = of_get_mac_address(np, ndev->dev_addr);
- + if (ret) {
- + /* if the MAC address is invalid get a random one */
- eth_hw_addr_random(ndev);
- dev_warn(&pdev->dev, "using random MAC address %pM\n",
- ndev->dev_addr);
- --- a/drivers/net/ethernet/altera/altera_tse_main.c
- +++ b/drivers/net/ethernet/altera/altera_tse_main.c
- @@ -1355,7 +1355,6 @@ static int altera_tse_probe(struct platf
- struct resource *control_port;
- struct resource *dma_res;
- struct altera_tse_private *priv;
- - const unsigned char *macaddr;
- void __iomem *descmap;
- const struct of_device_id *of_id = NULL;
-
- @@ -1532,10 +1531,8 @@ static int altera_tse_probe(struct platf
- priv->rx_dma_buf_sz = ALTERA_RXDMABUFFER_SIZE;
-
- /* get default MAC address from device tree */
- - macaddr = of_get_mac_address(pdev->dev.of_node);
- - if (!IS_ERR(macaddr))
- - ether_addr_copy(ndev->dev_addr, macaddr);
- - else
- + ret = of_get_mac_address(pdev->dev.of_node, ndev->dev_addr);
- + if (ret)
- eth_hw_addr_random(ndev);
-
- /* get phy addr and create mdio */
- --- a/drivers/net/ethernet/arc/emac_main.c
- +++ b/drivers/net/ethernet/arc/emac_main.c
- @@ -857,7 +857,6 @@ int arc_emac_probe(struct net_device *nd
- struct device_node *phy_node;
- struct phy_device *phydev = NULL;
- struct arc_emac_priv *priv;
- - const char *mac_addr;
- unsigned int id, clock_frequency, irq;
- int err;
-
- @@ -942,11 +941,8 @@ int arc_emac_probe(struct net_device *nd
- }
-
- /* Get MAC address from device tree */
- - mac_addr = of_get_mac_address(dev->of_node);
- -
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(ndev->dev_addr, mac_addr);
- - else
- + err = of_get_mac_address(dev->of_node, ndev->dev_addr);
- + if (err)
- eth_hw_addr_random(ndev);
-
- arc_emac_set_address_internal(ndev);
- --- a/drivers/net/ethernet/atheros/ag71xx.c
- +++ b/drivers/net/ethernet/atheros/ag71xx.c
- @@ -1856,7 +1856,6 @@ static int ag71xx_probe(struct platform_
- const struct ag71xx_dcfg *dcfg;
- struct net_device *ndev;
- struct resource *res;
- - const void *mac_addr;
- int tx_size, err, i;
- struct ag71xx *ag;
-
- @@ -1952,10 +1951,8 @@ static int ag71xx_probe(struct platform_
- ag->stop_desc->ctrl = 0;
- ag->stop_desc->next = (u32)ag->stop_desc_dma;
-
- - mac_addr = of_get_mac_address(np);
- - if (!IS_ERR(mac_addr))
- - memcpy(ndev->dev_addr, mac_addr, ETH_ALEN);
- - if (IS_ERR(mac_addr) || !is_valid_ether_addr(ndev->dev_addr)) {
- + err = of_get_mac_address(np, ndev->dev_addr);
- + if (err) {
- netif_err(ag, probe, ndev, "invalid MAC address, using random address\n");
- eth_random_addr(ndev->dev_addr);
- }
- --- a/drivers/net/ethernet/broadcom/bcmsysport.c
- +++ b/drivers/net/ethernet/broadcom/bcmsysport.c
- @@ -2468,7 +2468,6 @@ static int bcm_sysport_probe(struct plat
- struct bcm_sysport_priv *priv;
- struct device_node *dn;
- struct net_device *dev;
- - const void *macaddr;
- u32 txq, rxq;
- int ret;
-
- @@ -2563,12 +2562,10 @@ static int bcm_sysport_probe(struct plat
- }
-
- /* Initialize netdevice members */
- - macaddr = of_get_mac_address(dn);
- - if (IS_ERR(macaddr)) {
- + ret = of_get_mac_address(dn, dev->dev_addr);
- + if (ret) {
- dev_warn(&pdev->dev, "using random Ethernet MAC\n");
- eth_hw_addr_random(dev);
- - } else {
- - ether_addr_copy(dev->dev_addr, macaddr);
- }
-
- SET_NETDEV_DEV(dev, &pdev->dev);
- --- a/drivers/net/ethernet/broadcom/bgmac-bcma.c
- +++ b/drivers/net/ethernet/broadcom/bgmac-bcma.c
- @@ -115,7 +115,7 @@ static int bgmac_probe(struct bcma_devic
- struct ssb_sprom *sprom = &core->bus->sprom;
- struct mii_bus *mii_bus;
- struct bgmac *bgmac;
- - const u8 *mac = NULL;
- + const u8 *mac;
- int err;
-
- bgmac = bgmac_alloc(&core->dev);
- @@ -128,11 +128,10 @@ static int bgmac_probe(struct bcma_devic
-
- bcma_set_drvdata(core, bgmac);
-
- - if (bgmac->dev->of_node)
- - mac = of_get_mac_address(bgmac->dev->of_node);
- + err = of_get_mac_address(bgmac->dev->of_node, bgmac->net_dev->dev_addr);
-
- /* If no MAC address assigned via device tree, check SPROM */
- - if (IS_ERR_OR_NULL(mac)) {
- + if (err) {
- switch (core->core_unit) {
- case 0:
- mac = sprom->et0mac;
- @@ -149,10 +148,9 @@ static int bgmac_probe(struct bcma_devic
- err = -ENOTSUPP;
- goto err;
- }
- + ether_addr_copy(bgmac->net_dev->dev_addr, mac);
- }
-
- - ether_addr_copy(bgmac->net_dev->dev_addr, mac);
- -
- /* On BCM4706 we need common core to access PHY */
- if (core->id.id == BCMA_CORE_4706_MAC_GBIT &&
- !core->bus->drv_gmac_cmn.core) {
- --- a/drivers/net/ethernet/broadcom/bgmac-platform.c
- +++ b/drivers/net/ethernet/broadcom/bgmac-platform.c
- @@ -173,7 +173,7 @@ static int bgmac_probe(struct platform_d
- struct device_node *np = pdev->dev.of_node;
- struct bgmac *bgmac;
- struct resource *regs;
- - const u8 *mac_addr;
- + int ret;
-
- bgmac = bgmac_alloc(&pdev->dev);
- if (!bgmac)
- @@ -192,11 +192,10 @@ static int bgmac_probe(struct platform_d
- bgmac->dev = &pdev->dev;
- bgmac->dma_dev = &pdev->dev;
-
- - mac_addr = of_get_mac_address(np);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(bgmac->net_dev->dev_addr, mac_addr);
- - else
- - dev_warn(&pdev->dev, "MAC address not present in device tree\n");
- + ret = of_get_mac_address(np, bgmac->net_dev->dev_addr);
- + if (ret)
- + dev_warn(&pdev->dev,
- + "MAC address not present in device tree\n");
-
- bgmac->irq = platform_get_irq(pdev, 0);
- if (bgmac->irq < 0)
- --- a/drivers/net/ethernet/cadence/macb_main.c
- +++ b/drivers/net/ethernet/cadence/macb_main.c
- @@ -4487,7 +4487,6 @@ static int macb_probe(struct platform_de
- struct net_device *dev;
- struct resource *regs;
- void __iomem *mem;
- - const char *mac;
- struct macb *bp;
- int err, val;
-
- @@ -4600,15 +4599,11 @@ static int macb_probe(struct platform_de
- if (bp->caps & MACB_CAPS_NEEDS_RSTONUBR)
- bp->rx_intr_mask |= MACB_BIT(RXUBR);
-
- - mac = of_get_mac_address(np);
- - if (PTR_ERR(mac) == -EPROBE_DEFER) {
- - err = -EPROBE_DEFER;
- + err = of_get_mac_address(np, bp->dev->dev_addr);
- + if (err == -EPROBE_DEFER)
- goto err_out_free_netdev;
- - } else if (!IS_ERR_OR_NULL(mac)) {
- - ether_addr_copy(bp->dev->dev_addr, mac);
- - } else {
- + else if (err)
- macb_get_hwaddr(bp);
- - }
-
- err = of_get_phy_mode(np, &interface);
- if (err)
- --- a/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
- +++ b/drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
- @@ -1385,7 +1385,6 @@ static int octeon_mgmt_probe(struct plat
- struct net_device *netdev;
- struct octeon_mgmt *p;
- const __be32 *data;
- - const u8 *mac;
- struct resource *res_mix;
- struct resource *res_agl;
- struct resource *res_agl_prt_ctl;
- @@ -1502,11 +1501,8 @@ static int octeon_mgmt_probe(struct plat
- netdev->min_mtu = 64 - OCTEON_MGMT_RX_HEADROOM;
- netdev->max_mtu = 16383 - OCTEON_MGMT_RX_HEADROOM - VLAN_HLEN;
-
- - mac = of_get_mac_address(pdev->dev.of_node);
- -
- - if (!IS_ERR(mac))
- - ether_addr_copy(netdev->dev_addr, mac);
- - else
- + result = of_get_mac_address(pdev->dev.of_node, netdev->dev_addr);
- + if (result)
- eth_hw_addr_random(netdev);
-
- p->phy_np = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0);
- --- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
- +++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
- @@ -1474,7 +1474,6 @@ static int bgx_init_of_phy(struct bgx *b
- device_for_each_child_node(&bgx->pdev->dev, fwn) {
- struct phy_device *pd;
- struct device_node *phy_np;
- - const char *mac;
-
- /* Should always be an OF node. But if it is not, we
- * cannot handle it, so exit the loop.
- @@ -1483,9 +1482,7 @@ static int bgx_init_of_phy(struct bgx *b
- if (!node)
- break;
-
- - mac = of_get_mac_address(node);
- - if (!IS_ERR(mac))
- - ether_addr_copy(bgx->lmac[lmac].mac, mac);
- + of_get_mac_address(node, bgx->lmac[lmac].mac);
-
- SET_NETDEV_DEV(&bgx->lmac[lmac].netdev, &bgx->pdev->dev);
- bgx->lmac[lmac].lmacid = lmac;
- --- a/drivers/net/ethernet/davicom/dm9000.c
- +++ b/drivers/net/ethernet/davicom/dm9000.c
- @@ -1388,7 +1388,7 @@ static struct dm9000_plat_data *dm9000_p
- {
- struct dm9000_plat_data *pdata;
- struct device_node *np = dev->of_node;
- - const void *mac_addr;
- + int ret;
-
- if (!IS_ENABLED(CONFIG_OF) || !np)
- return ERR_PTR(-ENXIO);
- @@ -1402,11 +1402,9 @@ static struct dm9000_plat_data *dm9000_p
- if (of_find_property(np, "davicom,no-eeprom", NULL))
- pdata->flags |= DM9000_PLATF_NO_EEPROM;
-
- - mac_addr = of_get_mac_address(np);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(pdata->dev_addr, mac_addr);
- - else if (PTR_ERR(mac_addr) == -EPROBE_DEFER)
- - return ERR_CAST(mac_addr);
- + ret = of_get_mac_address(np, pdata->dev_addr);
- + if (ret == -EPROBE_DEFER)
- + return ERR_PTR(ret);
-
- return pdata;
- }
- --- a/drivers/net/ethernet/ethoc.c
- +++ b/drivers/net/ethernet/ethoc.c
- @@ -1151,11 +1151,7 @@ static int ethoc_probe(struct platform_d
- ether_addr_copy(netdev->dev_addr, pdata->hwaddr);
- priv->phy_id = pdata->phy_id;
- } else {
- - const void *mac;
- -
- - mac = of_get_mac_address(pdev->dev.of_node);
- - if (!IS_ERR(mac))
- - ether_addr_copy(netdev->dev_addr, mac);
- + of_get_mac_address(pdev->dev.of_node, netdev->dev_addr);
- priv->phy_id = -1;
- }
-
- --- a/drivers/net/ethernet/ezchip/nps_enet.c
- +++ b/drivers/net/ethernet/ezchip/nps_enet.c
- @@ -575,7 +575,6 @@ static s32 nps_enet_probe(struct platfor
- struct net_device *ndev;
- struct nps_enet_priv *priv;
- s32 err = 0;
- - const char *mac_addr;
-
- if (!dev->of_node)
- return -ENODEV;
- @@ -602,10 +601,8 @@ static s32 nps_enet_probe(struct platfor
- dev_dbg(dev, "Registers base address is 0x%p\n", priv->regs_base);
-
- /* set kernel MAC address to dev */
- - mac_addr = of_get_mac_address(dev->of_node);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(ndev->dev_addr, mac_addr);
- - else
- + err = of_get_mac_address(dev->of_node, ndev->dev_addr);
- + if (err)
- eth_hw_addr_random(ndev);
-
- /* Get IRQ number */
- --- a/drivers/net/ethernet/freescale/fec_main.c
- +++ b/drivers/net/ethernet/freescale/fec_main.c
- @@ -1666,6 +1666,7 @@ static void fec_get_mac(struct net_devic
- struct fec_enet_private *fep = netdev_priv(ndev);
- struct fec_platform_data *pdata = dev_get_platdata(&fep->pdev->dev);
- unsigned char *iap, tmpaddr[ETH_ALEN];
- + int ret;
-
- /*
- * try to get mac address in following order:
- @@ -1681,9 +1682,9 @@ static void fec_get_mac(struct net_devic
- if (!is_valid_ether_addr(iap)) {
- struct device_node *np = fep->pdev->dev.of_node;
- if (np) {
- - const char *mac = of_get_mac_address(np);
- - if (!IS_ERR(mac))
- - iap = (unsigned char *) mac;
- + ret = of_get_mac_address(np, tmpaddr);
- + if (!ret)
- + iap = tmpaddr;
- }
- }
-
- --- a/drivers/net/ethernet/freescale/fec_mpc52xx.c
- +++ b/drivers/net/ethernet/freescale/fec_mpc52xx.c
- @@ -813,7 +813,6 @@ static int mpc52xx_fec_probe(struct plat
- const u32 *prop;
- int prop_size;
- struct device_node *np = op->dev.of_node;
- - const char *mac_addr;
-
- phys_addr_t rx_fifo;
- phys_addr_t tx_fifo;
- @@ -891,10 +890,8 @@ static int mpc52xx_fec_probe(struct plat
- *
- * First try to read MAC address from DT
- */
- - mac_addr = of_get_mac_address(np);
- - if (!IS_ERR(mac_addr)) {
- - ether_addr_copy(ndev->dev_addr, mac_addr);
- - } else {
- + rv = of_get_mac_address(np, ndev->dev_addr);
- + if (rv) {
- struct mpc52xx_fec __iomem *fec = priv->fec;
-
- /*
- --- a/drivers/net/ethernet/freescale/fman/mac.c
- +++ b/drivers/net/ethernet/freescale/fman/mac.c
- @@ -616,7 +616,6 @@ static int mac_probe(struct platform_dev
- struct platform_device *of_dev;
- struct resource res;
- struct mac_priv_s *priv;
- - const u8 *mac_addr;
- u32 val;
- u8 fman_id;
- phy_interface_t phy_if;
- @@ -734,11 +733,9 @@ static int mac_probe(struct platform_dev
- priv->cell_index = (u8)val;
-
- /* Get the MAC address */
- - mac_addr = of_get_mac_address(mac_node);
- - if (IS_ERR(mac_addr))
- + err = of_get_mac_address(mac_node, mac_dev->addr);
- + if (err)
- dev_warn(dev, "of_get_mac_address(%pOF) failed\n", mac_node);
- - else
- - ether_addr_copy(mac_dev->addr, mac_addr);
-
- /* Get the port handles */
- nph = of_count_phandle_with_args(mac_node, "fsl,fman-ports", NULL);
- @@ -864,7 +861,7 @@ static int mac_probe(struct platform_dev
- if (err < 0)
- dev_err(dev, "fman_set_mac_active_pause() = %d\n", err);
-
- - if (!IS_ERR(mac_addr))
- + if (!is_zero_ether_addr(mac_dev->addr))
- dev_info(dev, "FMan MAC address: %pM\n", mac_dev->addr);
-
- priv->eth_dev = dpaa_eth_add_device(fman_id, mac_dev);
- --- a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
- +++ b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
- @@ -918,7 +918,6 @@ static int fs_enet_probe(struct platform
- const u32 *data;
- struct clk *clk;
- int err;
- - const u8 *mac_addr;
- const char *phy_connection_type;
- int privsize, len, ret = -ENODEV;
-
- @@ -1006,9 +1005,7 @@ static int fs_enet_probe(struct platform
- spin_lock_init(&fep->lock);
- spin_lock_init(&fep->tx_lock);
-
- - mac_addr = of_get_mac_address(ofdev->dev.of_node);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(ndev->dev_addr, mac_addr);
- + of_get_mac_address(ofdev->dev.of_node, ndev->dev_addr);
-
- ret = fep->ops->allocate_bd(ndev);
- if (ret)
- --- a/drivers/net/ethernet/freescale/gianfar.c
- +++ b/drivers/net/ethernet/freescale/gianfar.c
- @@ -641,7 +641,6 @@ static phy_interface_t gfar_get_interfac
- static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
- {
- const char *model;
- - const void *mac_addr;
- int err = 0, i;
- phy_interface_t interface;
- struct net_device *dev = NULL;
- @@ -783,11 +782,8 @@ static int gfar_of_init(struct platform_
- if (stash_len || stash_idx)
- priv->device_flags |= FSL_GIANFAR_DEV_HAS_BUF_STASHING;
-
- - mac_addr = of_get_mac_address(np);
- -
- - if (!IS_ERR(mac_addr)) {
- - ether_addr_copy(dev->dev_addr, mac_addr);
- - } else {
- + err = of_get_mac_address(np, dev->dev_addr);
- + if (err) {
- eth_hw_addr_random(dev);
- dev_info(&ofdev->dev, "Using random MAC address: %pM\n", dev->dev_addr);
- }
- --- a/drivers/net/ethernet/freescale/ucc_geth.c
- +++ b/drivers/net/ethernet/freescale/ucc_geth.c
- @@ -3696,7 +3696,6 @@ static int ucc_geth_probe(struct platfor
- int err, ucc_num, max_speed = 0;
- const unsigned int *prop;
- const char *sprop;
- - const void *mac_addr;
- phy_interface_t phy_interface;
- static const int enet_to_speed[] = {
- SPEED_10, SPEED_10, SPEED_10,
- @@ -3906,9 +3905,7 @@ static int ucc_geth_probe(struct platfor
- goto err_free_netdev;
- }
-
- - mac_addr = of_get_mac_address(np);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(dev->dev_addr, mac_addr);
- + of_get_mac_address(np, dev->dev_addr);
-
- ugeth->ug_info = ug_info;
- ugeth->dev = device;
- --- a/drivers/net/ethernet/hisilicon/hisi_femac.c
- +++ b/drivers/net/ethernet/hisilicon/hisi_femac.c
- @@ -772,7 +772,6 @@ static int hisi_femac_drv_probe(struct p
- struct net_device *ndev;
- struct hisi_femac_priv *priv;
- struct phy_device *phy;
- - const char *mac_addr;
- int ret;
-
- ndev = alloc_etherdev(sizeof(*priv));
- @@ -842,10 +841,8 @@ static int hisi_femac_drv_probe(struct p
- (unsigned long)phy->phy_id,
- phy_modes(phy->interface));
-
- - mac_addr = of_get_mac_address(node);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(ndev->dev_addr, mac_addr);
- - if (!is_valid_ether_addr(ndev->dev_addr)) {
- + ret = of_get_mac_address(node, ndev->dev_addr);
- + if (ret) {
- eth_hw_addr_random(ndev);
- dev_warn(dev, "using random MAC address %pM\n",
- ndev->dev_addr);
- --- a/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c
- +++ b/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c
- @@ -1098,7 +1098,6 @@ static int hix5hd2_dev_probe(struct plat
- struct net_device *ndev;
- struct hix5hd2_priv *priv;
- struct mii_bus *bus;
- - const char *mac_addr;
- int ret;
-
- ndev = alloc_etherdev(sizeof(struct hix5hd2_priv));
- @@ -1220,10 +1219,8 @@ static int hix5hd2_dev_probe(struct plat
- goto out_phy_node;
- }
-
- - mac_addr = of_get_mac_address(node);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(ndev->dev_addr, mac_addr);
- - if (!is_valid_ether_addr(ndev->dev_addr)) {
- + ret = of_get_mac_address(node, ndev->dev_addr);
- + if (ret) {
- eth_hw_addr_random(ndev);
- netdev_warn(ndev, "using random MAC address %pM\n",
- ndev->dev_addr);
- --- a/drivers/net/ethernet/lantiq_xrx200.c
- +++ b/drivers/net/ethernet/lantiq_xrx200.c
- @@ -440,7 +440,6 @@ static int xrx200_probe(struct platform_
- struct resource *res;
- struct xrx200_priv *priv;
- struct net_device *net_dev;
- - const u8 *mac;
- int err;
-
- /* alloc the network device */
- @@ -484,10 +483,8 @@ static int xrx200_probe(struct platform_
- return PTR_ERR(priv->clk);
- }
-
- - mac = of_get_mac_address(np);
- - if (!IS_ERR(mac))
- - ether_addr_copy(net_dev->dev_addr, mac);
- - else
- + err = of_get_mac_address(np, net_dev->dev_addr);
- + if (err)
- eth_hw_addr_random(net_dev);
-
- /* bring up the dma engine and IP core */
- --- a/drivers/net/ethernet/marvell/mv643xx_eth.c
- +++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
- @@ -2701,7 +2701,6 @@ static int mv643xx_eth_shared_of_add_por
- struct platform_device *ppdev;
- struct mv643xx_eth_platform_data ppd;
- struct resource res;
- - const char *mac_addr;
- int ret;
- int dev_num = 0;
-
- @@ -2732,9 +2731,7 @@ static int mv643xx_eth_shared_of_add_por
- return -EINVAL;
- }
-
- - mac_addr = of_get_mac_address(pnp);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(ppd.mac_addr, mac_addr);
- + of_get_mac_address(pnp, ppd.mac_addr);
-
- mv643xx_eth_property(pnp, "tx-queue-size", ppd.tx_queue_size);
- mv643xx_eth_property(pnp, "tx-sram-addr", ppd.tx_sram_addr);
- --- a/drivers/net/ethernet/marvell/mvneta.c
- +++ b/drivers/net/ethernet/marvell/mvneta.c
- @@ -5062,7 +5062,6 @@ static int mvneta_probe(struct platform_
- struct net_device *dev;
- struct phylink *phylink;
- struct phy *comphy;
- - const char *dt_mac_addr;
- char hw_mac_addr[ETH_ALEN];
- phy_interface_t phy_mode;
- const char *mac_from;
- @@ -5158,10 +5157,9 @@ static int mvneta_probe(struct platform_
- goto err_free_ports;
- }
-
- - dt_mac_addr = of_get_mac_address(dn);
- - if (!IS_ERR(dt_mac_addr)) {
- + err = of_get_mac_address(dn, dev->dev_addr);
- + if (!err) {
- mac_from = "device tree";
- - ether_addr_copy(dev->dev_addr, dt_mac_addr);
- } else {
- mvneta_get_mac_addr(pp, hw_mac_addr);
- if (is_valid_ether_addr(hw_mac_addr)) {
- --- a/drivers/net/ethernet/marvell/prestera/prestera_main.c
- +++ b/drivers/net/ethernet/marvell/prestera/prestera_main.c
- @@ -466,20 +466,17 @@ static int prestera_switch_set_base_mac_
- {
- struct device_node *base_mac_np;
- struct device_node *np;
- - const char *base_mac;
- + int ret;
-
- np = of_find_compatible_node(NULL, NULL, "marvell,prestera");
- base_mac_np = of_parse_phandle(np, "base-mac-provider", 0);
-
- - base_mac = of_get_mac_address(base_mac_np);
- - of_node_put(base_mac_np);
- - if (!IS_ERR(base_mac))
- - ether_addr_copy(sw->base_mac, base_mac);
- -
- - if (!is_valid_ether_addr(sw->base_mac)) {
- + ret = of_get_mac_address(base_mac_np, sw->base_mac);
- + if (ret) {
- eth_random_addr(sw->base_mac);
- dev_info(prestera_dev(sw), "using random base mac address\n");
- }
- + of_node_put(base_mac_np);
-
- return prestera_hw_switch_mac_set(sw, sw->base_mac);
- }
- --- a/drivers/net/ethernet/marvell/pxa168_eth.c
- +++ b/drivers/net/ethernet/marvell/pxa168_eth.c
- @@ -1392,7 +1392,6 @@ static int pxa168_eth_probe(struct platf
- struct resource *res;
- struct clk *clk;
- struct device_node *np;
- - const unsigned char *mac_addr = NULL;
- int err;
-
- printk(KERN_NOTICE "PXA168 10/100 Ethernet Driver\n");
- @@ -1435,12 +1434,8 @@ static int pxa168_eth_probe(struct platf
-
- INIT_WORK(&pep->tx_timeout_task, pxa168_eth_tx_timeout_task);
-
- - if (pdev->dev.of_node)
- - mac_addr = of_get_mac_address(pdev->dev.of_node);
- -
- - if (!IS_ERR_OR_NULL(mac_addr)) {
- - ether_addr_copy(dev->dev_addr, mac_addr);
- - } else {
- + err = of_get_mac_address(pdev->dev.of_node, dev->dev_addr);
- + if (err) {
- /* try reading the mac address, if set by the bootloader */
- pxa168_eth_get_mac_address(dev, dev->dev_addr);
- if (!is_valid_ether_addr(dev->dev_addr)) {
- --- a/drivers/net/ethernet/marvell/sky2.c
- +++ b/drivers/net/ethernet/marvell/sky2.c
- @@ -4725,7 +4725,7 @@ static struct net_device *sky2_init_netd
- {
- struct sky2_port *sky2;
- struct net_device *dev = alloc_etherdev(sizeof(*sky2));
- - const void *iap;
- + int ret;
-
- if (!dev)
- return NULL;
- @@ -4795,10 +4795,8 @@ static struct net_device *sky2_init_netd
- * 1) from device tree data
- * 2) from internal registers set by bootloader
- */
- - iap = of_get_mac_address(hw->pdev->dev.of_node);
- - if (!IS_ERR(iap))
- - ether_addr_copy(dev->dev_addr, iap);
- - else
- + ret = of_get_mac_address(hw->pdev->dev.of_node, dev->dev_addr);
- + if (ret)
- memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port * 8,
- ETH_ALEN);
-
- --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
- +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
- @@ -2600,14 +2600,11 @@ static int __init mtk_init(struct net_de
- {
- struct mtk_mac *mac = netdev_priv(dev);
- struct mtk_eth *eth = mac->hw;
- - const char *mac_addr;
- + int ret;
-
- - mac_addr = of_get_mac_address(mac->of_node);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(dev->dev_addr, mac_addr);
- -
- - /* If the mac address is invalid, use random mac address */
- - if (!is_valid_ether_addr(dev->dev_addr)) {
- + ret = of_get_mac_address(mac->of_node, dev->dev_addr);
- + if (ret) {
- + /* If the mac address is invalid, use random mac address */
- eth_hw_addr_random(dev);
- dev_err(eth->dev, "generated random MAC address %pM\n",
- dev->dev_addr);
- --- a/drivers/net/ethernet/micrel/ks8851_common.c
- +++ b/drivers/net/ethernet/micrel/ks8851_common.c
- @@ -194,11 +194,10 @@ static void ks8851_read_mac_addr(struct
- static void ks8851_init_mac(struct ks8851_net *ks, struct device_node *np)
- {
- struct net_device *dev = ks->netdev;
- - const u8 *mac_addr;
- + int ret;
-
- - mac_addr = of_get_mac_address(np);
- - if (!IS_ERR(mac_addr)) {
- - ether_addr_copy(dev->dev_addr, mac_addr);
- + ret = of_get_mac_address(np, dev->dev_addr);
- + if (!ret) {
- ks8851_write_mac_addr(dev);
- return;
- }
- --- a/drivers/net/ethernet/microchip/lan743x_main.c
- +++ b/drivers/net/ethernet/microchip/lan743x_main.c
- @@ -2831,7 +2831,6 @@ static int lan743x_pcidev_probe(struct p
- {
- struct lan743x_adapter *adapter = NULL;
- struct net_device *netdev = NULL;
- - const void *mac_addr;
- int ret = -ENODEV;
-
- netdev = devm_alloc_etherdev(&pdev->dev,
- @@ -2848,9 +2847,7 @@ static int lan743x_pcidev_probe(struct p
- NETIF_MSG_IFDOWN | NETIF_MSG_TX_QUEUED;
- netdev->max_mtu = LAN743X_MAX_FRAME_SIZE;
-
- - mac_addr = of_get_mac_address(pdev->dev.of_node);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(adapter->mac_address, mac_addr);
- + of_get_mac_address(pdev->dev.of_node, adapter->mac_address);
-
- ret = lan743x_pci_init(adapter, pdev);
- if (ret)
- --- a/drivers/net/ethernet/nxp/lpc_eth.c
- +++ b/drivers/net/ethernet/nxp/lpc_eth.c
- @@ -1347,9 +1347,7 @@ static int lpc_eth_drv_probe(struct plat
- __lpc_get_mac(pldat, ndev->dev_addr);
-
- if (!is_valid_ether_addr(ndev->dev_addr)) {
- - const char *macaddr = of_get_mac_address(np);
- - if (!IS_ERR(macaddr))
- - ether_addr_copy(ndev->dev_addr, macaddr);
- + of_get_mac_address(np, ndev->dev_addr);
- }
- if (!is_valid_ether_addr(ndev->dev_addr))
- eth_hw_addr_random(ndev);
- --- a/drivers/net/ethernet/qualcomm/qca_spi.c
- +++ b/drivers/net/ethernet/qualcomm/qca_spi.c
- @@ -885,7 +885,7 @@ qca_spi_probe(struct spi_device *spi)
- struct net_device *qcaspi_devs = NULL;
- u8 legacy_mode = 0;
- u16 signature;
- - const char *mac;
- + int ret;
-
- if (!spi->dev.of_node) {
- dev_err(&spi->dev, "Missing device tree\n");
- @@ -962,12 +962,8 @@ qca_spi_probe(struct spi_device *spi)
-
- spi_set_drvdata(spi, qcaspi_devs);
-
- - mac = of_get_mac_address(spi->dev.of_node);
- -
- - if (!IS_ERR(mac))
- - ether_addr_copy(qca->net_dev->dev_addr, mac);
- -
- - if (!is_valid_ether_addr(qca->net_dev->dev_addr)) {
- + ret = of_get_mac_address(spi->dev.of_node, qca->net_dev->dev_addr);
- + if (ret) {
- eth_hw_addr_random(qca->net_dev);
- dev_info(&spi->dev, "Using random MAC address: %pM\n",
- qca->net_dev->dev_addr);
- --- a/drivers/net/ethernet/qualcomm/qca_uart.c
- +++ b/drivers/net/ethernet/qualcomm/qca_uart.c
- @@ -323,7 +323,6 @@ static int qca_uart_probe(struct serdev_
- {
- struct net_device *qcauart_dev = alloc_etherdev(sizeof(struct qcauart));
- struct qcauart *qca;
- - const char *mac;
- u32 speed = 115200;
- int ret;
-
- @@ -348,12 +347,8 @@ static int qca_uart_probe(struct serdev_
-
- of_property_read_u32(serdev->dev.of_node, "current-speed", &speed);
-
- - mac = of_get_mac_address(serdev->dev.of_node);
- -
- - if (!IS_ERR(mac))
- - ether_addr_copy(qca->net_dev->dev_addr, mac);
- -
- - if (!is_valid_ether_addr(qca->net_dev->dev_addr)) {
- + ret = of_get_mac_address(serdev->dev.of_node, qca->net_dev->dev_addr);
- + if (ret) {
- eth_hw_addr_random(qca->net_dev);
- dev_info(&serdev->dev, "Using random MAC address: %pM\n",
- qca->net_dev->dev_addr);
- --- a/drivers/net/ethernet/renesas/ravb_main.c
- +++ b/drivers/net/ethernet/renesas/ravb_main.c
- @@ -109,11 +109,13 @@ static void ravb_set_buffer_align(struct
- * Ethernet AVB device doesn't have ROM for MAC address.
- * This function gets the MAC address that was used by a bootloader.
- */
- -static void ravb_read_mac_address(struct net_device *ndev, const u8 *mac)
- +static void ravb_read_mac_address(struct device_node *np,
- + struct net_device *ndev)
- {
- - if (!IS_ERR(mac)) {
- - ether_addr_copy(ndev->dev_addr, mac);
- - } else {
- + int ret;
- +
- + ret = of_get_mac_address(np, ndev->dev_addr);
- + if (ret) {
- u32 mahr = ravb_read(ndev, MAHR);
- u32 malr = ravb_read(ndev, MALR);
-
- @@ -2189,7 +2191,7 @@ static int ravb_probe(struct platform_de
- priv->msg_enable = RAVB_DEF_MSG_ENABLE;
-
- /* Read and set MAC address */
- - ravb_read_mac_address(ndev, of_get_mac_address(np));
- + ravb_read_mac_address(np, ndev);
- if (!is_valid_ether_addr(ndev->dev_addr)) {
- dev_warn(&pdev->dev,
- "no valid MAC address supplied, using a random one\n");
- --- a/drivers/net/ethernet/renesas/sh_eth.c
- +++ b/drivers/net/ethernet/renesas/sh_eth.c
- @@ -3145,7 +3145,6 @@ static struct sh_eth_plat_data *sh_eth_p
- struct device_node *np = dev->of_node;
- struct sh_eth_plat_data *pdata;
- phy_interface_t interface;
- - const char *mac_addr;
- int ret;
-
- pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
- @@ -3157,9 +3156,7 @@ static struct sh_eth_plat_data *sh_eth_p
- return NULL;
- pdata->phy_interface = interface;
-
- - mac_addr = of_get_mac_address(np);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(pdata->mac_addr, mac_addr);
- + of_get_mac_address(np, pdata->mac_addr);
-
- pdata->no_ether_link =
- of_property_read_bool(np, "renesas,no-ether-link");
- --- a/drivers/net/ethernet/samsung/sxgbe/sxgbe_platform.c
- +++ b/drivers/net/ethernet/samsung/sxgbe/sxgbe_platform.c
- @@ -25,8 +25,7 @@
-
- #ifdef CONFIG_OF
- static int sxgbe_probe_config_dt(struct platform_device *pdev,
- - struct sxgbe_plat_data *plat,
- - const char **mac)
- + struct sxgbe_plat_data *plat)
- {
- struct device_node *np = pdev->dev.of_node;
- struct sxgbe_dma_cfg *dma_cfg;
- @@ -35,7 +34,6 @@ static int sxgbe_probe_config_dt(struct
- if (!np)
- return -ENODEV;
-
- - *mac = of_get_mac_address(np);
- err = of_get_phy_mode(np, &plat->interface);
- if (err && err != -ENODEV)
- return err;
- @@ -63,8 +61,7 @@ static int sxgbe_probe_config_dt(struct
- }
- #else
- static int sxgbe_probe_config_dt(struct platform_device *pdev,
- - struct sxgbe_plat_data *plat,
- - const char **mac)
- + struct sxgbe_plat_data *plat)
- {
- return -ENOSYS;
- }
- @@ -85,7 +82,6 @@ static int sxgbe_platform_probe(struct p
- void __iomem *addr;
- struct sxgbe_priv_data *priv = NULL;
- struct sxgbe_plat_data *plat_dat = NULL;
- - const char *mac = NULL;
- struct net_device *ndev = platform_get_drvdata(pdev);
- struct device_node *node = dev->of_node;
-
- @@ -101,7 +97,7 @@ static int sxgbe_platform_probe(struct p
- if (!plat_dat)
- return -ENOMEM;
-
- - ret = sxgbe_probe_config_dt(pdev, plat_dat, &mac);
- + ret = sxgbe_probe_config_dt(pdev, plat_dat);
- if (ret) {
- pr_err("%s: main dt probe failed\n", __func__);
- return ret;
- @@ -122,8 +118,7 @@ static int sxgbe_platform_probe(struct p
- }
-
- /* Get MAC address if available (DT) */
- - if (!IS_ERR_OR_NULL(mac))
- - ether_addr_copy(priv->dev->dev_addr, mac);
- + of_get_mac_address(node, priv->dev->dev_addr);
-
- /* Get the TX/RX IRQ numbers */
- for (i = 0, chan = 1; i < SXGBE_TX_QUEUES; i++) {
- --- a/drivers/net/ethernet/socionext/sni_ave.c
- +++ b/drivers/net/ethernet/socionext/sni_ave.c
- @@ -1559,7 +1559,6 @@ static int ave_probe(struct platform_dev
- struct ave_private *priv;
- struct net_device *ndev;
- struct device_node *np;
- - const void *mac_addr;
- void __iomem *base;
- const char *name;
- int i, irq, ret;
- @@ -1600,12 +1599,9 @@ static int ave_probe(struct platform_dev
-
- ndev->max_mtu = AVE_MAX_ETHFRAME - (ETH_HLEN + ETH_FCS_LEN);
-
- - mac_addr = of_get_mac_address(np);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(ndev->dev_addr, mac_addr);
- -
- - /* if the mac address is invalid, use random mac address */
- - if (!is_valid_ether_addr(ndev->dev_addr)) {
- + ret = of_get_mac_address(np, ndev->dev_addr);
- + if (ret) {
- + /* if the mac address is invalid, use random mac address */
- eth_hw_addr_random(ndev);
- dev_warn(dev, "Using random MAC address: %pM\n",
- ndev->dev_addr);
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-anarion.c
- @@ -115,7 +115,7 @@ static int anarion_dwmac_probe(struct pl
- if (IS_ERR(gmac))
- return PTR_ERR(gmac);
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c
- @@ -445,7 +445,7 @@ static int dwc_eth_dwmac_probe(struct pl
- if (IS_ERR(stmmac_res.addr))
- return PTR_ERR(stmmac_res.addr);
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-generic.c
- @@ -27,7 +27,7 @@ static int dwmac_generic_probe(struct pl
- return ret;
-
- if (pdev->dev.of_node) {
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat)) {
- dev_err(&pdev->dev, "dt configuration failed\n");
- return PTR_ERR(plat_dat);
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c
- @@ -226,7 +226,7 @@ static int imx_dwmac_probe(struct platfo
- if (!dwmac)
- return -ENOMEM;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c
- @@ -88,7 +88,7 @@ static int intel_eth_plat_probe(struct p
- if (ret)
- return ret;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat)) {
- dev_err(&pdev->dev, "dt configuration failed\n");
- return PTR_ERR(plat_dat);
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
- @@ -255,7 +255,7 @@ static int ipq806x_gmac_probe(struct pla
- if (val)
- return val;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c
- @@ -37,7 +37,7 @@ static int lpc18xx_dwmac_probe(struct pl
- if (ret)
- return ret;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-mediatek.c
- @@ -407,7 +407,7 @@ static int mediatek_dwmac_probe(struct p
- if (ret)
- return ret;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c
- @@ -52,7 +52,7 @@ static int meson6_dwmac_probe(struct pla
- if (ret)
- return ret;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c
- @@ -370,7 +370,7 @@ static int meson8b_dwmac_probe(struct pl
- if (ret)
- return ret;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c
- @@ -118,7 +118,7 @@ static int oxnas_dwmac_probe(struct plat
- if (ret)
- return ret;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
- @@ -461,7 +461,7 @@ static int qcom_ethqos_probe(struct plat
- if (ret)
- return ret;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat)) {
- dev_err(&pdev->dev, "dt configuration failed\n");
- return PTR_ERR(plat_dat);
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
- @@ -1392,7 +1392,7 @@ static int rk_gmac_probe(struct platform
- if (ret)
- return ret;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
- @@ -397,7 +397,7 @@ static int socfpga_dwmac_probe(struct pl
- if (ret)
- return ret;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c
- @@ -325,7 +325,7 @@ static int sti_dwmac_probe(struct platfo
- if (ret)
- return ret;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c
- @@ -371,7 +371,7 @@ static int stm32_dwmac_probe(struct plat
- if (ret)
- return ret;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
- @@ -1203,7 +1203,7 @@ static int sun8i_dwmac_probe(struct plat
- if (ret)
- return -EINVAL;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
- @@ -108,7 +108,7 @@ static int sun7i_gmac_probe(struct platf
- if (ret)
- return ret;
-
- - plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac);
- + plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
- if (IS_ERR(plat_dat))
- return PTR_ERR(plat_dat);
-
- --- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
- +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
- @@ -25,7 +25,7 @@
-
- struct stmmac_resources {
- void __iomem *addr;
- - const char *mac;
- + u8 mac[ETH_ALEN];
- int wol_irq;
- int lpi_irq;
- int irq;
- --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
- @@ -5000,7 +5000,7 @@ int stmmac_dvr_probe(struct device *devi
- priv->wol_irq = res->wol_irq;
- priv->lpi_irq = res->lpi_irq;
-
- - if (!IS_ERR_OR_NULL(res->mac))
- + if (!is_zero_ether_addr(res->mac))
- memcpy(priv->dev->dev_addr, res->mac, ETH_ALEN);
-
- dev_set_drvdata(device, priv->dev);
- --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
- +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
- @@ -395,7 +395,7 @@ static int stmmac_of_get_mac_mode(struct
- * set some private fields that will be used by the main at runtime.
- */
- struct plat_stmmacenet_data *
- -stmmac_probe_config_dt(struct platform_device *pdev, const char **mac)
- +stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)
- {
- struct device_node *np = pdev->dev.of_node;
- struct plat_stmmacenet_data *plat;
- @@ -407,12 +407,12 @@ stmmac_probe_config_dt(struct platform_d
- if (!plat)
- return ERR_PTR(-ENOMEM);
-
- - *mac = of_get_mac_address(np);
- - if (IS_ERR(*mac)) {
- - if (PTR_ERR(*mac) == -EPROBE_DEFER)
- - return ERR_CAST(*mac);
- + rc = of_get_mac_address(np, mac);
- + if (rc) {
- + if (rc == -EPROBE_DEFER)
- + return ERR_PTR(rc);
-
- - *mac = NULL;
- + eth_zero_addr(mac);
- }
-
- phy_mode = device_get_phy_mode(&pdev->dev);
- @@ -643,7 +643,7 @@ void stmmac_remove_config_dt(struct plat
- }
- #else
- struct plat_stmmacenet_data *
- -stmmac_probe_config_dt(struct platform_device *pdev, const char **mac)
- +stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)
- {
- return ERR_PTR(-EINVAL);
- }
- --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.h
- +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.h
- @@ -12,7 +12,7 @@
- #include "stmmac.h"
-
- struct plat_stmmacenet_data *
- -stmmac_probe_config_dt(struct platform_device *pdev, const char **mac);
- +stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac);
- void stmmac_remove_config_dt(struct platform_device *pdev,
- struct plat_stmmacenet_data *plat);
-
- --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c
- +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
- @@ -1742,7 +1742,6 @@ static int am65_cpsw_nuss_init_slave_por
-
- for_each_child_of_node(node, port_np) {
- struct am65_cpsw_port *port;
- - const void *mac_addr;
- u32 port_id;
-
- /* it is not a slave port node, continue */
- @@ -1821,15 +1820,15 @@ static int am65_cpsw_nuss_init_slave_por
- return ret;
- }
-
- - mac_addr = of_get_mac_address(port_np);
- - if (!IS_ERR(mac_addr)) {
- - ether_addr_copy(port->slave.mac_addr, mac_addr);
- - } else if (am65_cpsw_am654_get_efuse_macid(port_np,
- - port->port_id,
- - port->slave.mac_addr) ||
- - !is_valid_ether_addr(port->slave.mac_addr)) {
- - random_ether_addr(port->slave.mac_addr);
- - dev_err(dev, "Use random MAC address\n");
- + ret = of_get_mac_address(port_np, port->slave.mac_addr);
- + if (ret) {
- + am65_cpsw_am654_get_efuse_macid(port_np,
- + port->port_id,
- + port->slave.mac_addr);
- + if (!is_valid_ether_addr(port->slave.mac_addr)) {
- + random_ether_addr(port->slave.mac_addr);
- + dev_err(dev, "Use random MAC address\n");
- + }
- }
- }
- of_node_put(node);
- --- a/drivers/net/ethernet/ti/cpsw.c
- +++ b/drivers/net/ethernet/ti/cpsw.c
- @@ -1308,7 +1308,6 @@ static int cpsw_probe_dt(struct cpsw_pla
-
- for_each_available_child_of_node(node, slave_node) {
- struct cpsw_slave_data *slave_data = data->slave_data + i;
- - const void *mac_addr = NULL;
- int lenp;
- const __be32 *parp;
-
- @@ -1380,10 +1379,8 @@ static int cpsw_probe_dt(struct cpsw_pla
- }
-
- no_phy_slave:
- - mac_addr = of_get_mac_address(slave_node);
- - if (!IS_ERR(mac_addr)) {
- - ether_addr_copy(slave_data->mac_addr, mac_addr);
- - } else {
- + ret = of_get_mac_address(slave_node, slave_data->mac_addr);
- + if (ret) {
- ret = ti_cm_get_macid(&pdev->dev, i,
- slave_data->mac_addr);
- if (ret)
- --- a/drivers/net/ethernet/ti/cpsw_new.c
- +++ b/drivers/net/ethernet/ti/cpsw_new.c
- @@ -1269,7 +1269,6 @@ static int cpsw_probe_dt(struct cpsw_com
-
- for_each_child_of_node(tmp_node, port_np) {
- struct cpsw_slave_data *slave_data;
- - const void *mac_addr;
- u32 port_id;
-
- ret = of_property_read_u32(port_np, "reg", &port_id);
- @@ -1328,10 +1327,8 @@ static int cpsw_probe_dt(struct cpsw_com
- goto err_node_put;
- }
-
- - mac_addr = of_get_mac_address(port_np);
- - if (!IS_ERR(mac_addr)) {
- - ether_addr_copy(slave_data->mac_addr, mac_addr);
- - } else {
- + ret = of_get_mac_address(port_np, slave_data->mac_addr);
- + if (ret) {
- ret = ti_cm_get_macid(dev, port_id - 1,
- slave_data->mac_addr);
- if (ret)
- --- a/drivers/net/ethernet/ti/davinci_emac.c
- +++ b/drivers/net/ethernet/ti/davinci_emac.c
- @@ -1699,7 +1699,6 @@ davinci_emac_of_get_pdata(struct platfor
- const struct of_device_id *match;
- const struct emac_platform_data *auxdata;
- struct emac_platform_data *pdata = NULL;
- - const u8 *mac_addr;
-
- if (!IS_ENABLED(CONFIG_OF) || !pdev->dev.of_node)
- return dev_get_platdata(&pdev->dev);
- @@ -1711,11 +1710,8 @@ davinci_emac_of_get_pdata(struct platfor
- np = pdev->dev.of_node;
- pdata->version = EMAC_VERSION_2;
-
- - if (!is_valid_ether_addr(pdata->mac_addr)) {
- - mac_addr = of_get_mac_address(np);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(pdata->mac_addr, mac_addr);
- - }
- + if (!is_valid_ether_addr(pdata->mac_addr))
- + of_get_mac_address(np, pdata->mac_addr);
-
- of_property_read_u32(np, "ti,davinci-ctrl-reg-offset",
- &pdata->ctrl_reg_offset);
- --- a/drivers/net/ethernet/ti/netcp_core.c
- +++ b/drivers/net/ethernet/ti/netcp_core.c
- @@ -1966,7 +1966,6 @@ static int netcp_create_interface(struct
- struct resource res;
- void __iomem *efuse = NULL;
- u32 efuse_mac = 0;
- - const void *mac_addr;
- u8 efuse_mac_addr[6];
- u32 temp[2];
- int ret = 0;
- @@ -2036,10 +2035,8 @@ static int netcp_create_interface(struct
- devm_iounmap(dev, efuse);
- devm_release_mem_region(dev, res.start, size);
- } else {
- - mac_addr = of_get_mac_address(node_interface);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(ndev->dev_addr, mac_addr);
- - else
- + ret = of_get_mac_address(node_interface, ndev->dev_addr);
- + if (ret)
- eth_random_addr(ndev->dev_addr);
- }
-
- --- a/drivers/net/ethernet/wiznet/w5100-spi.c
- +++ b/drivers/net/ethernet/wiznet/w5100-spi.c
- @@ -423,8 +423,14 @@ static int w5100_spi_probe(struct spi_de
- const struct of_device_id *of_id;
- const struct w5100_ops *ops;
- kernel_ulong_t driver_data;
- + const void *mac = NULL;
- + u8 tmpmac[ETH_ALEN];
- int priv_size;
- - const void *mac = of_get_mac_address(spi->dev.of_node);
- + int ret;
- +
- + ret = of_get_mac_address(spi->dev.of_node, tmpmac);
- + if (!ret)
- + mac = tmpmac;
-
- if (spi->dev.of_node) {
- of_id = of_match_device(w5100_of_match, &spi->dev);
- --- a/drivers/net/ethernet/wiznet/w5100.c
- +++ b/drivers/net/ethernet/wiznet/w5100.c
- @@ -1159,7 +1159,7 @@ int w5100_probe(struct device *dev, cons
- INIT_WORK(&priv->setrx_work, w5100_setrx_work);
- INIT_WORK(&priv->restart_work, w5100_restart_work);
-
- - if (!IS_ERR_OR_NULL(mac_addr))
- + if (mac_addr)
- memcpy(ndev->dev_addr, mac_addr, ETH_ALEN);
- else
- eth_hw_addr_random(ndev);
- --- a/drivers/net/ethernet/xilinx/ll_temac_main.c
- +++ b/drivers/net/ethernet/xilinx/ll_temac_main.c
- @@ -438,7 +438,7 @@ static void temac_do_set_mac_address(str
-
- static int temac_init_mac_address(struct net_device *ndev, const void *address)
- {
- - ether_addr_copy(ndev->dev_addr, address);
- + memcpy(ndev->dev_addr, address, ETH_ALEN);
- if (!is_valid_ether_addr(ndev->dev_addr))
- eth_hw_addr_random(ndev);
- temac_do_set_mac_address(ndev);
- @@ -1370,7 +1370,7 @@ static int temac_probe(struct platform_d
- struct device_node *temac_np = dev_of_node(&pdev->dev), *dma_np;
- struct temac_local *lp;
- struct net_device *ndev;
- - const void *addr;
- + u8 addr[ETH_ALEN];
- __be32 *p;
- bool little_endian;
- int rc = 0;
- @@ -1563,8 +1563,8 @@ static int temac_probe(struct platform_d
-
- if (temac_np) {
- /* Retrieve the MAC address */
- - addr = of_get_mac_address(temac_np);
- - if (IS_ERR(addr)) {
- + rc = of_get_mac_address(temac_np, addr);
- + if (rc) {
- dev_err(&pdev->dev, "could not find MAC address\n");
- return -ENODEV;
- }
- --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
- +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
- @@ -1843,8 +1843,8 @@ static int axienet_probe(struct platform
- struct device_node *np;
- struct axienet_local *lp;
- struct net_device *ndev;
- - const void *mac_addr;
- struct resource *ethres;
- + u8 mac_addr[ETH_ALEN];
- int addr_width = 32;
- u32 value;
-
- @@ -2044,13 +2044,14 @@ static int axienet_probe(struct platform
- dev_info(&pdev->dev, "Ethernet core IRQ not defined\n");
-
- /* Retrieve the MAC address */
- - mac_addr = of_get_mac_address(pdev->dev.of_node);
- - if (IS_ERR(mac_addr)) {
- - dev_warn(&pdev->dev, "could not find MAC address property: %ld\n",
- - PTR_ERR(mac_addr));
- - mac_addr = NULL;
- + ret = of_get_mac_address(pdev->dev.of_node, mac_addr);
- + if (!ret) {
- + axienet_set_mac_address(ndev, mac_addr);
- + } else {
- + dev_warn(&pdev->dev, "could not find MAC address property: %d\n",
- + ret);
- + axienet_set_mac_address(ndev, NULL);
- }
- - axienet_set_mac_address(ndev, mac_addr);
-
- lp->coalesce_count_rx = XAXIDMA_DFT_RX_THRESHOLD;
- lp->coalesce_count_tx = XAXIDMA_DFT_TX_THRESHOLD;
- --- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c
- +++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
- @@ -1107,7 +1107,6 @@ static int xemaclite_of_probe(struct pla
- struct net_device *ndev = NULL;
- struct net_local *lp = NULL;
- struct device *dev = &ofdev->dev;
- - const void *mac_address;
-
- int rc = 0;
-
- @@ -1149,12 +1148,9 @@ static int xemaclite_of_probe(struct pla
- lp->next_rx_buf_to_use = 0x0;
- lp->tx_ping_pong = get_bool(ofdev, "xlnx,tx-ping-pong");
- lp->rx_ping_pong = get_bool(ofdev, "xlnx,rx-ping-pong");
- - mac_address = of_get_mac_address(ofdev->dev.of_node);
-
- - if (!IS_ERR(mac_address)) {
- - /* Set the MAC address. */
- - ether_addr_copy(ndev->dev_addr, mac_address);
- - } else {
- + rc = of_get_mac_address(ofdev->dev.of_node, ndev->dev_addr);
- + if (rc) {
- dev_warn(dev, "No MAC address found, using random\n");
- eth_hw_addr_random(ndev);
- }
- --- a/drivers/net/wireless/ath/ath9k/init.c
- +++ b/drivers/net/wireless/ath/ath9k/init.c
- @@ -618,7 +618,6 @@ static int ath9k_of_init(struct ath_soft
- struct ath_hw *ah = sc->sc_ah;
- struct ath_common *common = ath9k_hw_common(ah);
- enum ath_bus_type bus_type = common->bus_ops->ath_bus_type;
- - const char *mac;
- char eeprom_name[100];
- int ret;
-
- @@ -641,9 +640,7 @@ static int ath9k_of_init(struct ath_soft
- ah->ah_flags |= AH_NO_EEP_SWAP;
- }
-
- - mac = of_get_mac_address(np);
- - if (!IS_ERR(mac))
- - ether_addr_copy(common->macaddr, mac);
- + of_get_mac_address(np, common->macaddr);
-
- return 0;
- }
- --- a/drivers/net/wireless/mediatek/mt76/eeprom.c
- +++ b/drivers/net/wireless/mediatek/mt76/eeprom.c
- @@ -90,15 +90,9 @@ out_put_node:
- void
- mt76_eeprom_override(struct mt76_dev *dev)
- {
- -#ifdef CONFIG_OF
- struct device_node *np = dev->dev->of_node;
- - const u8 *mac = NULL;
-
- - if (np)
- - mac = of_get_mac_address(np);
- - if (!IS_ERR_OR_NULL(mac))
- - ether_addr_copy(dev->macaddr, mac);
- -#endif
- + of_get_mac_address(np, dev->macaddr);
-
- if (!is_valid_ether_addr(dev->macaddr)) {
- eth_random_addr(dev->macaddr);
- --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
- +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
- @@ -990,11 +990,7 @@ static void rt2x00lib_rate(struct ieee80
-
- void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
- {
- - const char *mac_addr;
- -
- - mac_addr = of_get_mac_address(rt2x00dev->dev->of_node);
- - if (!IS_ERR(mac_addr))
- - ether_addr_copy(eeprom_mac_addr, mac_addr);
- + of_get_mac_address(rt2x00dev->dev->of_node, eeprom_mac_addr);
-
- if (!is_valid_ether_addr(eeprom_mac_addr)) {
- eth_random_addr(eeprom_mac_addr);
- --- a/drivers/of/of_net.c
- +++ b/drivers/of/of_net.c
- @@ -45,37 +45,29 @@ int of_get_phy_mode(struct device_node *
- }
- EXPORT_SYMBOL_GPL(of_get_phy_mode);
-
- -static const void *of_get_mac_addr(struct device_node *np, const char *name)
- +static int of_get_mac_addr(struct device_node *np, const char *name, u8 *addr)
- {
- struct property *pp = of_find_property(np, name, NULL);
-
- - if (pp && pp->length == ETH_ALEN && is_valid_ether_addr(pp->value))
- - return pp->value;
- - return NULL;
- + if (pp && pp->length == ETH_ALEN && is_valid_ether_addr(pp->value)) {
- + memcpy(addr, pp->value, ETH_ALEN);
- + return 0;
- + }
- + return -ENODEV;
- }
-
- -static const void *of_get_mac_addr_nvmem(struct device_node *np)
- +static int of_get_mac_addr_nvmem(struct device_node *np, u8 *addr)
- {
- - int ret;
- - const void *mac;
- - u8 nvmem_mac[ETH_ALEN];
- struct platform_device *pdev = of_find_device_by_node(np);
- + int ret;
-
- if (!pdev)
- - return ERR_PTR(-ENODEV);
- + return -ENODEV;
-
- - ret = nvmem_get_mac_address(&pdev->dev, &nvmem_mac);
- - if (ret) {
- - put_device(&pdev->dev);
- - return ERR_PTR(ret);
- - }
- -
- - mac = devm_kmemdup(&pdev->dev, nvmem_mac, ETH_ALEN, GFP_KERNEL);
- + ret = nvmem_get_mac_address(&pdev->dev, addr);
- put_device(&pdev->dev);
- - if (!mac)
- - return ERR_PTR(-ENOMEM);
-
- - return mac;
- + return ret;
- }
-
- /**
- @@ -98,24 +90,27 @@ static const void *of_get_mac_addr_nvmem
- * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists
- * but is all zeros.
- *
- - * Return: Will be a valid pointer on success and ERR_PTR in case of error.
- + * Return: 0 on success and errno in case of error.
- */
- -const void *of_get_mac_address(struct device_node *np)
- +int of_get_mac_address(struct device_node *np, u8 *addr)
- {
- - const void *addr;
- -
- - addr = of_get_mac_addr(np, "mac-address");
- - if (addr)
- - return addr;
- + int ret;
-
- - addr = of_get_mac_addr(np, "local-mac-address");
- - if (addr)
- - return addr;
- + if (!np)
- + return -ENODEV;
-
- - addr = of_get_mac_addr(np, "address");
- - if (addr)
- - return addr;
- + ret = of_get_mac_addr(np, "mac-address", addr);
- + if (!ret)
- + return 0;
- +
- + ret = of_get_mac_addr(np, "local-mac-address", addr);
- + if (!ret)
- + return 0;
- +
- + ret = of_get_mac_addr(np, "address", addr);
- + if (!ret)
- + return 0;
-
- - return of_get_mac_addr_nvmem(np);
- + return of_get_mac_addr_nvmem(np, addr);
- }
- EXPORT_SYMBOL(of_get_mac_address);
- --- a/drivers/staging/octeon/ethernet.c
- +++ b/drivers/staging/octeon/ethernet.c
- @@ -407,14 +407,10 @@ static int cvm_oct_common_set_mac_addres
- int cvm_oct_common_init(struct net_device *dev)
- {
- struct octeon_ethernet *priv = netdev_priv(dev);
- - const u8 *mac = NULL;
- + int ret;
-
- - if (priv->of_node)
- - mac = of_get_mac_address(priv->of_node);
- -
- - if (!IS_ERR_OR_NULL(mac))
- - ether_addr_copy(dev->dev_addr, mac);
- - else
- + ret = of_get_mac_address(priv->of_node, dev->dev_addr);
- + if (ret)
- eth_hw_addr_random(dev);
-
- /*
- --- a/drivers/staging/wfx/main.c
- +++ b/drivers/staging/wfx/main.c
- @@ -339,7 +339,6 @@ int wfx_probe(struct wfx_dev *wdev)
- {
- int i;
- int err;
- - const void *macaddr;
- struct gpio_desc *gpio_saved;
-
- // During first part of boot, gpio_wakeup cannot yet been used. So
- @@ -428,9 +427,9 @@ int wfx_probe(struct wfx_dev *wdev)
-
- for (i = 0; i < ARRAY_SIZE(wdev->addresses); i++) {
- eth_zero_addr(wdev->addresses[i].addr);
- - macaddr = of_get_mac_address(wdev->dev->of_node);
- - if (!IS_ERR_OR_NULL(macaddr)) {
- - ether_addr_copy(wdev->addresses[i].addr, macaddr);
- + err = of_get_mac_address(wdev->dev->of_node,
- + wdev->addresses[i].addr);
- + if (!err) {
- wdev->addresses[i].addr[ETH_ALEN - 1] += i;
- } else {
- ether_addr_copy(wdev->addresses[i].addr,
- --- a/include/linux/of_net.h
- +++ b/include/linux/of_net.h
- @@ -13,7 +13,7 @@
-
- struct net_device;
- extern int of_get_phy_mode(struct device_node *np, phy_interface_t *interface);
- -extern const void *of_get_mac_address(struct device_node *np);
- +extern int of_get_mac_address(struct device_node *np, u8 *mac);
- extern struct net_device *of_find_net_device_by_node(struct device_node *np);
- #else
- static inline int of_get_phy_mode(struct device_node *np,
- @@ -22,9 +22,9 @@ static inline int of_get_phy_mode(struct
- return -ENODEV;
- }
-
- -static inline const void *of_get_mac_address(struct device_node *np)
- +static inline int of_get_mac_address(struct device_node *np, u8 *mac)
- {
- - return ERR_PTR(-ENODEV);
- + return -ENODEV;
- }
-
- static inline struct net_device *of_find_net_device_by_node(struct device_node *np)
- --- a/include/net/dsa.h
- +++ b/include/net/dsa.h
- @@ -208,7 +208,7 @@ struct dsa_port {
- unsigned int index;
- const char *name;
- struct dsa_port *cpu_dp;
- - const char *mac;
- + u8 mac[ETH_ALEN];
- struct device_node *dn;
- unsigned int ageing_time;
- bool vlan_filtering;
- --- a/net/dsa/dsa2.c
- +++ b/net/dsa/dsa2.c
- @@ -288,7 +288,7 @@ static int dsa_port_setup(struct dsa_por
-
- break;
- case DSA_PORT_TYPE_USER:
- - dp->mac = of_get_mac_address(dp->dn);
- + of_get_mac_address(dp->dn, dp->mac);
- err = dsa_slave_create(dp);
- if (err)
- break;
- --- a/net/dsa/slave.c
- +++ b/net/dsa/slave.c
- @@ -1855,7 +1855,7 @@ int dsa_slave_create(struct dsa_port *po
- slave_dev->hw_features |= NETIF_F_HW_TC;
- slave_dev->features |= NETIF_F_LLTX;
- slave_dev->ethtool_ops = &dsa_slave_ethtool_ops;
- - if (!IS_ERR_OR_NULL(port->mac))
- + if (!is_zero_ether_addr(port->mac))
- ether_addr_copy(slave_dev->dev_addr, port->mac);
- else
- eth_hw_addr_inherit(slave_dev, master);
- --- a/net/ethernet/eth.c
- +++ b/net/ethernet/eth.c
- @@ -506,13 +506,14 @@ unsigned char * __weak arch_get_platform
-
- int eth_platform_get_mac_address(struct device *dev, u8 *mac_addr)
- {
- - const unsigned char *addr = NULL;
- + unsigned char *addr;
- + int ret;
-
- - if (dev->of_node)
- - addr = of_get_mac_address(dev->of_node);
- - if (IS_ERR_OR_NULL(addr))
- - addr = arch_get_platform_mac_address();
- + ret = of_get_mac_address(dev->of_node, mac_addr);
- + if (!ret)
- + return 0;
-
- + addr = arch_get_platform_mac_address();
- if (!addr)
- return -ENODEV;
-
|