@@ -1675,33 +1675,24 @@ static void rtl_link_chg_patch(struct rtl8169_private *tp)
1675
1675
}
1676
1676
}
1677
1677
1678
- static void __rtl8169_check_link_status (struct net_device * dev ,
1679
- struct rtl8169_private * tp ,
1680
- void __iomem * ioaddr , bool pm )
1678
+ static void rtl8169_check_link_status (struct net_device * dev ,
1679
+ struct rtl8169_private * tp ,
1680
+ void __iomem * ioaddr )
1681
1681
{
1682
1682
if (tp -> link_ok (ioaddr )) {
1683
1683
rtl_link_chg_patch (tp );
1684
1684
/* This is to cancel a scheduled suspend if there's one. */
1685
- if (pm )
1686
- pm_request_resume (& tp -> pci_dev -> dev );
1685
+ pm_request_resume (& tp -> pci_dev -> dev );
1687
1686
netif_carrier_on (dev );
1688
1687
if (net_ratelimit ())
1689
1688
netif_info (tp , ifup , dev , "link up\n" );
1690
1689
} else {
1691
1690
netif_carrier_off (dev );
1692
1691
netif_info (tp , ifdown , dev , "link down\n" );
1693
- if (pm )
1694
- pm_schedule_suspend (& tp -> pci_dev -> dev , 5000 );
1692
+ pm_runtime_idle (& tp -> pci_dev -> dev );
1695
1693
}
1696
1694
}
1697
1695
1698
- static void rtl8169_check_link_status (struct net_device * dev ,
1699
- struct rtl8169_private * tp ,
1700
- void __iomem * ioaddr )
1701
- {
1702
- __rtl8169_check_link_status (dev , tp , ioaddr , false);
1703
- }
1704
-
1705
1696
#define WAKE_ANY (WAKE_PHY | WAKE_MAGIC | WAKE_UCAST | WAKE_BCAST | WAKE_MCAST)
1706
1697
1707
1698
static u32 __rtl8169_get_wol (struct rtl8169_private * tp )
@@ -7746,7 +7737,7 @@ static void rtl_slow_event_work(struct rtl8169_private *tp)
7746
7737
rtl8169_pcierr_interrupt (dev );
7747
7738
7748
7739
if (status & LinkChg )
7749
- __rtl8169_check_link_status (dev , tp , tp -> mmio_addr , true );
7740
+ rtl8169_check_link_status (dev , tp , tp -> mmio_addr );
7750
7741
7751
7742
rtl_irq_enable_all (tp );
7752
7743
}
@@ -7959,7 +7950,7 @@ static int rtl_open(struct net_device *dev)
7959
7950
rtl_unlock_work (tp );
7960
7951
7961
7952
tp -> saved_wolopts = 0 ;
7962
- pm_runtime_put_noidle (& pdev -> dev );
7953
+ pm_runtime_put_sync (& pdev -> dev );
7963
7954
7964
7955
rtl8169_check_link_status (dev , tp , ioaddr );
7965
7956
out :
@@ -8103,8 +8094,10 @@ static int rtl8169_runtime_suspend(struct device *device)
8103
8094
struct net_device * dev = pci_get_drvdata (pdev );
8104
8095
struct rtl8169_private * tp = netdev_priv (dev );
8105
8096
8106
- if (!tp -> TxDescArray )
8097
+ if (!tp -> TxDescArray ) {
8098
+ rtl_pll_power_down (tp );
8107
8099
return 0 ;
8100
+ }
8108
8101
8109
8102
rtl_lock_work (tp );
8110
8103
tp -> saved_wolopts = __rtl8169_get_wol (tp );
@@ -8146,9 +8139,11 @@ static int rtl8169_runtime_idle(struct device *device)
8146
8139
{
8147
8140
struct pci_dev * pdev = to_pci_dev (device );
8148
8141
struct net_device * dev = pci_get_drvdata (pdev );
8149
- struct rtl8169_private * tp = netdev_priv (dev );
8150
8142
8151
- return tp -> TxDescArray ? - EBUSY : 0 ;
8143
+ if (!netif_running (dev ) || !netif_carrier_ok (dev ))
8144
+ pm_schedule_suspend (device , 10000 );
8145
+
8146
+ return - EBUSY ;
8152
8147
}
8153
8148
8154
8149
static const struct dev_pm_ops rtl8169_pm_ops = {
@@ -8195,9 +8190,6 @@ static void rtl_shutdown(struct pci_dev *pdev)
8195
8190
{
8196
8191
struct net_device * dev = pci_get_drvdata (pdev );
8197
8192
struct rtl8169_private * tp = netdev_priv (dev );
8198
- struct device * d = & pdev -> dev ;
8199
-
8200
- pm_runtime_get_sync (d );
8201
8193
8202
8194
rtl8169_net_suspend (dev );
8203
8195
@@ -8215,8 +8207,6 @@ static void rtl_shutdown(struct pci_dev *pdev)
8215
8207
pci_wake_from_d3 (pdev , true);
8216
8208
pci_set_power_state (pdev , PCI_D3hot );
8217
8209
}
8218
-
8219
- pm_runtime_put_noidle (d );
8220
8210
}
8221
8211
8222
8212
static void rtl_remove_one (struct pci_dev * pdev )
@@ -8701,11 +8691,11 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
8701
8691
rtl8168_driver_start (tp );
8702
8692
}
8703
8693
8704
- if (pci_dev_run_wake (pdev ))
8705
- pm_runtime_put_noidle (& pdev -> dev );
8706
-
8707
8694
netif_carrier_off (dev );
8708
8695
8696
+ if (pci_dev_run_wake (pdev ))
8697
+ pm_runtime_put_sync (& pdev -> dev );
8698
+
8709
8699
return 0 ;
8710
8700
}
8711
8701
0 commit comments