diff options
| -rw-r--r-- | drivers/net/r8169.c | 44 |
1 files changed, 9 insertions, 35 deletions
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index 182c79474434..b3cf1d20ba2c 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c | |||
| @@ -616,7 +616,6 @@ struct rtl8169_private { | |||
| 616 | u16 intr_event; | 616 | u16 intr_event; |
| 617 | u16 napi_event; | 617 | u16 napi_event; |
| 618 | u16 intr_mask; | 618 | u16 intr_mask; |
| 619 | int phy_1000_ctrl_reg; | ||
| 620 | 619 | ||
| 621 | struct mdio_ops { | 620 | struct mdio_ops { |
| 622 | void (*write)(void __iomem *, int, int); | 621 | void (*write)(void __iomem *, int, int); |
| @@ -1288,8 +1287,6 @@ static int rtl8169_set_speed_xmii(struct net_device *dev, | |||
| 1288 | bmcr |= BMCR_FULLDPLX; | 1287 | bmcr |= BMCR_FULLDPLX; |
| 1289 | } | 1288 | } |
| 1290 | 1289 | ||
| 1291 | tp->phy_1000_ctrl_reg = giga_ctrl; | ||
| 1292 | |||
| 1293 | rtl_writephy(tp, MII_BMCR, bmcr); | 1290 | rtl_writephy(tp, MII_BMCR, bmcr); |
| 1294 | 1291 | ||
| 1295 | if (tp->mac_version == RTL_GIGA_MAC_VER_02 || | 1292 | if (tp->mac_version == RTL_GIGA_MAC_VER_02 || |
| @@ -1315,10 +1312,14 @@ static int rtl8169_set_speed(struct net_device *dev, | |||
| 1315 | int ret; | 1312 | int ret; |
| 1316 | 1313 | ||
| 1317 | ret = tp->set_speed(dev, autoneg, speed, duplex, advertising); | 1314 | ret = tp->set_speed(dev, autoneg, speed, duplex, advertising); |
| 1315 | if (ret < 0) | ||
| 1316 | goto out; | ||
| 1318 | 1317 | ||
| 1319 | if (netif_running(dev) && (tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL)) | 1318 | if (netif_running(dev) && (autoneg == AUTONEG_ENABLE) && |
| 1319 | (advertising & ADVERTISED_1000baseT_Full)) { | ||
| 1320 | mod_timer(&tp->timer, jiffies + RTL8169_PHY_TIMEOUT); | 1320 | mod_timer(&tp->timer, jiffies + RTL8169_PHY_TIMEOUT); |
| 1321 | 1321 | } | |
| 1322 | out: | ||
| 1322 | return ret; | 1323 | return ret; |
| 1323 | } | 1324 | } |
| 1324 | 1325 | ||
| @@ -1328,6 +1329,8 @@ static int rtl8169_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
| 1328 | unsigned long flags; | 1329 | unsigned long flags; |
| 1329 | int ret; | 1330 | int ret; |
| 1330 | 1331 | ||
| 1332 | del_timer_sync(&tp->timer); | ||
| 1333 | |||
| 1331 | spin_lock_irqsave(&tp->lock, flags); | 1334 | spin_lock_irqsave(&tp->lock, flags); |
| 1332 | ret = rtl8169_set_speed(dev, cmd->autoneg, ethtool_cmd_speed(cmd), | 1335 | ret = rtl8169_set_speed(dev, cmd->autoneg, ethtool_cmd_speed(cmd), |
| 1333 | cmd->duplex, cmd->advertising); | 1336 | cmd->duplex, cmd->advertising); |
| @@ -2691,9 +2694,6 @@ static void rtl8169_phy_timer(unsigned long __opaque) | |||
| 2691 | 2694 | ||
| 2692 | assert(tp->mac_version > RTL_GIGA_MAC_VER_01); | 2695 | assert(tp->mac_version > RTL_GIGA_MAC_VER_01); |
| 2693 | 2696 | ||
| 2694 | if (!(tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL)) | ||
| 2695 | return; | ||
| 2696 | |||
| 2697 | spin_lock_irq(&tp->lock); | 2697 | spin_lock_irq(&tp->lock); |
| 2698 | 2698 | ||
| 2699 | if (tp->phy_reset_pending(tp)) { | 2699 | if (tp->phy_reset_pending(tp)) { |
| @@ -2718,28 +2718,6 @@ out_unlock: | |||
| 2718 | spin_unlock_irq(&tp->lock); | 2718 | spin_unlock_irq(&tp->lock); |
| 2719 | } | 2719 | } |
| 2720 | 2720 | ||
| 2721 | static inline void rtl8169_delete_timer(struct net_device *dev) | ||
| 2722 | { | ||
| 2723 | struct rtl8169_private *tp = netdev_priv(dev); | ||
| 2724 | struct timer_list *timer = &tp->timer; | ||
| 2725 | |||
| 2726 | if (tp->mac_version <= RTL_GIGA_MAC_VER_01) | ||
| 2727 | return; | ||
| 2728 | |||
| 2729 | del_timer_sync(timer); | ||
| 2730 | } | ||
| 2731 | |||
| 2732 | static inline void rtl8169_request_timer(struct net_device *dev) | ||
| 2733 | { | ||
| 2734 | struct rtl8169_private *tp = netdev_priv(dev); | ||
| 2735 | struct timer_list *timer = &tp->timer; | ||
| 2736 | |||
| 2737 | if (tp->mac_version <= RTL_GIGA_MAC_VER_01) | ||
| 2738 | return; | ||
| 2739 | |||
| 2740 | mod_timer(timer, jiffies + RTL8169_PHY_TIMEOUT); | ||
| 2741 | } | ||
| 2742 | |||
| 2743 | #ifdef CONFIG_NET_POLL_CONTROLLER | 2721 | #ifdef CONFIG_NET_POLL_CONTROLLER |
| 2744 | /* | 2722 | /* |
| 2745 | * Polling 'interrupt' - used by things like netconsole to send skbs | 2723 | * Polling 'interrupt' - used by things like netconsole to send skbs |
| @@ -3396,8 +3374,6 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 3396 | tp->phy_reset_pending = rtl8169_tbi_reset_pending; | 3374 | tp->phy_reset_pending = rtl8169_tbi_reset_pending; |
| 3397 | tp->link_ok = rtl8169_tbi_link_ok; | 3375 | tp->link_ok = rtl8169_tbi_link_ok; |
| 3398 | tp->do_ioctl = rtl_tbi_ioctl; | 3376 | tp->do_ioctl = rtl_tbi_ioctl; |
| 3399 | |||
| 3400 | tp->phy_1000_ctrl_reg = ADVERTISE_1000FULL; /* Implied by TBI */ | ||
| 3401 | } else { | 3377 | } else { |
| 3402 | tp->set_speed = rtl8169_set_speed_xmii; | 3378 | tp->set_speed = rtl8169_set_speed_xmii; |
| 3403 | tp->get_settings = rtl8169_gset_xmii; | 3379 | tp->get_settings = rtl8169_gset_xmii; |
| @@ -3593,8 +3569,6 @@ static int rtl8169_open(struct net_device *dev) | |||
| 3593 | 3569 | ||
| 3594 | rtl_hw_start(dev); | 3570 | rtl_hw_start(dev); |
| 3595 | 3571 | ||
| 3596 | rtl8169_request_timer(dev); | ||
| 3597 | |||
| 3598 | tp->saved_wolopts = 0; | 3572 | tp->saved_wolopts = 0; |
| 3599 | pm_runtime_put_noidle(&pdev->dev); | 3573 | pm_runtime_put_noidle(&pdev->dev); |
| 3600 | 3574 | ||
| @@ -5147,7 +5121,7 @@ static void rtl8169_down(struct net_device *dev) | |||
| 5147 | struct rtl8169_private *tp = netdev_priv(dev); | 5121 | struct rtl8169_private *tp = netdev_priv(dev); |
| 5148 | void __iomem *ioaddr = tp->mmio_addr; | 5122 | void __iomem *ioaddr = tp->mmio_addr; |
| 5149 | 5123 | ||
| 5150 | rtl8169_delete_timer(dev); | 5124 | del_timer_sync(&tp->timer); |
| 5151 | 5125 | ||
| 5152 | netif_stop_queue(dev); | 5126 | netif_stop_queue(dev); |
| 5153 | 5127 | ||
