]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: iwlwifi: pcie: inform me when op mode leaving
authorItamar Shalev <itamar.shalev@intel.com>
Wed, 9 Jul 2025 20:05:37 +0000 (23:05 +0300)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Thu, 10 Jul 2025 16:48:38 +0000 (19:48 +0300)
Transport gen2 didn't inform ME when the op mode is leaving.

Signed-off-by: Itamar Shalev <itamar.shalev@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250709230308.abd840f5e998.I3a3fe174ea55a30daa04a0a3e9a6264913677045@changeid
drivers/net/wireless/intel/iwlwifi/iwl-trans.c
drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/internal.h
drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/trans-gen2.c

index 9604781dd0b7094400e54b63a2f7214a34007512..b6e71c172e7ba4f2879b9b889146beac00101e72 100644 (file)
@@ -419,7 +419,10 @@ void iwl_trans_op_mode_leave(struct iwl_trans *trans)
 {
        might_sleep();
 
-       iwl_trans_pcie_op_mode_leave(trans);
+       if (trans->mac_cfg->gen2)
+               iwl_trans_pcie_gen2_op_mode_leave(trans);
+       else
+               iwl_trans_pcie_op_mode_leave(trans);
 
        cancel_delayed_work_sync(&trans->restart.wk);
 
index 7dd11891ccfeaf0c12eb90f4ab2413e5f87d22c3..f48aeebb151cc6c85f39114ed44e35cb57f73121 100644 (file)
@@ -1091,6 +1091,7 @@ int iwl_trans_pcie_start_fw(struct iwl_trans *trans,
 void iwl_trans_pcie_stop_device(struct iwl_trans *trans);
 
 /* common functions that are used by gen2 transport */
+void iwl_trans_pcie_gen2_op_mode_leave(struct iwl_trans *trans);
 int iwl_pcie_gen2_apm_init(struct iwl_trans *trans);
 void iwl_pcie_apm_config(struct iwl_trans *trans);
 int iwl_pcie_prepare_card_hw(struct iwl_trans *trans);
index 0df8522ca41094724689e16cbfed6dd7752cc0bd..035048e0e8f8bedf2567727e9507fe7fcbbb7789 100644 (file)
@@ -630,3 +630,23 @@ out:
        mutex_unlock(&trans_pcie->mutex);
        return ret;
 }
+
+void iwl_trans_pcie_gen2_op_mode_leave(struct iwl_trans *trans)
+{
+       struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
+
+       mutex_lock(&trans_pcie->mutex);
+
+       /* disable interrupts - don't enable HW RF kill interrupt */
+       iwl_disable_interrupts(trans);
+
+       iwl_pcie_gen2_apm_stop(trans, true);
+
+       iwl_disable_interrupts(trans);
+
+       iwl_pcie_disable_ict(trans);
+
+       mutex_unlock(&trans_pcie->mutex);
+
+       iwl_pcie_synchronize_irqs(trans);
+}