e1000e: do not resume device from RPM suspend to read PHY status registers
authorBruce Allan <bruce.w.allan@intel.com>
Sat, 29 Jun 2013 07:42:25 +0000 (07:42 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Sun, 28 Jul 2013 10:52:44 +0000 (03:52 -0700)
When the device is runtime suspended (e.g. when there is no link), do not
wake it from D3 to read the PHY status; just set the values to typical
power-on defaults as is done when runtime PM is not enabled and there is no
link.

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>
drivers/net/ethernet/intel/e1000e/netdev.c

index 650e569194a74b4d94df9bdd4399cafb66678ae7..e6d2c0f8f76a8cf7f32fcbb9f0e7f8f126064bf4 100644 (file)
@@ -4684,11 +4684,11 @@ static void e1000_phy_read_status(struct e1000_adapter *adapter)
        struct e1000_hw *hw = &adapter->hw;
        struct e1000_phy_regs *phy = &adapter->phy_regs;
 
-       if ((er32(STATUS) & E1000_STATUS_LU) &&
+       if (!pm_runtime_suspended((&adapter->pdev->dev)->parent) &&
+           (er32(STATUS) & E1000_STATUS_LU) &&
            (adapter->hw.phy.media_type == e1000_media_type_copper)) {
                int ret_val;
 
-               pm_runtime_get_sync(&adapter->pdev->dev);
                ret_val = e1e_rphy(hw, MII_BMCR, &phy->bmcr);
                ret_val |= e1e_rphy(hw, MII_BMSR, &phy->bmsr);
                ret_val |= e1e_rphy(hw, MII_ADVERTISE, &phy->advertise);
@@ -4699,7 +4699,6 @@ static void e1000_phy_read_status(struct e1000_adapter *adapter)
                ret_val |= e1e_rphy(hw, MII_ESTATUS, &phy->estatus);
                if (ret_val)
                        e_warn("Error reading PHY register\n");
-               pm_runtime_put_sync(&adapter->pdev->dev);
        } else {
                /* Do not read PHY registers if link is not up
                 * Set values to typical power-on defaults