iwlwifi: yoyo: disable IMR DRAM region if IMR is disabled
authorMukesh Sisodiya <mukesh.sisodiya@intel.com>
Fri, 4 Mar 2022 11:21:21 +0000 (13:21 +0200)
committerLuca Coelho <luciano.coelho@intel.com>
Thu, 10 Mar 2022 07:23:27 +0000 (09:23 +0200)
Disable IMR region if it is enabled in the TLVs,
but disabled at runtime by the FW.

Signed-off-by: Mukesh Sisodiya <mukesh.sisodiya@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20220304131517.2a696656a161.I99705472a8838121ffaca72977015dc2069549b9@changeid
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/fw.c

index a178b83ee8a2290e185a01932ede13dd4eefd00e..f4de8250696f043ef2ef034ee5ad15a7bc36cce9 100644 (file)
@@ -124,6 +124,7 @@ static bool iwl_alive_fn(struct iwl_notif_wait_data *notif_wait,
        u32 lmac_error_event_table, umac_error_table;
        u32 version = iwl_fw_lookup_notif_ver(mvm->fw, LEGACY_GROUP,
                                              UCODE_ALIVE_NTFY, 0);
+       u32 i;
 
        if (version == 6) {
                struct iwl_alive_ntf_v6 *palive;
@@ -146,6 +147,28 @@ static bool iwl_alive_fn(struct iwl_notif_wait_data *notif_wait,
                             mvm->trans->dbg.imr_data.imr_enable,
                             mvm->trans->dbg.imr_data.imr_size,
                             le64_to_cpu(mvm->trans->dbg.imr_data.imr_base_addr));
+
+               if (!mvm->trans->dbg.imr_data.imr_enable) {
+                       for (i = 0; i < ARRAY_SIZE(mvm->trans->dbg.active_regions); i++) {
+                               struct iwl_ucode_tlv *reg_tlv;
+                               struct iwl_fw_ini_region_tlv *reg;
+
+                               reg_tlv = mvm->trans->dbg.active_regions[i];
+                               if (!reg_tlv)
+                                       continue;
+
+                               reg = (void *)reg_tlv->data;
+                               /*
+                                * We have only one DRAM IMR region, so we
+                                * can break as soon as we find the first
+                                * one.
+                                */
+                               if (reg->type == IWL_FW_INI_REGION_DRAM_IMR) {
+                                       mvm->trans->dbg.unsupported_region_msk |= BIT(i);
+                                       break;
+                               }
+                       }
+               }
        }
 
        if (version >= 5) {