@@ -3687,10 +3687,6 @@ void e1000e_power_up_phy(struct e1000_adapter *adapter)
3687
3687
*/
3688
3688
static void e1000_power_down_phy (struct e1000_adapter * adapter )
3689
3689
{
3690
- /* WoL is enabled */
3691
- if (adapter -> wol )
3692
- return ;
3693
-
3694
3690
if (adapter -> hw .phy .ops .power_down )
3695
3691
adapter -> hw .phy .ops .power_down (& adapter -> hw );
3696
3692
}
@@ -3907,10 +3903,8 @@ void e1000e_reset(struct e1000_adapter *adapter)
3907
3903
}
3908
3904
3909
3905
if (!netif_running (adapter -> netdev ) &&
3910
- !test_bit (__E1000_TESTING , & adapter -> state )) {
3906
+ !test_bit (__E1000_TESTING , & adapter -> state ))
3911
3907
e1000_power_down_phy (adapter );
3912
- return ;
3913
- }
3914
3908
3915
3909
e1000_get_phy_info (hw );
3916
3910
@@ -3977,7 +3971,12 @@ static void e1000e_flush_descriptors(struct e1000_adapter *adapter)
3977
3971
3978
3972
static void e1000e_update_stats (struct e1000_adapter * adapter );
3979
3973
3980
- void e1000e_down (struct e1000_adapter * adapter )
3974
+ /**
3975
+ * e1000e_down - quiesce the device and optionally reset the hardware
3976
+ * @adapter: board private structure
3977
+ * @reset: boolean flag to reset the hardware or not
3978
+ */
3979
+ void e1000e_down (struct e1000_adapter * adapter , bool reset )
3981
3980
{
3982
3981
struct net_device * netdev = adapter -> netdev ;
3983
3982
struct e1000_hw * hw = & adapter -> hw ;
@@ -4031,20 +4030,16 @@ void e1000e_down(struct e1000_adapter *adapter)
4031
4030
e1000_lv_jumbo_workaround_ich8lan (hw , false))
4032
4031
e_dbg ("failed to disable jumbo frame workaround mode\n" );
4033
4032
4034
- if (!pci_channel_offline (adapter -> pdev ))
4033
+ if (reset && !pci_channel_offline (adapter -> pdev ))
4035
4034
e1000e_reset (adapter );
4036
-
4037
- /* TODO: for power management, we could drop the link and
4038
- * pci_disable_device here.
4039
- */
4040
4035
}
4041
4036
4042
4037
void e1000e_reinit_locked (struct e1000_adapter * adapter )
4043
4038
{
4044
4039
might_sleep ();
4045
4040
while (test_and_set_bit (__E1000_RESETTING , & adapter -> state ))
4046
4041
usleep_range (1000 , 2000 );
4047
- e1000e_down (adapter );
4042
+ e1000e_down (adapter , true );
4048
4043
e1000e_up (adapter );
4049
4044
clear_bit (__E1000_RESETTING , & adapter -> state );
4050
4045
}
@@ -4372,14 +4367,12 @@ static int e1000_close(struct net_device *netdev)
4372
4367
pm_runtime_get_sync (& pdev -> dev );
4373
4368
4374
4369
if (!test_bit (__E1000_DOWN , & adapter -> state )) {
4375
- e1000e_down (adapter );
4370
+ e1000e_down (adapter , true );
4376
4371
e1000_free_irq (adapter );
4377
4372
}
4378
4373
4379
4374
napi_disable (& adapter -> napi );
4380
4375
4381
- e1000_power_down_phy (adapter );
4382
-
4383
4376
e1000e_free_tx_resources (adapter -> tx_ring );
4384
4377
e1000e_free_rx_resources (adapter -> rx_ring );
4385
4378
@@ -5686,7 +5679,7 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
5686
5679
e_info ("changing MTU from %d to %d\n" , netdev -> mtu , new_mtu );
5687
5680
netdev -> mtu = new_mtu ;
5688
5681
if (netif_running (netdev ))
5689
- e1000e_down (adapter );
5682
+ e1000e_down (adapter , true );
5690
5683
5691
5684
/* NOTE: netdev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN
5692
5685
* means we reserve 2 more, this pushes us to allocate from the next
@@ -5919,15 +5912,10 @@ static int e1000_init_phy_wakeup(struct e1000_adapter *adapter, u32 wufc)
5919
5912
return retval ;
5920
5913
}
5921
5914
5922
- static int __e1000_shutdown (struct pci_dev * pdev , bool runtime )
5915
+ static int e1000e_pm_freeze (struct device * dev )
5923
5916
{
5924
- struct net_device * netdev = pci_get_drvdata (pdev );
5917
+ struct net_device * netdev = pci_get_drvdata (to_pci_dev ( dev ) );
5925
5918
struct e1000_adapter * adapter = netdev_priv (netdev );
5926
- struct e1000_hw * hw = & adapter -> hw ;
5927
- u32 ctrl , ctrl_ext , rctl , status ;
5928
- /* Runtime suspend should only enable wakeup for link changes */
5929
- u32 wufc = runtime ? E1000_WUFC_LNKC : adapter -> wol ;
5930
- int retval = 0 ;
5931
5919
5932
5920
netif_device_detach (netdev );
5933
5921
@@ -5938,11 +5926,29 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
5938
5926
usleep_range (10000 , 20000 );
5939
5927
5940
5928
WARN_ON (test_bit (__E1000_RESETTING , & adapter -> state ));
5941
- e1000e_down (adapter );
5929
+
5930
+ /* Quiesce the device without resetting the hardware */
5931
+ e1000e_down (adapter , false);
5942
5932
e1000_free_irq (adapter );
5943
5933
}
5944
5934
e1000e_reset_interrupt_capability (adapter );
5945
5935
5936
+ /* Allow time for pending master requests to run */
5937
+ e1000e_disable_pcie_master (& adapter -> hw );
5938
+
5939
+ return 0 ;
5940
+ }
5941
+
5942
+ static int __e1000_shutdown (struct pci_dev * pdev , bool runtime )
5943
+ {
5944
+ struct net_device * netdev = pci_get_drvdata (pdev );
5945
+ struct e1000_adapter * adapter = netdev_priv (netdev );
5946
+ struct e1000_hw * hw = & adapter -> hw ;
5947
+ u32 ctrl , ctrl_ext , rctl , status ;
5948
+ /* Runtime suspend should only enable wakeup for link changes */
5949
+ u32 wufc = runtime ? E1000_WUFC_LNKC : adapter -> wol ;
5950
+ int retval = 0 ;
5951
+
5946
5952
status = er32 (STATUS );
5947
5953
if (status & E1000_STATUS_LU )
5948
5954
wufc &= ~E1000_WUFC_LNKC ;
@@ -5976,9 +5982,6 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
5976
5982
if (adapter -> flags & FLAG_IS_ICH )
5977
5983
e1000_suspend_workarounds_ich8lan (& adapter -> hw );
5978
5984
5979
- /* Allow time for pending master requests to run */
5980
- e1000e_disable_pcie_master (& adapter -> hw );
5981
-
5982
5985
if (adapter -> flags2 & FLAG2_HAS_PHY_WAKEUP ) {
5983
5986
/* enable wakeup by the PHY */
5984
5987
retval = e1000_init_phy_wakeup (adapter , wufc );
@@ -5992,6 +5995,8 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
5992
5995
} else {
5993
5996
ew32 (WUC , 0 );
5994
5997
ew32 (WUFC , 0 );
5998
+
5999
+ e1000_power_down_phy (adapter );
5995
6000
}
5996
6001
5997
6002
if (adapter -> hw .phy .type == e1000_phy_igp_3 )
@@ -6114,7 +6119,6 @@ static int __e1000_resume(struct pci_dev *pdev)
6114
6119
struct e1000_adapter * adapter = netdev_priv (netdev );
6115
6120
struct e1000_hw * hw = & adapter -> hw ;
6116
6121
u16 aspm_disable_flag = 0 ;
6117
- u32 err ;
6118
6122
6119
6123
if (adapter -> flags2 & FLAG2_DISABLE_ASPM_L0S )
6120
6124
aspm_disable_flag = PCIE_LINK_STATE_L0S ;
@@ -6125,13 +6129,6 @@ static int __e1000_resume(struct pci_dev *pdev)
6125
6129
6126
6130
pci_set_master (pdev );
6127
6131
6128
- e1000e_set_interrupt_capability (adapter );
6129
- if (netif_running (netdev )) {
6130
- err = e1000_request_irq (adapter );
6131
- if (err )
6132
- return err ;
6133
- }
6134
-
6135
6132
if (hw -> mac .type >= e1000_pch2lan )
6136
6133
e1000_resume_workarounds_pchlan (& adapter -> hw );
6137
6134
@@ -6185,24 +6182,46 @@ static int __e1000_resume(struct pci_dev *pdev)
6185
6182
return 0 ;
6186
6183
}
6187
6184
6185
+ static int e1000e_pm_thaw (struct device * dev )
6186
+ {
6187
+ struct net_device * netdev = pci_get_drvdata (to_pci_dev (dev ));
6188
+ struct e1000_adapter * adapter = netdev_priv (netdev );
6189
+
6190
+ e1000e_set_interrupt_capability (adapter );
6191
+ if (netif_running (netdev )) {
6192
+ u32 err = e1000_request_irq (adapter );
6193
+
6194
+ if (err )
6195
+ return err ;
6196
+
6197
+ e1000e_up (adapter );
6198
+ }
6199
+
6200
+ netif_device_attach (netdev );
6201
+
6202
+ return 0 ;
6203
+ }
6204
+
6188
6205
#ifdef CONFIG_PM_SLEEP
6189
- static int e1000_suspend (struct device * dev )
6206
+ static int e1000e_pm_suspend (struct device * dev )
6190
6207
{
6191
6208
struct pci_dev * pdev = to_pci_dev (dev );
6192
6209
6210
+ e1000e_pm_freeze (dev );
6211
+
6193
6212
return __e1000_shutdown (pdev , false);
6194
6213
}
6195
6214
6196
- static int e1000_resume (struct device * dev )
6215
+ static int e1000e_pm_resume (struct device * dev )
6197
6216
{
6198
6217
struct pci_dev * pdev = to_pci_dev (dev );
6199
- struct net_device * netdev = pci_get_drvdata (pdev );
6200
- struct e1000_adapter * adapter = netdev_priv (netdev );
6218
+ int rc ;
6201
6219
6202
- if (e1000e_pm_ready (adapter ))
6203
- adapter -> idle_check = true;
6220
+ rc = __e1000_resume (pdev );
6221
+ if (rc )
6222
+ return rc ;
6204
6223
6205
- return __e1000_resume ( pdev );
6224
+ return e1000e_pm_thaw ( dev );
6206
6225
}
6207
6226
#endif /* CONFIG_PM_SLEEP */
6208
6227
@@ -6254,6 +6273,8 @@ static int e1000_runtime_resume(struct device *dev)
6254
6273
6255
6274
static void e1000_shutdown (struct pci_dev * pdev )
6256
6275
{
6276
+ e1000e_pm_freeze (& pdev -> dev );
6277
+
6257
6278
__e1000_shutdown (pdev , false);
6258
6279
}
6259
6280
@@ -6339,7 +6360,7 @@ static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,
6339
6360
return PCI_ERS_RESULT_DISCONNECT ;
6340
6361
6341
6362
if (netif_running (netdev ))
6342
- e1000e_down (adapter );
6363
+ e1000e_down (adapter , true );
6343
6364
pci_disable_device (pdev );
6344
6365
6345
6366
/* Request a slot slot reset. */
@@ -6351,7 +6372,7 @@ static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,
6351
6372
* @pdev: Pointer to PCI device
6352
6373
*
6353
6374
* Restart the card from scratch, as if from a cold-boot. Implementation
6354
- * resembles the first-half of the e1000_resume routine.
6375
+ * resembles the first-half of the e1000e_pm_resume routine.
6355
6376
*/
6356
6377
static pci_ers_result_t e1000_io_slot_reset (struct pci_dev * pdev )
6357
6378
{
@@ -6398,7 +6419,7 @@ static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev)
6398
6419
*
6399
6420
* This callback is called when the error recovery driver tells us that
6400
6421
* its OK to resume normal operation. Implementation resembles the
6401
- * second-half of the e1000_resume routine.
6422
+ * second-half of the e1000e_pm_resume routine.
6402
6423
*/
6403
6424
static void e1000_io_resume (struct pci_dev * pdev )
6404
6425
{
@@ -6903,9 +6924,6 @@ static void e1000_remove(struct pci_dev *pdev)
6903
6924
}
6904
6925
}
6905
6926
6906
- if (!(netdev -> flags & IFF_UP ))
6907
- e1000_power_down_phy (adapter );
6908
-
6909
6927
/* Don't lie to e1000_close() down the road. */
6910
6928
if (!down )
6911
6929
clear_bit (__E1000_DOWN , & adapter -> state );
@@ -7027,7 +7045,12 @@ static DEFINE_PCI_DEVICE_TABLE(e1000_pci_tbl) = {
7027
7045
MODULE_DEVICE_TABLE (pci , e1000_pci_tbl );
7028
7046
7029
7047
static const struct dev_pm_ops e1000_pm_ops = {
7030
- SET_SYSTEM_SLEEP_PM_OPS (e1000_suspend , e1000_resume )
7048
+ .suspend = e1000e_pm_suspend ,
7049
+ .resume = e1000e_pm_resume ,
7050
+ .freeze = e1000e_pm_freeze ,
7051
+ .thaw = e1000e_pm_thaw ,
7052
+ .poweroff = e1000e_pm_suspend ,
7053
+ .restore = e1000e_pm_resume ,
7031
7054
SET_RUNTIME_PM_OPS (e1000_runtime_suspend , e1000_runtime_resume ,
7032
7055
e1000_idle )
7033
7056
};
0 commit comments