diff options
| -rw-r--r-- | drivers/net/sky2.c | 15 |
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) | |||
| 2555 | static int sky2_set_mac_address(struct net_device *dev, void *p) | 2555 | static 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 | } |
