Commit 9de168a0 authored by Johannes Berg's avatar Johannes Berg Committed by Luca Coelho
Browse files

iwlwifi: pcie: implement Bz reset flow



Bz device reset flow changed, now the hardware (instead of
firmware) will reset the PCI bus etc., this can take up to
100ms.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20210802215208.df30875c6ff9.I962ed0f2c3358903dc6ba1abb65726ce5acbbd48@changeid


Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent 6c0795f1
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -131,9 +131,21 @@ void _iwl_trans_pcie_gen2_stop_device(struct iwl_trans *trans)
	if (trans_pcie->is_down)
		return;

	if (trans_pcie->fw_reset_handshake &&
	    trans->state >= IWL_TRANS_FW_STARTED)
	if (trans->state >= IWL_TRANS_FW_STARTED) {
		if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) {
			iwl_set_bit(trans, CSR_GP_CNTRL,
				    CSR_GP_CNTRL_REG_FLAG_BUS_MASTER_DISABLE_REQ);
			iwl_poll_bit(trans, CSR_GP_CNTRL,
				     CSR_GP_CNTRL_REG_FLAG_BUS_MASTER_DISABLE_STATUS,
				     CSR_GP_CNTRL_REG_FLAG_BUS_MASTER_DISABLE_STATUS,
				     5000);
			msleep(100);
			iwl_set_bit(trans, CSR_GP_CNTRL,
				    CSR_GP_CNTRL_REG_FLAG_SW_RESET);
		} else if (trans_pcie->fw_reset_handshake) {
			iwl_trans_pcie_fw_reset_handshake(trans);
		}
	}

	trans_pcie->is_down = true;