pull request: iwlwifi 2014-05-07
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(-)
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
@@ -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
PATCH 2/5 iwlwifi: mvm: BT Coex - fix validity flags during init
In reply to Emmanuel GrumbachFrom: 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.
--- drivers/net/wireless/iwlwifi/mvm/coex.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/net/wireless/iwlwifi/mvm/coex.c +3 -3
@@ -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
PATCH 3/5 iwlwifi: mvm: rs - s/CPTCFG/CONFIG
In reply to Emmanuel GrumbachFrom: Emmanuel Grumbach <[email protected]>
My bad - I forgot to update this when sending the patch upstream.
--- drivers/net/wireless/iwlwifi/mvm/rs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/rs.c +1 -1
@@ -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
PATCH 4/5 iwlwifi: mvm: do no sched scan while associated
In reply to Emmanuel GrumbachFrom: 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
@@ -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
@@ -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
@@ -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
PATCH 5/5 iwlwifi: pcie: disable interrupts upon PCIe alloc
In reply to Emmanuel GrumbachFrom: 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
@@ -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
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.gitmasterfor 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.