Skip to contentSkip to conversation

pull request: iwlwifi 2014-05-07

PATCH New Emmanuel Grumbach 2 participants 7 messages May 7, 2014 – May 8, 2014 Networking drivers (wireless)

lore
Share & tools
lore
#0 lore raw

Hi John,

This is a pull request intended for 3.15 release.

Alex fixes the scan by disabling the fragmented scan. David prevents scan offload while associated, the firmware seems not to like it. I fix a stupid bug I made in BT Coex, and fix a bad #ifdef clause in rate scaling. Along with that there is a fix for a NULL pointer exception that can happen if we load the driver and our ISR gets called because the interrupt line is shared. The fix has been tested by the reporter.

Please pull.

The following changes since commit a6bc92803e7f765e02c923cf37c8e280e729642a:

iwlwifi: mvm: BT Coex - fix Look Up Table (2014-04-13 16:51:07 +0300)

are available in the git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes.git master

for you to fetch changes up to 83f7a85f1134c6e914453f5747435415a23d516b:

iwlwifi: pcie: disable interrupts upon PCIe alloc (2014-05-07 22:54:32 +0300)

----------------------------------------------------------------
Alexander Bondar (1):
iwlwifi: mvm: several fixes in scan

David Spinadel (1):
iwlwifi: mvm: do no sched scan while associated

Emmanuel Grumbach (3):
iwlwifi: mvm: BT Coex - fix validity flags during init
iwlwifi: mvm: rs - s/CPTCFG/CONFIG
iwlwifi: pcie: disable interrupts upon PCIe alloc

 drivers/net/wireless/iwlwifi/mvm/coex.c        |  6 +++---
 drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h |  8 ++++----
 drivers/net/wireless/iwlwifi/mvm/mac80211.c    |  5 +++++
 drivers/net/wireless/iwlwifi/mvm/mvm.h         |  3 +++
 drivers/net/wireless/iwlwifi/mvm/rs.c          |  2 +-
 drivers/net/wireless/iwlwifi/mvm/scan.c        | 53 ++++++++++++-----------------------------------------
 drivers/net/wireless/iwlwifi/mvm/utils.c       | 19 +++++++++++++++++++
 drivers/net/wireless/iwlwifi/pcie/trans.c      | 10 ++++++----
 8 files changed, 53 insertions(+), 53 deletions(-)
#1 lore raw

PATCH 1/5 iwlwifi: mvm: several fixes in scan

From: Alexander Bondar <[email protected]>

The firmware doesn't handle properly the fragmented scan. Stop using it.
While at it change max_out_time and suspend_time units from usec to TUs as expected by firmware API.

---
 drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h |  8 ++--
 drivers/net/wireless/iwlwifi/mvm/scan.c        | 53 ++++++--------------------
 2 files changed, 16 insertions(+), 45 deletions(-)
drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h +4 -4
index 9426905..d73a89e 100644
@@ -183,9 +183,9 @@ enum iwl_scan_type {
  *	this number of packets were received (typically 1)
  * @passive2active: is auto switching from passive to active during scan allowed
  * @rxchain_sel_flags: RXON_RX_CHAIN_*
- * @max_out_time: in usecs, max out of serving channel time
+ * @max_out_time: in TUs, max out of serving channel time
  * @suspend_time: how long to pause scan when returning to service channel:
- *	bits 0-19: beacon interal in usecs (suspend before executing)
+ *	bits 0-19: beacon interal in TUs (suspend before executing)
  *	bits 20-23: reserved
  *	bits 24-31: number of beacons (suspend between channels)
  * @rxon_flags: RXON_FLG_*
@@ -383,8 +383,8 @@ enum scan_framework_client {
  * @quiet_plcp_th:	quiet channel num of packets threshold
  * @good_CRC_th:	passive to active promotion threshold
  * @rx_chain:		RXON rx chain.
- * @max_out_time:	max uSec to be out of assoceated channel
- * @suspend_time:	pause scan this long when returning to service channel
+ * @max_out_time:	max TUs to be out of assoceated channel
+ * @suspend_time:	pause scan this TUs when returning to service channel
  * @flags:		RXON flags
  * @filter_flags:	RXONfilter
  * @tx_cmd:		tx command for active scan; for 2GHz and for 5GHz.
drivers/net/wireless/iwlwifi/mvm/scan.c +12 -41

63 lines not on this page · raw message

Signature · 1 line
1.8.3.2
#2 lore raw

PATCH 2/5 iwlwifi: mvm: BT Coex - fix validity flags during init

In reply to Emmanuel Grumbach

From: Emmanuel Grumbach <[email protected]>

The commit below introduced a bug in the validity bits in init. Due to that, all the Coex mechanism stopped sending kills to the BT side. Fix that.

Fixes b9fae2d54c9f ("iwlwifi: mvm: BT Coex add support for Co-running block")
---
 drivers/net/wireless/iwlwifi/mvm/coex.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/net/wireless/iwlwifi/mvm/coex.c +3 -3
index fa858d54..0489314 100644
@@ -611,14 +611,14 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm)
 		bt_cmd->flags |= cpu_to_le32(BT_COEX_SYNC2SCO);
 
 	if (IWL_MVM_BT_COEX_CORUNNING) {
-		bt_cmd->valid_bit_msk = cpu_to_le32(BT_VALID_CORUN_LUT_20 |
-						    BT_VALID_CORUN_LUT_40);
+		bt_cmd->valid_bit_msk |= cpu_to_le32(BT_VALID_CORUN_LUT_20 |
+						     BT_VALID_CORUN_LUT_40);
 		bt_cmd->flags |= cpu_to_le32(BT_COEX_CORUNNING);
 	}
 
 	if (IWL_MVM_BT_COEX_MPLUT) {
 		bt_cmd->flags |= cpu_to_le32(BT_COEX_MPLUT);
-		bt_cmd->valid_bit_msk = cpu_to_le32(BT_VALID_MULTI_PRIO_LUT);
+		bt_cmd->valid_bit_msk |= cpu_to_le32(BT_VALID_MULTI_PRIO_LUT);
 	}
 
 	if (mvm->cfg->bt_shared_single_ant)
Signature · 1 line
1.8.3.2
#3 lore raw

PATCH 3/5 iwlwifi: mvm: rs - s/CPTCFG/CONFIG

In reply to Emmanuel Grumbach

From: Emmanuel Grumbach <[email protected]>

My bad - I forgot to update this when sending the patch upstream.

Fixes 87d5e4155c00 ("iwlwifi: mvm: rs: reinit rs if no tx for a long time")
---
 drivers/net/wireless/iwlwifi/mvm/rs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/rs.c +1 -1
index 9f52c5b..e1c8388 100644
@@ -1010,7 +1010,7 @@ static void rs_tx_status(void *mvm_r, struct ieee80211_supported_band *sband,
 		return;
 	}
 
-#ifdef CPTCFG_MAC80211_DEBUGFS
+#ifdef CONFIG_MAC80211_DEBUGFS
 	/* Disable last tx check if we are debugging with fixed rate */
 	if (lq_sta->dbg_fixed_rate) {
 		IWL_DEBUG_RATE(mvm, "Fixed rate. avoid rate scaling\n");
Signature · 1 line
1.8.3.2
#4 lore raw

PATCH 4/5 iwlwifi: mvm: do no sched scan while associated

In reply to Emmanuel Grumbach

From: David Spinadel <[email protected]>

Currently the FW doesn't support sched scan while associated, Prevent it.

---
 drivers/net/wireless/iwlwifi/mvm/mac80211.c |  5 +++++
 drivers/net/wireless/iwlwifi/mvm/mvm.h      |  3 +++
 drivers/net/wireless/iwlwifi/mvm/utils.c    | 19 +++++++++++++++++++
 3 files changed, 27 insertions(+)
drivers/net/wireless/iwlwifi/mvm/mac80211.c +5 -0
index f0cebf1..593f723 100644
@@ -1807,6 +1807,11 @@ static int iwl_mvm_mac_sched_scan_start(struct ieee80211_hw *hw,
 
 	mutex_lock(&mvm->mutex);
 
+	if (iwl_mvm_is_associated(mvm)) {
+		ret = -EBUSY;
+		goto out;
+	}
+
 	switch (mvm->scan_status) {
 	case IWL_MVM_SCAN_OS:
 		IWL_DEBUG_SCAN(mvm, "Stopping previous scan for sched_scan\n");
drivers/net/wireless/iwlwifi/mvm/mvm.h +3 -0
index d564233..84c75a1 100644
@@ -1003,6 +1003,9 @@ static inline bool iwl_mvm_vif_low_latency(struct iwl_mvm_vif *mvmvif)
 	return mvmvif->low_latency;
 }
 
+/* Assoc status */
+bool iwl_mvm_is_associated(struct iwl_mvm *mvm);
+
 /* Thermal management and CT-kill */
 void iwl_mvm_tt_tx_backoff(struct iwl_mvm *mvm, u32 backoff);
 void iwl_mvm_tt_handler(struct iwl_mvm *mvm);
drivers/net/wireless/iwlwifi/mvm/utils.c +19 -0
index d619851..6fdbef9 100644
@@ -644,3 +644,22 @@ bool iwl_mvm_low_latency(struct iwl_mvm *mvm)
 
 	return result;
 }
+
+static void iwl_mvm_assoc_iter(void *_data, u8 *mac, struct ieee80211_vif *vif)
+{
+	bool *assoc = _data;
+
+	if (vif->bss_conf.assoc)
+		*assoc = true;
+}
+
+bool iwl_mvm_is_associated(struct iwl_mvm *mvm)
+{
+	bool assoc = false;
+
+	ieee80211_iterate_active_interfaces_atomic(
+			mvm->hw, IEEE80211_IFACE_ITER_NORMAL,
+			iwl_mvm_assoc_iter, &assoc);
+
+	return assoc;
+}
Signature · 1 line
1.8.3.2
#5 lore raw

PATCH 5/5 iwlwifi: pcie: disable interrupts upon PCIe alloc

In reply to Emmanuel Grumbach

From: Emmanuel Grumbach <[email protected]>

In case RFKILL is in KILL position, the NIC will issue an interrupt straight away. This interrupt won't be sent because it is masked in the hardware.
But if our interrupt service routine is called for another reason (SHARED_IRQ), then we'll look at the interrupt cause and service it. This can cause bad things if we are not ready yet.
Explicitly clean the interrupt cause register to make sure we won't service anything before we are ready to.

---
 drivers/net/wireless/iwlwifi/pcie/trans.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
drivers/net/wireless/iwlwifi/pcie/trans.c +6 -4
index dcfd6d8..2365553 100644
@@ -1749,6 +1749,10 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 	 * PCI Tx retries from interfering with C3 CPU state */
 	pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00);
 
+	trans->dev = &pdev->dev;
+	trans_pcie->pci_dev = pdev;
+	iwl_disable_interrupts(trans);
+
 	err = pci_enable_msi(pdev);
 	if (err) {
 		dev_err(&pdev->dev, "pci_enable_msi failed(0X%x)\n", err);
@@ -1760,8 +1764,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 		}
 	}
 
-	trans->dev = &pdev->dev;
-	trans_pcie->pci_dev = pdev;
 	trans->hw_rev = iwl_read32(trans, CSR_HW_REV);
 	trans->hw_id = (pdev->device << 16) + pdev->subsystem_device;
 	snprintf(trans->hw_id_str, sizeof(trans->hw_id_str),
@@ -1787,8 +1789,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 		goto out_pci_disable_msi;
 	}
 
-	trans_pcie->inta_mask = CSR_INI_SET_MASK;
-
 	if (iwl_pcie_alloc_ict(trans))
 		goto out_free_cmd_pool;
 
@@ -1800,6 +1800,8 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 		goto out_free_ict;
 	}
 
+	trans_pcie->inta_mask = CSR_INI_SET_MASK;
+
 	return trans;
 
 out_free_ict:
Signature · 1 line
1.8.3.2
#6 lore raw
In reply to Emmanuel Grumbach
Quoted 13 lines · Emmanuel Grumbach

Hi John,

This is a pull request intended for 3.15 release.

Alex fixes the scan by disabling the fragmented scan. David prevents scan offload while associated, the firmware seems not to like it. I fix a stupid bug I made in BT Coex, and fix a bad #ifdef clause in rate scaling. Along with that there is a fix for a NULL pointer exception that can happen if we load the driver and our ISR gets called because the interrupt line is shared. The fix has been tested by the reporter.

Please pull.

The following changes since commit a6bc92803e7f765e02c923cf37c8e280e729642a:

iwlwifi: mvm: BT Coex - fix Look Up Table (2014-04-13 16:51:07 +0300)

Quoted 7 lines

are available in the git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes.git master

for you to fetch changes up to 83f7a85f1134c6e914453f5747435415a23d516b:

iwlwifi: pcie: disable interrupts upon PCIe alloc (2014-05-07 22:54:32 +0300)

Pulling now... Please limit any further fix requests to very small and important fixes only.

Thanks,

John

Signature · 2 lines
John W. Linville		Someday the world will need a hero, and you
[email protected]			might be all we have.  Be ready.