linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Luca Coelho <luca@coelho.fi>
To: kvalo@codeaurora.org
Cc: linux-wireless@vger.kernel.org
Subject: [PATCH 03/12] iwlwifi: pcie: normally grab NIC access for inflight-hcmd
Date: Tue, 30 Mar 2021 16:24:51 +0300	[thread overview]
Message-ID: <iwlwifi.20210330162204.d196fc6ffb23.Idc1ce3ce9fed9178beee7e5409bc669f79b06a0d@changeid> (raw)
In-Reply-To: <20210330132500.468321-1-luca@coelho.fi>

From: Johannes Berg <johannes.berg@intel.com>

We currently have a special, separate, code path to acquire NIC
access for the in-flight host-command workaround on 7000 series
hardware. However, the normal code path here has grown a number
of additional workarounds/semantics over time, such as reprobing
the device if things fail.

Rather than try to replicate any of this logic, call the normal
grab_nic_access logic for the workaround.

This changes the spinlock to _bh, but that's OK since it's just
redundant, we already have soft-IRQs disabled when we get here,
and so didn't (have to) do it again. Since it's only for commands
there's however no point in making the code more complex just to
not use _bh here.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/net/wireless/intel/iwlwifi/pcie/tx.c | 33 +++++++-------------
 1 file changed, 11 insertions(+), 22 deletions(-)

diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/tx.c b/drivers/net/wireless/intel/iwlwifi/pcie/tx.c
index ac200e6e941e..4ea353734665 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/tx.c
@@ -629,7 +629,6 @@ static int iwl_pcie_set_cmd_in_flight(struct iwl_trans *trans,
 				      const struct iwl_host_cmd *cmd)
 {
 	struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
-	int ret = 0;
 
 	/* Make sure the NIC is still alive in the bus */
 	if (test_bit(STATUS_TRANS_DEAD, &trans->status))
@@ -638,34 +637,24 @@ static int iwl_pcie_set_cmd_in_flight(struct iwl_trans *trans,
 	if (!trans->trans_cfg->base_params->apmg_wake_up_wa)
 		return 0;
 
-	spin_lock(&trans_pcie->reg_lock);
 	/*
 	 * wake up the NIC to make sure that the firmware will see the host
 	 * command - we will let the NIC sleep once all the host commands
 	 * returned. This needs to be done only on NICs that have
 	 * apmg_wake_up_wa set (see above.)
 	 */
-	if (!trans_pcie->cmd_hold_nic_awake) {
-		__iwl_trans_pcie_set_bit(trans, CSR_GP_CNTRL,
-					 CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ);
-
-		ret = iwl_poll_bit(trans, CSR_GP_CNTRL,
-				   CSR_GP_CNTRL_REG_VAL_MAC_ACCESS_EN,
-				   (CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY |
-				    CSR_GP_CNTRL_REG_FLAG_GOING_TO_SLEEP),
-				   15000);
-		if (ret < 0) {
-			__iwl_trans_pcie_clear_bit(trans, CSR_GP_CNTRL,
-					CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ);
-			IWL_ERR(trans, "Failed to wake NIC for hcmd\n");
-			ret = -EIO;
-		} else {
-			trans_pcie->cmd_hold_nic_awake = true;
-		}
-	}
-	spin_unlock(&trans_pcie->reg_lock);
+	if (!iwl_trans_grab_nic_access(trans))
+		return -EIO;
 
-	return ret;
+	/*
+	 * In iwl_trans_grab_nic_access(), we've acquired the reg_lock.
+	 * There, we also returned immediately if cmd_hold_nic_awake is
+	 * already true, so it's OK to unconditionally set it to true.
+	 */
+	trans_pcie->cmd_hold_nic_awake = true;
+	spin_unlock_bh(&trans_pcie->reg_lock);
+
+	return 0;
 }
 
 /*
-- 
2.31.0


  parent reply	other threads:[~2021-03-30 13:26 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-30 13:24 [PATCH 00/12] iwlwifi: updates intended for v5.13 2021-03-30 Luca Coelho
2021-03-30 13:24 ` [PATCH 01/12] iwlwifi: mvm: enable TX on new CSA channel before disconnecting Luca Coelho
2021-04-12 10:09   ` Luca Coelho
2021-04-13  5:56   ` [01/12] " Luca Coelho
2021-03-30 13:24 ` [PATCH 02/12] iwlwifi: pcie: avoid unnecessarily taking spinlock Luca Coelho
2021-03-30 13:24 ` Luca Coelho [this message]
2021-03-30 13:24 ` [PATCH 04/12] iwlwifi: mvm: don't allow CSA if we haven't been fully associated Luca Coelho
2021-03-30 13:24 ` [PATCH 05/12] iwlwifi: pcie: Add support for Bz Family Luca Coelho
2021-03-30 13:24 ` [PATCH 06/12] iwlwifi: change step in so-gf struct Luca Coelho
2021-03-30 13:24 ` [PATCH 07/12] iwlwifi: change name to AX 211 and 411 family Luca Coelho
2021-03-30 13:24 ` [PATCH 08/12] iwlwifi: add 160Mhz to killer 1550 name Luca Coelho
2021-03-30 13:24 ` [PATCH 09/12] iwlwifi: pcie: clear only FH bits handle in the interrupt Luca Coelho
2021-03-30 13:24 ` [PATCH 10/12] iwlwifi: pcie: make cfg vs. trans_cfg more robust Luca Coelho
2021-03-30 13:24 ` [PATCH 11/12] iwlwifi: mvm: support range request command version 12 Luca Coelho
2021-03-30 13:25 ` [PATCH 12/12] iwlwifi: mvm: responder: support responder config command version 8 Luca Coelho

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=iwlwifi.20210330162204.d196fc6ffb23.Idc1ce3ce9fed9178beee7e5409bc669f79b06a0d@changeid \
    --to=luca@coelho.fi \
    --cc=kvalo@codeaurora.org \
    --cc=linux-wireless@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).