Commit 277f56a1 authored by Avraham Stern's avatar Avraham Stern Committed by Johannes Berg
Browse files

wifi: iwlwifi: trans: don't trigger d3 interrupt twice



When the IPC registers are used for sleep control, setting
the IPC sleep bit already triggers an interrupt to the fw, so
there is no need to also set the doorbell. Setting also the
doorbell triggers the sleep interrupt twice which lead to
an assert.

Fixes: af08571d ("iwlwifi: pcie: support Bz suspend/resume trigger")
Signed-off-by: default avatarAvraham Stern <avraham.stern@intel.com>
Signed-off-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230413102635.b5f2f6e44d38.I4cb5b6ad4914db47a714e731c4c8b4db679cabce@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 5caa8252
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -1522,19 +1522,16 @@ static int iwl_pcie_d3_handshake(struct iwl_trans *trans, bool suspend)
	struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
	int ret;

	if (trans->trans_cfg->device_family == IWL_DEVICE_FAMILY_AX210) {
	if (trans->trans_cfg->device_family == IWL_DEVICE_FAMILY_AX210)
		iwl_write_umac_prph(trans, UREG_DOORBELL_TO_ISR6,
				    suspend ? UREG_DOORBELL_TO_ISR6_SUSPEND :
					      UREG_DOORBELL_TO_ISR6_RESUME);
	} else if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) {
	else if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ)
		iwl_write32(trans, CSR_IPC_SLEEP_CONTROL,
			    suspend ? CSR_IPC_SLEEP_CONTROL_SUSPEND :
				      CSR_IPC_SLEEP_CONTROL_RESUME);
		iwl_write_umac_prph(trans, UREG_DOORBELL_TO_ISR6,
				    UREG_DOORBELL_TO_ISR6_SLEEP_CTRL);
	} else {
	else
		return 0;
	}

	ret = wait_event_timeout(trans_pcie->sx_waitq,
				 trans_pcie->sx_complete, 2 * HZ);