Commit 8017c4d8 authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller

eth: fwnode: change the return type of mac address helpers

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: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 433baf07
...@@ -36,7 +36,7 @@ static int xge_get_resources(struct xge_pdata *pdata) ...@@ -36,7 +36,7 @@ static int xge_get_resources(struct xge_pdata *pdata)
return -ENOMEM; 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); eth_hw_addr_random(ndev);
memcpy(ndev->perm_addr, ndev->dev_addr, ndev->addr_len); memcpy(ndev->perm_addr, ndev->dev_addr, ndev->addr_len);
......
...@@ -1731,7 +1731,7 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata) ...@@ -1731,7 +1731,7 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
xgene_get_port_id_acpi(dev, pdata); xgene_get_port_id_acpi(dev, pdata);
#endif #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); eth_hw_addr_random(ndev);
memcpy(ndev->perm_addr, ndev->dev_addr, ndev->addr_len); memcpy(ndev->perm_addr, ndev->dev_addr, ndev->addr_len);
......
...@@ -4084,7 +4084,7 @@ static int bcmgenet_probe(struct platform_device *pdev) ...@@ -4084,7 +4084,7 @@ static int bcmgenet_probe(struct platform_device *pdev)
if (pd && !IS_ERR_OR_NULL(pd->mac_address)) if (pd && !IS_ERR_OR_NULL(pd->mac_address))
eth_hw_addr_set(dev, pd->mac_address); eth_hw_addr_set(dev, pd->mac_address);
else 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)) if (has_acpi_companion(&pdev->dev))
bcmgenet_get_hw_addr(priv, dev->dev_addr); bcmgenet_get_hw_addr(priv, dev->dev_addr);
......
...@@ -1387,10 +1387,10 @@ static int acpi_get_mac_address(struct device *dev, struct acpi_device *adev, ...@@ -1387,10 +1387,10 @@ static int acpi_get_mac_address(struct device *dev, struct acpi_device *adev,
u8 *dst) u8 *dst)
{ {
u8 mac[ETH_ALEN]; u8 mac[ETH_ALEN];
u8 *addr; int ret;
addr = fwnode_get_mac_address(acpi_fwnode_handle(adev), mac, ETH_ALEN); ret = fwnode_get_mac_address(acpi_fwnode_handle(adev), mac, ETH_ALEN);
if (!addr) { if (ret) {
dev_err(dev, "MAC address invalid: %pM\n", mac); dev_err(dev, "MAC address invalid: %pM\n", mac);
return -EINVAL; return -EINVAL;
} }
......
...@@ -182,10 +182,8 @@ static void ftgmac100_initial_mac(struct ftgmac100 *priv) ...@@ -182,10 +182,8 @@ static void ftgmac100_initial_mac(struct ftgmac100 *priv)
u8 mac[ETH_ALEN]; u8 mac[ETH_ALEN];
unsigned int m; unsigned int m;
unsigned int l; unsigned int l;
void *addr;
addr = device_get_mac_address(priv->dev, mac, ETH_ALEN); if (!device_get_mac_address(priv->dev, mac, ETH_ALEN)) {
if (addr) {
eth_hw_addr_set(priv->netdev, mac); eth_hw_addr_set(priv->netdev, mac);
dev_info(priv->dev, "Read MAC address %pM from device tree\n", dev_info(priv->dev, "Read MAC address %pM from device tree\n",
mac); mac);
......
...@@ -1212,7 +1212,7 @@ static void hns_init_mac_addr(struct net_device *ndev) ...@@ -1212,7 +1212,7 @@ static void hns_init_mac_addr(struct net_device *ndev)
{ {
struct hns_nic_priv *priv = netdev_priv(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); eth_hw_addr_random(ndev);
dev_warn(priv->dev, "No valid mac, use random mac %pM", dev_warn(priv->dev, "No valid mac, use random mac %pM",
ndev->dev_addr); ndev->dev_addr);
......
...@@ -6081,7 +6081,7 @@ static void mvpp2_port_copy_mac_addr(struct net_device *dev, struct mvpp2 *priv, ...@@ -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 hw_mac_addr[ETH_ALEN] = {0};
char fw_mac_addr[ETH_ALEN]; 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"; *mac_from = "firmware node";
eth_hw_addr_set(dev, fw_mac_addr); eth_hw_addr_set(dev, fw_mac_addr);
return; return;
......
...@@ -1572,7 +1572,7 @@ static int enc28j60_probe(struct spi_device *spi) ...@@ -1572,7 +1572,7 @@ static int enc28j60_probe(struct spi_device *spi)
goto error_irq; 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); eth_hw_addr_set(dev, macaddr);
else else
eth_hw_addr_random(dev); eth_hw_addr_random(dev);
......
...@@ -549,7 +549,7 @@ static int emac_probe_resources(struct platform_device *pdev, ...@@ -549,7 +549,7 @@ static int emac_probe_resources(struct platform_device *pdev,
int ret = 0; int ret = 0;
/* get mac address */ /* 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); eth_hw_addr_set(netdev, maddr);
else else
eth_hw_addr_random(netdev); eth_hw_addr_random(netdev);
......
...@@ -1978,10 +1978,10 @@ static int netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr) ...@@ -1978,10 +1978,10 @@ static int netsec_register_mdio(struct netsec_priv *priv, u32 phy_addr)
static int netsec_probe(struct platform_device *pdev) static int netsec_probe(struct platform_device *pdev)
{ {
struct resource *mmio_res, *eeprom_res, *irq_res; struct resource *mmio_res, *eeprom_res, *irq_res;
u8 *mac, macbuf[ETH_ALEN];
struct netsec_priv *priv; struct netsec_priv *priv;
u32 hw_ver, phy_addr = 0; u32 hw_ver, phy_addr = 0;
struct net_device *ndev; struct net_device *ndev;
u8 macbuf[ETH_ALEN];
int ret; int ret;
mmio_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); mmio_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
...@@ -2034,12 +2034,12 @@ static int netsec_probe(struct platform_device *pdev) ...@@ -2034,12 +2034,12 @@ static int netsec_probe(struct platform_device *pdev)
goto free_ndev; goto free_ndev;
} }
mac = device_get_mac_address(&pdev->dev, macbuf, sizeof(macbuf)); ret = device_get_mac_address(&pdev->dev, macbuf, sizeof(macbuf));
if (mac) if (!ret)
eth_hw_addr_set(ndev, mac); eth_hw_addr_set(ndev, macbuf);
if (priv->eeprom_base && 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 + void __iomem *macp = priv->eeprom_base +
NETSEC_EEPROM_MAC_ADDRESS; NETSEC_EEPROM_MAC_ADDRESS;
......
...@@ -31,9 +31,8 @@ struct fwnode_handle; ...@@ -31,9 +31,8 @@ struct fwnode_handle;
int eth_platform_get_mac_address(struct device *dev, u8 *mac_addr); int eth_platform_get_mac_address(struct device *dev, u8 *mac_addr);
unsigned char *arch_get_platform_mac_address(void); unsigned char *arch_get_platform_mac_address(void);
int nvmem_get_mac_address(struct device *dev, void *addrbuf); int nvmem_get_mac_address(struct device *dev, void *addrbuf);
void *device_get_mac_address(struct device *dev, char *addr, int alen); int device_get_mac_address(struct device *dev, char *addr, int alen);
void *fwnode_get_mac_address(struct fwnode_handle *fwnode, int fwnode_get_mac_address(struct fwnode_handle *fwnode, char *addr, int alen);
char *addr, int alen);
u32 eth_get_headlen(const struct net_device *dev, const void *data, u32 len); 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); __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev);
......
...@@ -560,15 +560,21 @@ int nvmem_get_mac_address(struct device *dev, void *addrbuf) ...@@ -560,15 +560,21 @@ int nvmem_get_mac_address(struct device *dev, void *addrbuf)
} }
EXPORT_SYMBOL(nvmem_get_mac_address); EXPORT_SYMBOL(nvmem_get_mac_address);
static void *fwnode_get_mac_addr(struct fwnode_handle *fwnode, static int fwnode_get_mac_addr(struct fwnode_handle *fwnode,
const char *name, char *addr, const char *name, char *addr, int alen)
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)) if (alen != ETH_ALEN)
return addr; return -EINVAL;
return NULL;
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, ...@@ -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' * In this case, the real MAC is in 'local-mac-address', and 'mac-address'
* exists but is all zeros. * 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; if (!fwnode_get_mac_addr(fwnode, "mac-address", addr, alen) ||
!fwnode_get_mac_addr(fwnode, "local-mac-address", addr, alen) ||
res = fwnode_get_mac_addr(fwnode, "mac-address", addr, alen); !fwnode_get_mac_addr(fwnode, "address", addr, alen))
if (res) return 0;
return res;
res = fwnode_get_mac_addr(fwnode, "local-mac-address", addr, alen);
if (res)
return res;
return fwnode_get_mac_addr(fwnode, "address", addr, alen); return -ENOENT;
} }
EXPORT_SYMBOL(fwnode_get_mac_address); EXPORT_SYMBOL(fwnode_get_mac_address);
...@@ -616,7 +617,7 @@ 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 * @addr: Address of buffer to store the MAC in
* @alen: Length of the buffer pointed to by addr, should be ETH_ALEN * @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); return fwnode_get_mac_address(dev_fwnode(dev), addr, alen);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment