diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/tg3.c')
-rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index 89295306f161..432c3b867084 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -12422,6 +12422,7 @@ static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *e | |||
12422 | { | 12422 | { |
12423 | struct tg3 *tp = netdev_priv(dev); | 12423 | struct tg3 *tp = netdev_priv(dev); |
12424 | int i, irq_sync = 0, err = 0; | 12424 | int i, irq_sync = 0, err = 0; |
12425 | bool reset_phy = false; | ||
12425 | 12426 | ||
12426 | if ((ering->rx_pending > tp->rx_std_ring_mask) || | 12427 | if ((ering->rx_pending > tp->rx_std_ring_mask) || |
12427 | (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) || | 12428 | (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) || |
@@ -12453,7 +12454,13 @@ static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *e | |||
12453 | 12454 | ||
12454 | if (netif_running(dev)) { | 12455 | if (netif_running(dev)) { |
12455 | tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); | 12456 | tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); |
12456 | err = tg3_restart_hw(tp, false); | 12457 | /* Reset PHY to avoid PHY lock up */ |
12458 | if (tg3_asic_rev(tp) == ASIC_REV_5717 || | ||
12459 | tg3_asic_rev(tp) == ASIC_REV_5719 || | ||
12460 | tg3_asic_rev(tp) == ASIC_REV_5720) | ||
12461 | reset_phy = true; | ||
12462 | |||
12463 | err = tg3_restart_hw(tp, reset_phy); | ||
12457 | if (!err) | 12464 | if (!err) |
12458 | tg3_netif_start(tp); | 12465 | tg3_netif_start(tp); |
12459 | } | 12466 | } |
@@ -12487,6 +12494,7 @@ static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam | |||
12487 | { | 12494 | { |
12488 | struct tg3 *tp = netdev_priv(dev); | 12495 | struct tg3 *tp = netdev_priv(dev); |
12489 | int err = 0; | 12496 | int err = 0; |
12497 | bool reset_phy = false; | ||
12490 | 12498 | ||
12491 | if (tp->link_config.autoneg == AUTONEG_ENABLE) | 12499 | if (tp->link_config.autoneg == AUTONEG_ENABLE) |
12492 | tg3_warn_mgmt_link_flap(tp); | 12500 | tg3_warn_mgmt_link_flap(tp); |
@@ -12556,7 +12564,13 @@ static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam | |||
12556 | 12564 | ||
12557 | if (netif_running(dev)) { | 12565 | if (netif_running(dev)) { |
12558 | tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); | 12566 | tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); |
12559 | err = tg3_restart_hw(tp, false); | 12567 | /* Reset PHY to avoid PHY lock up */ |
12568 | if (tg3_asic_rev(tp) == ASIC_REV_5717 || | ||
12569 | tg3_asic_rev(tp) == ASIC_REV_5719 || | ||
12570 | tg3_asic_rev(tp) == ASIC_REV_5720) | ||
12571 | reset_phy = true; | ||
12572 | |||
12573 | err = tg3_restart_hw(tp, reset_phy); | ||
12560 | if (!err) | 12574 | if (!err) |
12561 | tg3_netif_start(tp); | 12575 | tg3_netif_start(tp); |
12562 | } | 12576 | } |