aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sky2.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/sky2.c')
-rw-r--r--drivers/net/sky2.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index 12ff1c857bf9..6cd075e1f38a 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -2555,19 +2555,24 @@ static struct net_device_stats *sky2_get_stats(struct net_device *dev)
2555static int sky2_set_mac_address(struct net_device *dev, void *p) 2555static int sky2_set_mac_address(struct net_device *dev, void *p)
2556{ 2556{
2557 struct sky2_port *sky2 = netdev_priv(dev); 2557 struct sky2_port *sky2 = netdev_priv(dev);
2558 struct sockaddr *addr = p; 2558 struct sky2_hw *hw = sky2->hw;
2559 unsigned port = sky2->port;
2560 const struct sockaddr *addr = p;
2559 2561
2560 if (!is_valid_ether_addr(addr->sa_data)) 2562 if (!is_valid_ether_addr(addr->sa_data))
2561 return -EADDRNOTAVAIL; 2563 return -EADDRNOTAVAIL;
2562 2564
2563 memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); 2565 memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
2564 memcpy_toio(sky2->hw->regs + B2_MAC_1 + sky2->port * 8, 2566 memcpy_toio(hw->regs + B2_MAC_1 + port * 8,
2565 dev->dev_addr, ETH_ALEN); 2567 dev->dev_addr, ETH_ALEN);
2566 memcpy_toio(sky2->hw->regs + B2_MAC_2 + sky2->port * 8, 2568 memcpy_toio(hw->regs + B2_MAC_2 + port * 8,
2567 dev->dev_addr, ETH_ALEN); 2569 dev->dev_addr, ETH_ALEN);
2568 2570
2569 if (netif_running(dev)) 2571 /* virtual address for data */
2570 sky2_phy_reinit(sky2); 2572 gma_set_addr(hw, port, GM_SRC_ADDR_2L, dev->dev_addr);
2573
2574 /* physical address: used for pause frames */
2575 gma_set_addr(hw, port, GM_SRC_ADDR_1L, dev->dev_addr);
2571 2576
2572 return 0; 2577 return 0;
2573} 2578}