aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom/tg3.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/broadcom/tg3.c')
-rw-r--r--drivers/net/ethernet/broadcom/tg3.c18
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 }