Skip to content

Commit 522713c

Browse files
committed
iwlwifi: pcie: properly reset the device
We were toggling the wrong bit when we reset the device, fix that. Moreover, since the reset can take time, we need to wait before we set the rfkill interrupt. Not doing so can be racy since the driver is enabling the rfkill interrupt while the device is resetting which will clear all the registers including the CSR_INT_MASK. This can basically lead to a situation where we don't enable the rfkill interrupt. If that happens, the user will not be able to re-enable the device when de-asserting rfkill. This scenario happened to the submitter of: https://bugzilla.kernel.org/show_bug.cgi?id=87191 Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
1 parent effd05a commit 522713c

File tree

1 file changed

+2
-1
lines changed
  • drivers/net/wireless/iwlwifi/pcie

1 file changed

+2
-1
lines changed

drivers/net/wireless/iwlwifi/pcie/trans.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -942,7 +942,8 @@ static void iwl_trans_pcie_stop_device(struct iwl_trans *trans)
942942
spin_unlock(&trans_pcie->irq_lock);
943943

944944
/* stop and reset the on-board processor */
945-
iwl_write32(trans, CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET);
945+
iwl_write32(trans, CSR_RESET, CSR_RESET_REG_FLAG_SW_RESET);
946+
udelay(20);
946947

947948
/* clear all status bits */
948949
clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status);

0 commit comments

Comments
 (0)