iwlwifi: dbg: allow wrt collection before ALIVE
authorLiad Kaufman <liad.kaufman@intel.com>
Tue, 31 Oct 2017 13:54:50 +0000 (15:54 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 4 Nov 2018 13:52:41 +0000 (14:52 +0100)
[ Upstream commit dfd4b08cf44f27587e2053e006e43a1603328006 ]

Even if no ALIVE was received, the WRT data can still
be collected. Add this.

Signed-off-by: Liad Kaufman <liad.kaufman@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/intel/iwlwifi/fw/dbg.c

index 2fa7ec4..8390104 100644 (file)
@@ -950,7 +950,20 @@ int iwl_fw_dbg_collect_desc(struct iwl_fw_runtime *fwrt,
        if (trigger)
                delay = msecs_to_jiffies(le32_to_cpu(trigger->stop_delay));
 
-       if (WARN(fwrt->trans->state == IWL_TRANS_NO_FW,
+       /*
+        * If the loading of the FW completed successfully, the next step is to
+        * get the SMEM config data. Thus, if fwrt->smem_cfg.num_lmacs is non
+        * zero, the FW was already loaded successully. If the state is "NO_FW"
+        * in such a case - WARN and exit, since FW may be dead. Otherwise, we
+        * can try to collect the data, since FW might just not be fully
+        * loaded (no "ALIVE" yet), and the debug data is accessible.
+        *
+        * Corner case: got the FW alive but crashed before getting the SMEM
+        *      config. In such a case, due to HW access problems, we might
+        *      collect garbage.
+        */
+       if (WARN((fwrt->trans->state == IWL_TRANS_NO_FW) &&
+                fwrt->smem_cfg.num_lmacs,
                 "Can't collect dbg data when FW isn't alive\n"))
                return -EIO;