[TG3]: Reset chip when changing MAC address
Do the full chip reset when changing MAC address if ASF is enabled. ASF sometimes uses a different MAC address than the driver. Without the reset, the ASF MAC address may be overwritten when the driver's MAC address is changed. Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
c424cb249d
commit
58712ef9f2
@@ -5732,9 +5732,23 @@ static int tg3_set_mac_addr(struct net_device *dev, void *p)
|
|||||||
if (!netif_running(dev))
|
if (!netif_running(dev))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
|
||||||
|
/* Reset chip so that ASF can re-init any MAC addresses it
|
||||||
|
* needs.
|
||||||
|
*/
|
||||||
|
tg3_netif_stop(tp);
|
||||||
|
tg3_full_lock(tp, 1);
|
||||||
|
|
||||||
|
tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
|
||||||
|
tg3_init_hw(tp);
|
||||||
|
|
||||||
|
tg3_netif_start(tp);
|
||||||
|
tg3_full_unlock(tp);
|
||||||
|
} else {
|
||||||
spin_lock_bh(&tp->lock);
|
spin_lock_bh(&tp->lock);
|
||||||
__tg3_set_mac_addr(tp);
|
__tg3_set_mac_addr(tp);
|
||||||
spin_unlock_bh(&tp->lock);
|
spin_unlock_bh(&tp->lock);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user