]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
e1000e: Check the PCIm state
authorSasha Neftin <sasha.neftin@intel.com>
Thu, 24 Jun 2021 19:02:48 +0000 (12:02 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 14 Jul 2021 15:00:04 +0000 (17:00 +0200)
[ Upstream commit 2e7256f12cdb16eaa2515b6231d665044a07c51a ]

Complete to commit def4ec6dce393e ("e1000e: PCIm function state support")
Check the PCIm state only on CSME systems. There is no point to do this
check on non CSME systems.
This patch fixes a generation a false-positive warning:
"Error in exiting dmoff"

Fixes: def4ec6dce39 ("e1000e: PCIm function state support")
Signed-off-by: Sasha Neftin <sasha.neftin@intel.com>
Tested-by: Dvora Fuxbrumer <dvorax.fuxbrumer@linux.intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/intel/e1000e/netdev.c

index a0948002ddf8584b59956755afadbf0cc3cdf8c3..b3ad95ac3d85937ac7e6fdd10dd51b762191af02 100644 (file)
@@ -5222,18 +5222,20 @@ static void e1000_watchdog_task(struct work_struct *work)
                        pm_runtime_resume(netdev->dev.parent);
 
                        /* Checking if MAC is in DMoff state*/
-                       pcim_state = er32(STATUS);
-                       while (pcim_state & E1000_STATUS_PCIM_STATE) {
-                               if (tries++ == dmoff_exit_timeout) {
-                                       e_dbg("Error in exiting dmoff\n");
-                                       break;
-                               }
-                               usleep_range(10000, 20000);
+                       if (er32(FWSM) & E1000_ICH_FWSM_FW_VALID) {
                                pcim_state = er32(STATUS);
-
-                               /* Checking if MAC exited DMoff state */
-                               if (!(pcim_state & E1000_STATUS_PCIM_STATE))
-                                       e1000_phy_hw_reset(&adapter->hw);
+                               while (pcim_state & E1000_STATUS_PCIM_STATE) {
+                                       if (tries++ == dmoff_exit_timeout) {
+                                               e_dbg("Error in exiting dmoff\n");
+                                               break;
+                                       }
+                                       usleep_range(10000, 20000);
+                                       pcim_state = er32(STATUS);
+
+                                       /* Checking if MAC exited DMoff state */
+                                       if (!(pcim_state & E1000_STATUS_PCIM_STATE))
+                                               e1000_phy_hw_reset(&adapter->hw);
+                               }
                        }
 
                        /* update snapshot of PHY registers on LSC */