mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-06 00:39:48 +00:00
ethernet: smsc: use eth_hw_addr_set()
Commit 406f42fa0d
("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: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
02bfb6beb6
commit
f15fef4c06
2 changed files with 17 additions and 13 deletions
|
@ -2162,13 +2162,15 @@ static void smsc911x_read_mac_address(struct net_device *dev)
|
|||
struct smsc911x_data *pdata = netdev_priv(dev);
|
||||
u32 mac_high16 = smsc911x_mac_read(pdata, ADDRH);
|
||||
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);
|
||||
dev->dev_addr[2] = (u8)(mac_low32 >> 16);
|
||||
dev->dev_addr[3] = (u8)(mac_low32 >> 24);
|
||||
dev->dev_addr[4] = (u8)(mac_high16);
|
||||
dev->dev_addr[5] = (u8)(mac_high16 >> 8);
|
||||
addr[0] = (u8)(mac_low32);
|
||||
addr[1] = (u8)(mac_low32 >> 8);
|
||||
addr[2] = (u8)(mac_low32 >> 16);
|
||||
addr[3] = (u8)(mac_low32 >> 24);
|
||||
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 */
|
||||
|
|
|
@ -416,6 +416,7 @@ static void smsc9420_set_mac_address(struct net_device *dev)
|
|||
static void smsc9420_check_mac_address(struct net_device *dev)
|
||||
{
|
||||
struct smsc9420_pdata *pd = netdev_priv(dev);
|
||||
u8 addr[ETH_ALEN];
|
||||
|
||||
/* Check if mac address has been specified when bringing interface up */
|
||||
if (is_valid_ether_addr(dev->dev_addr)) {
|
||||
|
@ -427,15 +428,16 @@ static void smsc9420_check_mac_address(struct net_device *dev)
|
|||
* it will already have been set */
|
||||
u32 mac_high16 = smsc9420_reg_read(pd, ADDRH);
|
||||
u32 mac_low32 = smsc9420_reg_read(pd, ADDRL);
|
||||
dev->dev_addr[0] = (u8)(mac_low32);
|
||||
dev->dev_addr[1] = (u8)(mac_low32 >> 8);
|
||||
dev->dev_addr[2] = (u8)(mac_low32 >> 16);
|
||||
dev->dev_addr[3] = (u8)(mac_low32 >> 24);
|
||||
dev->dev_addr[4] = (u8)(mac_high16);
|
||||
dev->dev_addr[5] = (u8)(mac_high16 >> 8);
|
||||
addr[0] = (u8)(mac_low32);
|
||||
addr[1] = (u8)(mac_low32 >> 8);
|
||||
addr[2] = (u8)(mac_low32 >> 16);
|
||||
addr[3] = (u8)(mac_low32 >> 24);
|
||||
addr[4] = (u8)(mac_high16);
|
||||
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 */
|
||||
eth_hw_addr_set(dev, addr);
|
||||
netif_dbg(pd, probe, pd->dev,
|
||||
"Mac Address is read from EEPROM\n");
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue