aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/e1000e/netdev.c
diff options
context:
space:
mode:
authorDavid Ertman <davidx.m.ertman@intel.com>2014-02-14 02:16:41 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2014-03-08 01:19:53 -0500
commit2800209994f878b00724ceabb65d744855c8f99a (patch)
treeb7684abf83e2b193c1d86c13c04ad8e712229af3 /drivers/net/ethernet/intel/e1000e/netdev.c
parent3b70d4f8486ecbd6a7d931901309b49b07435774 (diff)
e1000e: Refactor PM flows
Refactor the system power management flows to prevent the suspend path from being executed twice when hibernating since both the freeze and poweroff callbacks were set to e1000_suspend() via SET_SYSTEM_SLEEP_PM_OPS. There are HW workarounds that are performed during this flow and calling them twice was causing erroneous behavior. Re-arrange the code to take advantage of common code paths and explicitly set the individual dev_pm_ops callbacks for suspend, resume, freeze, thaw, poweroff and restore. Add a boolean parameter (reset) to the e1000e_down function to allow for cases when the HW should not be reset when downed during a PM event. Now that all suspend/shutdown paths result in a call to __e1000_shutdown() that checks Wake on Lan status, removing redundant check for WoL in e1000_power_down_phy(). Signed-off-by: Dave Ertman <davidx.m.ertman@intel.com> Acked-by: Bruce Allan <bruce.w.allan@intel.com> Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/e1000e/netdev.c')
-rw-r--r--drivers/net/ethernet/intel/e1000e/netdev.c125
1 files changed, 74 insertions, 51 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index a69388cba175..2669fdc09c8e 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -3687,10 +3687,6 @@ void e1000e_power_up_phy(struct e1000_adapter *adapter)
3687 */ 3687 */
3688static void e1000_power_down_phy(struct e1000_adapter *adapter) 3688static void e1000_power_down_phy(struct e1000_adapter *adapter)
3689{ 3689{
3690 /* WoL is enabled */
3691 if (adapter->wol)
3692 return;
3693
3694 if (adapter->hw.phy.ops.power_down) 3690 if (adapter->hw.phy.ops.power_down)
3695 adapter->hw.phy.ops.power_down(&adapter->hw); 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 if (!netif_running(adapter->netdev) && 3905 if (!netif_running(adapter->netdev) &&
3910 !test_bit(__E1000_TESTING, &adapter->state)) { 3906 !test_bit(__E1000_TESTING, &adapter->state))
3911 e1000_power_down_phy(adapter); 3907 e1000_power_down_phy(adapter);
3912 return;
3913 }
3914 3908
3915 e1000_get_phy_info(hw); 3909 e1000_get_phy_info(hw);
3916 3910
@@ -3977,7 +3971,12 @@ static void e1000e_flush_descriptors(struct e1000_adapter *adapter)
3977 3971
3978static void e1000e_update_stats(struct e1000_adapter *adapter); 3972static void e1000e_update_stats(struct e1000_adapter *adapter);
3979 3973
3980void 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 */
3979void e1000e_down(struct e1000_adapter *adapter, bool reset)
3981{ 3980{
3982 struct net_device *netdev = adapter->netdev; 3981 struct net_device *netdev = adapter->netdev;
3983 struct e1000_hw *hw = &adapter->hw; 3982 struct e1000_hw *hw = &adapter->hw;
@@ -4031,12 +4030,8 @@ void e1000e_down(struct e1000_adapter *adapter)
4031 e1000_lv_jumbo_workaround_ich8lan(hw, false)) 4030 e1000_lv_jumbo_workaround_ich8lan(hw, false))
4032 e_dbg("failed to disable jumbo frame workaround mode\n"); 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 e1000e_reset(adapter); 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
4042void e1000e_reinit_locked(struct e1000_adapter *adapter) 4037void e1000e_reinit_locked(struct e1000_adapter *adapter)
@@ -4044,7 +4039,7 @@ void e1000e_reinit_locked(struct e1000_adapter *adapter)
4044 might_sleep(); 4039 might_sleep();
4045 while (test_and_set_bit(__E1000_RESETTING, &adapter->state)) 4040 while (test_and_set_bit(__E1000_RESETTING, &adapter->state))
4046 usleep_range(1000, 2000); 4041 usleep_range(1000, 2000);
4047 e1000e_down(adapter); 4042 e1000e_down(adapter, true);
4048 e1000e_up(adapter); 4043 e1000e_up(adapter);
4049 clear_bit(__E1000_RESETTING, &adapter->state); 4044 clear_bit(__E1000_RESETTING, &adapter->state);
4050} 4045}
@@ -4372,14 +4367,12 @@ static int e1000_close(struct net_device *netdev)
4372 pm_runtime_get_sync(&pdev->dev); 4367 pm_runtime_get_sync(&pdev->dev);
4373 4368
4374 if (!test_bit(__E1000_DOWN, &adapter->state)) { 4369 if (!test_bit(__E1000_DOWN, &adapter->state)) {
4375 e1000e_down(adapter); 4370 e1000e_down(adapter, true);
4376 e1000_free_irq(adapter); 4371 e1000_free_irq(adapter);
4377 } 4372 }
4378 4373
4379 napi_disable(&adapter->napi); 4374 napi_disable(&adapter->napi);
4380 4375
4381 e1000_power_down_phy(adapter);
4382
4383 e1000e_free_tx_resources(adapter->tx_ring); 4376 e1000e_free_tx_resources(adapter->tx_ring);
4384 e1000e_free_rx_resources(adapter->rx_ring); 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 e_info("changing MTU from %d to %d\n", netdev->mtu, new_mtu); 5679 e_info("changing MTU from %d to %d\n", netdev->mtu, new_mtu);
5687 netdev->mtu = new_mtu; 5680 netdev->mtu = new_mtu;
5688 if (netif_running(netdev)) 5681 if (netif_running(netdev))
5689 e1000e_down(adapter); 5682 e1000e_down(adapter, true);
5690 5683
5691 /* NOTE: netdev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN 5684 /* NOTE: netdev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN
5692 * means we reserve 2 more, this pushes us to allocate from the next 5685 * means we reserve 2 more, this pushes us to allocate from the next
@@ -5919,15 +5912,10 @@ release:
5919 return retval; 5912 return retval;
5920} 5913}
5921 5914
5922static int __e1000_shutdown(struct pci_dev *pdev, bool runtime) 5915static 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 struct e1000_adapter *adapter = netdev_priv(netdev); 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 netif_device_detach(netdev); 5920 netif_device_detach(netdev);
5933 5921
@@ -5938,11 +5926,29 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
5938 usleep_range(10000, 20000); 5926 usleep_range(10000, 20000);
5939 5927
5940 WARN_ON(test_bit(__E1000_RESETTING, &adapter->state)); 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 e1000_free_irq(adapter); 5932 e1000_free_irq(adapter);
5943 } 5933 }
5944 e1000e_reset_interrupt_capability(adapter); 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
5942static 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 status = er32(STATUS); 5952 status = er32(STATUS);
5947 if (status & E1000_STATUS_LU) 5953 if (status & E1000_STATUS_LU)
5948 wufc &= ~E1000_WUFC_LNKC; 5954 wufc &= ~E1000_WUFC_LNKC;
@@ -5976,9 +5982,6 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
5976 if (adapter->flags & FLAG_IS_ICH) 5982 if (adapter->flags & FLAG_IS_ICH)
5977 e1000_suspend_workarounds_ich8lan(&adapter->hw); 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 if (adapter->flags2 & FLAG2_HAS_PHY_WAKEUP) { 5985 if (adapter->flags2 & FLAG2_HAS_PHY_WAKEUP) {
5983 /* enable wakeup by the PHY */ 5986 /* enable wakeup by the PHY */
5984 retval = e1000_init_phy_wakeup(adapter, wufc); 5987 retval = e1000_init_phy_wakeup(adapter, wufc);
@@ -5992,6 +5995,8 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
5992 } else { 5995 } else {
5993 ew32(WUC, 0); 5996 ew32(WUC, 0);
5994 ew32(WUFC, 0); 5997 ew32(WUFC, 0);
5998
5999 e1000_power_down_phy(adapter);
5995 } 6000 }
5996 6001
5997 if (adapter->hw.phy.type == e1000_phy_igp_3) 6002 if (adapter->hw.phy.type == e1000_phy_igp_3)
@@ -6114,7 +6119,6 @@ static int __e1000_resume(struct pci_dev *pdev)
6114 struct e1000_adapter *adapter = netdev_priv(netdev); 6119 struct e1000_adapter *adapter = netdev_priv(netdev);
6115 struct e1000_hw *hw = &adapter->hw; 6120 struct e1000_hw *hw = &adapter->hw;
6116 u16 aspm_disable_flag = 0; 6121 u16 aspm_disable_flag = 0;
6117 u32 err;
6118 6122
6119 if (adapter->flags2 & FLAG2_DISABLE_ASPM_L0S) 6123 if (adapter->flags2 & FLAG2_DISABLE_ASPM_L0S)
6120 aspm_disable_flag = PCIE_LINK_STATE_L0S; 6124 aspm_disable_flag = PCIE_LINK_STATE_L0S;
@@ -6125,13 +6129,6 @@ static int __e1000_resume(struct pci_dev *pdev)
6125 6129
6126 pci_set_master(pdev); 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 if (hw->mac.type >= e1000_pch2lan) 6132 if (hw->mac.type >= e1000_pch2lan)
6136 e1000_resume_workarounds_pchlan(&adapter->hw); 6133 e1000_resume_workarounds_pchlan(&adapter->hw);
6137 6134
@@ -6185,24 +6182,46 @@ static int __e1000_resume(struct pci_dev *pdev)
6185 return 0; 6182 return 0;
6186} 6183}
6187 6184
6185static 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#ifdef CONFIG_PM_SLEEP 6205#ifdef CONFIG_PM_SLEEP
6189static int e1000_suspend(struct device *dev) 6206static int e1000e_pm_suspend(struct device *dev)
6190{ 6207{
6191 struct pci_dev *pdev = to_pci_dev(dev); 6208 struct pci_dev *pdev = to_pci_dev(dev);
6192 6209
6210 e1000e_pm_freeze(dev);
6211
6193 return __e1000_shutdown(pdev, false); 6212 return __e1000_shutdown(pdev, false);
6194} 6213}
6195 6214
6196static int e1000_resume(struct device *dev) 6215static int e1000e_pm_resume(struct device *dev)
6197{ 6216{
6198 struct pci_dev *pdev = to_pci_dev(dev); 6217 struct pci_dev *pdev = to_pci_dev(dev);
6199 struct net_device *netdev = pci_get_drvdata(pdev); 6218 int rc;
6200 struct e1000_adapter *adapter = netdev_priv(netdev);
6201 6219
6202 if (e1000e_pm_ready(adapter)) 6220 rc = __e1000_resume(pdev);
6203 adapter->idle_check = true; 6221 if (rc)
6222 return rc;
6204 6223
6205 return __e1000_resume(pdev); 6224 return e1000e_pm_thaw(dev);
6206} 6225}
6207#endif /* CONFIG_PM_SLEEP */ 6226#endif /* CONFIG_PM_SLEEP */
6208 6227
@@ -6254,6 +6273,8 @@ static int e1000_runtime_resume(struct device *dev)
6254 6273
6255static void e1000_shutdown(struct pci_dev *pdev) 6274static void e1000_shutdown(struct pci_dev *pdev)
6256{ 6275{
6276 e1000e_pm_freeze(&pdev->dev);
6277
6257 __e1000_shutdown(pdev, false); 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 return PCI_ERS_RESULT_DISCONNECT; 6360 return PCI_ERS_RESULT_DISCONNECT;
6340 6361
6341 if (netif_running(netdev)) 6362 if (netif_running(netdev))
6342 e1000e_down(adapter); 6363 e1000e_down(adapter, true);
6343 pci_disable_device(pdev); 6364 pci_disable_device(pdev);
6344 6365
6345 /* Request a slot slot reset. */ 6366 /* Request a slot slot reset. */
@@ -6351,7 +6372,7 @@ static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,
6351 * @pdev: Pointer to PCI device 6372 * @pdev: Pointer to PCI device
6352 * 6373 *
6353 * Restart the card from scratch, as if from a cold-boot. Implementation 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 */
6356static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev) 6377static 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 * This callback is called when the error recovery driver tells us that 6420 * This callback is called when the error recovery driver tells us that
6400 * its OK to resume normal operation. Implementation resembles the 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 */
6403static void e1000_io_resume(struct pci_dev *pdev) 6424static 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 /* Don't lie to e1000_close() down the road. */ 6927 /* Don't lie to e1000_close() down the road. */
6910 if (!down) 6928 if (!down)
6911 clear_bit(__E1000_DOWN, &adapter->state); 6929 clear_bit(__E1000_DOWN, &adapter->state);
@@ -7027,7 +7045,12 @@ static DEFINE_PCI_DEVICE_TABLE(e1000_pci_tbl) = {
7027MODULE_DEVICE_TABLE(pci, e1000_pci_tbl); 7045MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
7028 7046
7029static const struct dev_pm_ops e1000_pm_ops = { 7047static 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 SET_RUNTIME_PM_OPS(e1000_runtime_suspend, e1000_runtime_resume, 7054 SET_RUNTIME_PM_OPS(e1000_runtime_suspend, e1000_runtime_resume,
7032 e1000_idle) 7055 e1000_idle)
7033}; 7056};