aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e/netdev.c
diff options
context:
space:
mode:
authorBruce Allan <bruce.w.allan@intel.com>2011-05-13 03:19:48 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2011-06-09 23:31:49 -0400
commit99730e4c13c8344b02dd96108945b48d28c14c25 (patch)
tree36ae5f5c6bf0804f45dfb387931f88d11f7bc400 /drivers/net/e1000e/netdev.c
parentd9b24135b972ccdd5f5174fba06c730e895e6daf (diff)
e1000e: 82579 intermittently disabled during S0->Sx
When repeatedly cycling Sx->S0 states with the network cable unplugged, the 82579 PHY may not initialize as expected and may require a full power cycle to recover functionality to the device. Workaround this by testing access of the PHY registers after resuming; if that returns unexpected results toggle the LANPHYPC signal to power cycle the PHY. This is implemented in the new function e1000_resume_workarounds_pchlan() which calls another new function, e1000_toggle_lanphypc_value_ich8lan(), which has been created to reduce code duplication (same functionality required by a previous workaround). Also, e1000e_disable_gig_wol_ich8lan is now e1000_suspend_workarounds_ich8lan to better reflect what it does. Signed-off-by: Bruce Allan <bruce.w.allan@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/e1000e/netdev.c')
-rw-r--r--drivers/net/e1000e/netdev.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index 888bd9cc2710..c4a23c7ac170 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -5278,7 +5278,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake,
5278 } 5278 }
5279 5279
5280 if (adapter->flags & FLAG_IS_ICH) 5280 if (adapter->flags & FLAG_IS_ICH)
5281 e1000e_disable_gig_wol_ich8lan(&adapter->hw); 5281 e1000_suspend_workarounds_ich8lan(&adapter->hw);
5282 5282
5283 /* Allow time for pending master requests to run */ 5283 /* Allow time for pending master requests to run */
5284 e1000e_disable_pcie_master(&adapter->hw); 5284 e1000e_disable_pcie_master(&adapter->hw);
@@ -5429,6 +5429,9 @@ static int __e1000_resume(struct pci_dev *pdev)
5429 return err; 5429 return err;
5430 } 5430 }
5431 5431
5432 if (hw->mac.type == e1000_pch2lan)
5433 e1000_resume_workarounds_pchlan(&adapter->hw);
5434
5432 e1000e_power_up_phy(adapter); 5435 e1000e_power_up_phy(adapter);
5433 5436
5434 /* report the system wakeup cause from S3/S4 */ 5437 /* report the system wakeup cause from S3/S4 */