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

ethernet: smsc: use eth_hw_addr_set()

Commit 406f42fa ("net-next: When a bond have a massive amount
of VLANs...") introduced a rbtree for faster Ethernet address look
up. To maintain netdev->dev_addr in this tree we need to make all
the writes to it got through appropriate helpers.

Break the address up into an array on the stack, then call
eth_hw_addr_set().
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 02bfb6be
...@@ -2162,13 +2162,15 @@ static void smsc911x_read_mac_address(struct net_device *dev) ...@@ -2162,13 +2162,15 @@ static void smsc911x_read_mac_address(struct net_device *dev)
struct smsc911x_data *pdata = netdev_priv(dev); struct smsc911x_data *pdata = netdev_priv(dev);
u32 mac_high16 = smsc911x_mac_read(pdata, ADDRH); u32 mac_high16 = smsc911x_mac_read(pdata, ADDRH);
u32 mac_low32 = smsc911x_mac_read(pdata, ADDRL); u32 mac_low32 = smsc911x_mac_read(pdata, ADDRL);
u8 addr[ETH_ALEN];
dev->dev_addr[0] = (u8)(mac_low32);
dev->dev_addr[1] = (u8)(mac_low32 >> 8); addr[0] = (u8)(mac_low32);
dev->dev_addr[2] = (u8)(mac_low32 >> 16); addr[1] = (u8)(mac_low32 >> 8);
dev->dev_addr[3] = (u8)(mac_low32 >> 24); addr[2] = (u8)(mac_low32 >> 16);
dev->dev_addr[4] = (u8)(mac_high16); addr[3] = (u8)(mac_low32 >> 24);
dev->dev_addr[5] = (u8)(mac_high16 >> 8); addr[4] = (u8)(mac_high16);
addr[5] = (u8)(mac_high16 >> 8);
eth_hw_addr_set(dev, addr);
} }
/* Initializing private device structures, only called from probe */ /* Initializing private device structures, only called from probe */
......
...@@ -416,6 +416,7 @@ static void smsc9420_set_mac_address(struct net_device *dev) ...@@ -416,6 +416,7 @@ static void smsc9420_set_mac_address(struct net_device *dev)
static void smsc9420_check_mac_address(struct net_device *dev) static void smsc9420_check_mac_address(struct net_device *dev)
{ {
struct smsc9420_pdata *pd = netdev_priv(dev); struct smsc9420_pdata *pd = netdev_priv(dev);
u8 addr[ETH_ALEN];
/* Check if mac address has been specified when bringing interface up */ /* Check if mac address has been specified when bringing interface up */
if (is_valid_ether_addr(dev->dev_addr)) { if (is_valid_ether_addr(dev->dev_addr)) {
...@@ -427,15 +428,16 @@ static void smsc9420_check_mac_address(struct net_device *dev) ...@@ -427,15 +428,16 @@ static void smsc9420_check_mac_address(struct net_device *dev)
* it will already have been set */ * it will already have been set */
u32 mac_high16 = smsc9420_reg_read(pd, ADDRH); u32 mac_high16 = smsc9420_reg_read(pd, ADDRH);
u32 mac_low32 = smsc9420_reg_read(pd, ADDRL); u32 mac_low32 = smsc9420_reg_read(pd, ADDRL);
dev->dev_addr[0] = (u8)(mac_low32); addr[0] = (u8)(mac_low32);
dev->dev_addr[1] = (u8)(mac_low32 >> 8); addr[1] = (u8)(mac_low32 >> 8);
dev->dev_addr[2] = (u8)(mac_low32 >> 16); addr[2] = (u8)(mac_low32 >> 16);
dev->dev_addr[3] = (u8)(mac_low32 >> 24); addr[3] = (u8)(mac_low32 >> 24);
dev->dev_addr[4] = (u8)(mac_high16); addr[4] = (u8)(mac_high16);
dev->dev_addr[5] = (u8)(mac_high16 >> 8); addr[5] = (u8)(mac_high16 >> 8);
if (is_valid_ether_addr(dev->dev_addr)) { if (is_valid_ether_addr(addr)) {
/* eeprom values are valid so use them */ /* eeprom values are valid so use them */
eth_hw_addr_set(dev, addr);
netif_dbg(pd, probe, pd->dev, netif_dbg(pd, probe, pd->dev,
"Mac Address is read from EEPROM\n"); "Mac Address is read from EEPROM\n");
} else { } else {
......
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