eth: fwnode: change the return type of mac address helpers
authorJakub Kicinski <kuba@kernel.org>
Thu, 7 Oct 2021 01:06:58 +0000 (18:06 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 7 Oct 2021 12:39:51 +0000 (13:39 +0100)
fwnode_get_mac_address() and device_get_mac_address()
return a pointer to the buffer that was passed to them
on success or NULL on failure. None of the callers
care about the actual value, only if it's NULL or not.

These semantics differ from of_get_mac_address() which
returns an int so to avoid confusion make the device
helpers return an errno.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
12 files changed:
drivers/net/ethernet/apm/xgene-v2/main.c
drivers/net/ethernet/apm/xgene/xgene_enet_main.c
drivers/net/ethernet/broadcom/genet/bcmgenet.c
drivers/net/ethernet/cavium/thunder/thunder_bgx.c
drivers/net/ethernet/faraday/ftgmac100.c
drivers/net/ethernet/hisilicon/hns/hns_enet.c
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
drivers/net/ethernet/microchip/enc28j60.c
drivers/net/ethernet/qualcomm/emac/emac.c
drivers/net/ethernet/socionext/netsec.c
include/linux/etherdevice.h
net/ethernet/eth.c

index 80399c8980bd308fb026404c0bcb3ec5a1b04912..c7253ecc0fa5bbff55d7bbb6215b72d4f4981084 100644 (file)
@@ -36,7 +36,7 @@ static int xge_get_resources(struct xge_pdata *pdata)
                return -ENOMEM;
        }
 
-       if (!device_get_mac_address(dev, ndev->dev_addr, ETH_ALEN))
+       if (device_get_mac_address(dev, ndev->dev_addr, ETH_ALEN))
                eth_hw_addr_random(ndev);
 
        memcpy(ndev->perm_addr, ndev->dev_addr, ndev->addr_len);
index 5f1fc6582d74a2b624ac3351b6e0ec41f400bc11..268e099aa5e1626e9303d0d4e8db7df99c280ba9 100644 (file)
@@ -1731,7 +1731,7 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
                xgene_get_port_id_acpi(dev, pdata);
 #endif
 
-       if (!device_get_mac_address(dev, ndev->dev_addr, ETH_ALEN))
+       if (device_get_mac_address(dev, ndev->dev_addr, ETH_ALEN))
                eth_hw_addr_random(ndev);
 
        memcpy(ndev->perm_addr, ndev->dev_addr, ndev->addr_len);
index 02fe98cbabb03c94f9065d066c2b6f0906319a55..30c5dcaea802b29fb62fa0b4ac0c2131a2b2e384 100644 (file)
@@ -4084,7 +4084,7 @@ static int bcmgenet_probe(struct platform_device *pdev)
        if (pd && !IS_ERR_OR_NULL(pd->mac_address))
                eth_hw_addr_set(dev, pd->mac_address);
        else
-               if (!device_get_mac_address(&pdev->dev, dev->dev_addr, ETH_ALEN))
+               if (device_get_mac_address(&pdev->dev, dev->dev_addr, ETH_ALEN))
                        if (has_acpi_companion(&pdev->dev))
                                bcmgenet_get_hw_addr(priv, dev->dev_addr);
 
index db66d4beb28afbb86c2a569e767bd91536841397..77ce81633cdcaffd92754774c1fcbfd655757701 100644 (file)
@@ -1387,10 +1387,10 @@ static int acpi_get_mac_address(struct device *dev, struct acpi_device *adev,
                                u8 *dst)
 {
        u8 mac[ETH_ALEN];
-       u8 *addr;
+       int ret;
 
-       addr = fwnode_get_mac_address(acpi_fwnode_handle(adev), mac, ETH_ALEN);
-       if (!addr) {
+       ret = fwnode_get_mac_address(acpi_fwnode_handle(adev), mac, ETH_ALEN);
+       if (ret) {
                dev_err(dev, "MAC address invalid: %pM\n", mac);
                return -EINVAL;
        }
index ab926722557369fa4d7002d408f32e163cbc756a..8de9c99a18fb4101ccb4f31a0c1f2aae886bae4a 100644 (file)
@@ -182,10 +182,8 @@ static void ftgmac100_initial_mac(struct ftgmac100 *priv)
        u8 mac[ETH_ALEN];
        unsigned int m;
        unsigned int l;
-       void *addr;
 
-       addr = device_get_mac_address(priv->dev, mac, ETH_ALEN);
-       if (addr) {
+       if (!device_get_mac_address(priv->dev, mac, ETH_ALEN)) {
                eth_hw_addr_set(priv->netdev, mac);
                dev_info(priv->dev, "Read MAC address %pM from device tree\n",
                         mac);
index 2c4801e49aa1bb12f580aea110cedd5ce4475070..12b916399ba7b7e4e390f20ee51748b36ae62b24 100644 (file)
@@ -1212,7 +1212,7 @@ static void hns_init_mac_addr(struct net_device *ndev)
 {
        struct hns_nic_priv *priv = netdev_priv(ndev);
 
-       if (!device_get_mac_address(priv->dev, ndev->dev_addr, ETH_ALEN)) {
+       if (device_get_mac_address(priv->dev, ndev->dev_addr, ETH_ALEN)) {
                eth_hw_addr_random(ndev);
                dev_warn(priv->dev, "No valid mac, use random mac %pM",
                         ndev->dev_addr);
index 3197526455d9d9492250b633a6afb7b60e042d5a..b84f8b6fe9f421453fe3416eb9424d145aded8a7 100644 (file)
@@ -6081,7 +6081,7 @@ static void mvpp2_port_copy_mac_addr(struct net_device *dev, struct mvpp2 *priv,
        char hw_mac_addr[ETH_ALEN] = {0};
        char fw_mac_addr[ETH_ALEN];
 
-       if (fwnode_get_mac_address(fwnode, fw_mac_addr, ETH_ALEN)) {
+       if (!fwnode_get_mac_address(fwnode, fw_mac_addr, ETH_ALEN)) {
                *mac_from = "firmware node";
                eth_hw_addr_set(dev, fw_mac_addr);
                return;
index bf77e8adffbf3aa16eca0739121449ed7d19d726..fa62311d326ad38618ff4e3c2a4b2dd76ed526fa 100644 (file)
@@ -1572,7 +1572,7 @@ static int enc28j60_probe(struct spi_device *spi)
                goto error_irq;
        }
 
-       if (device_get_mac_address(&spi->dev, macaddr, sizeof(macaddr)))
+       if (!device_get_mac_address(&spi->dev, macaddr, sizeof(macaddr)))
                eth_hw_addr_set(dev, macaddr);
        else
                eth_hw_addr_random(dev);
index fbfabfc5cc510afd0e5e73cc1fc01555c2f4c62a..2e913508fbeb50ca4e6cb1bde44fb88bacfc3231 100644 (file)
@@ -549,7 +549,7 @@ static int emac_probe_resources(struct platform_device *pdev,
        int ret = 0;
 
        /* get mac address */
-       if (device_get_mac_address(&pdev->dev, maddr, ETH_ALEN))
+       if (!device_get_mac_address(&pdev->dev, maddr, ETH_ALEN))
                eth_hw_addr_set(netdev, maddr);
        else
                eth_hw_addr_random(netdev);
index c7e56dc0a4949617b55335a2d3f5417891982183..f8dd7fa5f632ab937c3434e2d34959f633511b00 100644 (file)
@@ -1978,10 +1978,10 @@ static int netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr)
 static int netsec_probe(struct platform_device *pdev)
 {
        struct resource *mmio_res, *eeprom_res, *irq_res;
-       u8 *mac, macbuf[ETH_ALEN];
        struct netsec_priv *priv;
        u32 hw_ver, phy_addr = 0;
        struct net_device *ndev;
+       u8 macbuf[ETH_ALEN];
        int ret;
 
        mmio_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -2034,12 +2034,12 @@ static int netsec_probe(struct platform_device *pdev)
                goto free_ndev;
        }
 
-       mac = device_get_mac_address(&pdev->dev, macbuf, sizeof(macbuf));
-       if (mac)
-               eth_hw_addr_set(ndev, mac);
+       ret = device_get_mac_address(&pdev->dev, macbuf, sizeof(macbuf));
+       if (!ret)
+               eth_hw_addr_set(ndev, macbuf);
 
        if (priv->eeprom_base &&
-           (!mac || !is_valid_ether_addr(ndev->dev_addr))) {
+           (ret || !is_valid_ether_addr(ndev->dev_addr))) {
                void __iomem *macp = priv->eeprom_base +
                                        NETSEC_EEPROM_MAC_ADDRESS;
 
index 39f0758274aefcd82a5da18bd31df4d16edc30d3..8299f1cd917588e7c98f198eca2a340fce965829 100644 (file)
@@ -31,9 +31,8 @@ struct fwnode_handle;
 int eth_platform_get_mac_address(struct device *dev, u8 *mac_addr);
 unsigned char *arch_get_platform_mac_address(void);
 int nvmem_get_mac_address(struct device *dev, void *addrbuf);
-void *device_get_mac_address(struct device *dev, char *addr, int alen);
-void *fwnode_get_mac_address(struct fwnode_handle *fwnode,
-                            char *addr, int alen);
+int device_get_mac_address(struct device *dev, char *addr, int alen);
+int fwnode_get_mac_address(struct fwnode_handle *fwnode, char *addr, int alen);
 
 u32 eth_get_headlen(const struct net_device *dev, const void *data, u32 len);
 __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev);
index 9ea45aae04ee4604b396453192e8aa7a746c0673..70692f5b514c607497b7fedaf62d99afcbb8f0f1 100644 (file)
@@ -560,15 +560,21 @@ int nvmem_get_mac_address(struct device *dev, void *addrbuf)
 }
 EXPORT_SYMBOL(nvmem_get_mac_address);
 
-static void *fwnode_get_mac_addr(struct fwnode_handle *fwnode,
-                                const char *name, char *addr,
-                                int alen)
+static int fwnode_get_mac_addr(struct fwnode_handle *fwnode,
+                              const char *name, char *addr, int alen)
 {
-       int ret = fwnode_property_read_u8_array(fwnode, name, addr, alen);
+       int ret;
 
-       if (ret == 0 && alen == ETH_ALEN && is_valid_ether_addr(addr))
-               return addr;
-       return NULL;
+       if (alen != ETH_ALEN)
+               return -EINVAL;
+
+       ret = fwnode_property_read_u8_array(fwnode, name, addr, alen);
+       if (ret)
+               return ret;
+
+       if (!is_valid_ether_addr(addr))
+               return -EINVAL;
+       return 0;
 }
 
 /**
@@ -594,19 +600,14 @@ static void *fwnode_get_mac_addr(struct fwnode_handle *fwnode,
  * In this case, the real MAC is in 'local-mac-address', and 'mac-address'
  * exists but is all zeros.
  */
-void *fwnode_get_mac_address(struct fwnode_handle *fwnode, char *addr, int alen)
+int fwnode_get_mac_address(struct fwnode_handle *fwnode, char *addr, int alen)
 {
-       char *res;
-
-       res = fwnode_get_mac_addr(fwnode, "mac-address", addr, alen);
-       if (res)
-               return res;
-
-       res = fwnode_get_mac_addr(fwnode, "local-mac-address", addr, alen);
-       if (res)
-               return res;
+       if (!fwnode_get_mac_addr(fwnode, "mac-address", addr, alen) ||
+           !fwnode_get_mac_addr(fwnode, "local-mac-address", addr, alen) ||
+           !fwnode_get_mac_addr(fwnode, "address", addr, alen))
+               return 0;
 
-       return fwnode_get_mac_addr(fwnode, "address", addr, alen);
+       return -ENOENT;
 }
 EXPORT_SYMBOL(fwnode_get_mac_address);
 
@@ -616,7 +617,7 @@ EXPORT_SYMBOL(fwnode_get_mac_address);
  * @addr:      Address of buffer to store the MAC in
  * @alen:      Length of the buffer pointed to by addr, should be ETH_ALEN
  */
-void *device_get_mac_address(struct device *dev, char *addr, int alen)
+int device_get_mac_address(struct device *dev, char *addr, int alen)
 {
        return fwnode_get_mac_address(dev_fwnode(dev), addr, alen);
 }