]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: iwlwifi: phy periph read - flow modification
authorOr Ron <or.ron@intel.com>
Wed, 11 Jun 2025 19:26:24 +0000 (22:26 +0300)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Wed, 25 Jun 2025 07:57:32 +0000 (10:57 +0300)
If for some reason the reading of phy prph fails, there is no reason to
keep reading them. Check the status abd break early in such case.

Signed-off-by: Or Ron <or.ron@intel.com>
Reviewed-by: Eilon Rinat <eilon.rinat@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250611222325.124ce6613edd.Ic1aad57cc6163f0551a3dafae048434f4a2fe7f5@changeid
drivers/net/wireless/intel/iwlwifi/fw/dbg.c
drivers/net/wireless/intel/iwlwifi/iwl-prph.h

index 95a732efce45de7f903c54bb8723e5894a0f2ef3..98ad020014d9d4be05e0c658a600d51a5cf931c9 100644 (file)
@@ -1106,6 +1106,7 @@ static int iwl_dump_ini_prph_phy_iter_common(struct iwl_fw_runtime *fwrt,
        u32 prph_val;
        u32 dphy_state;
        u32 dphy_addr;
+       u32 prph_stts;
        int i;
 
        range->internal_base_addr = cpu_to_le32(addr);
@@ -1133,6 +1134,21 @@ static int iwl_dump_ini_prph_phy_iter_common(struct iwl_fw_runtime *fwrt,
 
                iwl_write_prph_no_grab(fwrt->trans, indirect_wr_addr,
                                       WMAL_INDRCT_CMD(addr + i));
+
+               if (fwrt->trans->info.hw_rf_id != IWL_CFG_RF_TYPE_JF1 &&
+                   fwrt->trans->info.hw_rf_id != IWL_CFG_RF_TYPE_JF2 &&
+                   fwrt->trans->info.hw_rf_id != IWL_CFG_RF_TYPE_HR1 &&
+                   fwrt->trans->info.hw_rf_id != IWL_CFG_RF_TYPE_HR2) {
+                       udelay(2);
+                       prph_stts = iwl_read_prph_no_grab(fwrt->trans,
+                                                         WMAL_MRSPF_STTS);
+
+                       /* Abort dump if status is 0xA5A5A5A2 or FIFO1 empty */
+                       if (prph_stts == WMAL_TIMEOUT_VAL ||
+                           !WMAL_MRSPF_STTS_IS_FIFO1_NOT_EMPTY(prph_stts))
+                               break;
+               }
+
                prph_val = iwl_read_prph_no_grab(fwrt->trans,
                                                 indirect_rd_addr);
                *val++ = cpu_to_le32(prph_val);
index 23b2009fbb28b76620badfa9663a5022324ede13..a7214ddcfaf56d1051ba997de6c11e7f3c42ce48 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
 /*
- * Copyright (C) 2005-2014, 2018-2024 Intel Corporation
+ * Copyright (C) 2005-2014, 2018-2025 Intel Corporation
  * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
  * Copyright (C) 2016 Intel Deutschland GmbH
  */
@@ -514,6 +514,14 @@ enum {
 #define WMAL_INDRCT_CMD(addr) \
        ((WMAL_CMD_READ_BURST_ACCESS << WMAL_INDRCT_RD_CMD1_OPMOD_POS) | \
         ((addr) & WMAL_INDRCT_RD_CMD1_BYTE_ADDRESS_MSK))
+#define WMAL_MRSPF_STTS 0xADFC24
+#define WMAL_MRSPF_STTS_FIFO1_NOT_EMPTY_POS 15
+#define WMAL_MRSPF_STTS_FIFO1_NOT_EMPTY_MSK 0x8000
+#define WMAL_TIMEOUT_VAL 0xA5A5A5A2
+#define WMAL_MRSPF_STTS_IS_FIFO1_NOT_EMPTY(val) \
+       (((val) >> (WMAL_MRSPF_STTS_FIFO1_NOT_EMPTY_POS)) & \
+        ((WMAL_MRSPF_STTS_FIFO1_NOT_EMPTY_MSK) >> \
+         (WMAL_MRSPF_STTS_FIFO1_NOT_EMPTY_POS)))
 
 #define WFPM_LMAC1_PS_CTL_RW 0xA03380
 #define WFPM_LMAC2_PS_CTL_RW 0xA033C0