forked from Minki/linux
iwlwifi:
* a fix for the stuck TFD queue mechanism - it was producing noisy false alarms * a fix for the NIC prepare flow that prevented the driver from being able to access the device on certain systems * a fix for the scan prority handling which allows the regular scan to run even if a scheduled scan is already running rsi: * fix firmware load DMA regression b43: * fix extpa_gain check for 2GHz rtlwifi: * fix NULL dereference when PCI driver used as an AP * add missing module parameter declaration for rtl8723be_mod_params.msi_support -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQEcBAABAgAGBQJVwOsmAAoJEG4XJFUm622bWSAIAJDlW0ZKnxI+tmsbU2CYuoQS yfiK+oTuQE5+eB+5bNaJqSI2QSzVo11JBxnf4014wu+/gjKy2OHQ48ufXbkFfHB2 t2o+rIx7WL5zvoy67fIifgIQSdg542e68xPc8Wz6MV58szuYscBT78dy2ZWvthqB S6DK8K+ohHzHYMV5fw65xkcmsXB8BEKEoUckm8ZxjsLF4Pj+ZzAgpqf+i85JYkFM LwktfKRxg2un9u51IhBCPZUUxe7MhLgZbSuHSP/7ltxWIGctseMAFMlCMrmi9+2B zXPR+2EMWLy0rgmQ04/sG6LjNdW6tmF1rCtcuKnS7hiOngubAj3UEj9d5r98/LI= =SqUX -----END PGP SIGNATURE----- Merge tag 'wireless-drivers-for-davem-2015-08-04' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers Kalle Valo says: ==================== iwlwifi: * a fix for the stuck TFD queue mechanism - it was producing noisy false alarms * a fix for the NIC prepare flow that prevented the driver from being able to access the device on certain systems * a fix for the scan prority handling which allows the regular scan to run even if a scheduled scan is already running rsi: * fix firmware load DMA regression b43: * fix extpa_gain check for 2GHz rtlwifi: * fix NULL dereference when PCI driver used as an AP * add missing module parameter declaration for rtl8723be_mod_params.msi_support ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
50e18af16f
@ -3728,7 +3728,7 @@ const u32 *b43_nphy_get_tx_gain_table(struct b43_wldev *dev)
|
||||
switch (phy->rev) {
|
||||
case 6:
|
||||
case 5:
|
||||
if (sprom->fem.ghz5.extpa_gain == 3)
|
||||
if (sprom->fem.ghz2.extpa_gain == 3)
|
||||
return b43_ntab_tx_gain_epa_rev3_hi_pwr_2g;
|
||||
/* fall through */
|
||||
case 4:
|
||||
|
@ -1023,7 +1023,7 @@ static void iwl_mvm_scan_umac_dwell(struct iwl_mvm *mvm,
|
||||
cmd->scan_priority =
|
||||
iwl_mvm_scan_priority(mvm, IWL_SCAN_PRIORITY_EXT_6);
|
||||
|
||||
if (iwl_mvm_scan_total_iterations(params) == 0)
|
||||
if (iwl_mvm_scan_total_iterations(params) == 1)
|
||||
cmd->ooc_priority =
|
||||
iwl_mvm_scan_priority(mvm, IWL_SCAN_PRIORITY_EXT_6);
|
||||
else
|
||||
|
@ -478,10 +478,16 @@ static void iwl_pcie_apm_stop(struct iwl_trans *trans, bool op_mode_leave)
|
||||
if (trans->cfg->device_family == IWL_DEVICE_FAMILY_7000)
|
||||
iwl_set_bits_prph(trans, APMG_PCIDEV_STT_REG,
|
||||
APMG_PCIDEV_STT_VAL_WAKE_ME);
|
||||
else if (trans->cfg->device_family == IWL_DEVICE_FAMILY_8000)
|
||||
else if (trans->cfg->device_family == IWL_DEVICE_FAMILY_8000) {
|
||||
iwl_set_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG,
|
||||
CSR_RESET_LINK_PWR_MGMT_DISABLED);
|
||||
iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG,
|
||||
CSR_HW_IF_CONFIG_REG_PREPARE |
|
||||
CSR_HW_IF_CONFIG_REG_ENABLE_PME);
|
||||
mdelay(1);
|
||||
iwl_clear_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG,
|
||||
CSR_RESET_LINK_PWR_MGMT_DISABLED);
|
||||
}
|
||||
mdelay(5);
|
||||
}
|
||||
|
||||
@ -575,6 +581,10 @@ static int iwl_pcie_prepare_card_hw(struct iwl_trans *trans)
|
||||
if (ret >= 0)
|
||||
return 0;
|
||||
|
||||
iwl_set_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG,
|
||||
CSR_RESET_LINK_PWR_MGMT_DISABLED);
|
||||
msleep(1);
|
||||
|
||||
for (iter = 0; iter < 10; iter++) {
|
||||
/* If HW is not ready, prepare the conditions to check again */
|
||||
iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG,
|
||||
@ -582,8 +592,10 @@ static int iwl_pcie_prepare_card_hw(struct iwl_trans *trans)
|
||||
|
||||
do {
|
||||
ret = iwl_pcie_set_hw_ready(trans);
|
||||
if (ret >= 0)
|
||||
return 0;
|
||||
if (ret >= 0) {
|
||||
ret = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
usleep_range(200, 1000);
|
||||
t += 200;
|
||||
@ -593,6 +605,10 @@ static int iwl_pcie_prepare_card_hw(struct iwl_trans *trans)
|
||||
|
||||
IWL_ERR(trans, "Couldn't prepare the card\n");
|
||||
|
||||
out:
|
||||
iwl_clear_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG,
|
||||
CSR_RESET_LINK_PWR_MGMT_DISABLED);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1875,8 +1875,19 @@ int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
|
||||
|
||||
/* start timer if queue currently empty */
|
||||
if (q->read_ptr == q->write_ptr) {
|
||||
if (txq->wd_timeout)
|
||||
mod_timer(&txq->stuck_timer, jiffies + txq->wd_timeout);
|
||||
if (txq->wd_timeout) {
|
||||
/*
|
||||
* If the TXQ is active, then set the timer, if not,
|
||||
* set the timer in remainder so that the timer will
|
||||
* be armed with the right value when the station will
|
||||
* wake up.
|
||||
*/
|
||||
if (!txq->frozen)
|
||||
mod_timer(&txq->stuck_timer,
|
||||
jiffies + txq->wd_timeout);
|
||||
else
|
||||
txq->frozen_expiry_remainder = txq->wd_timeout;
|
||||
}
|
||||
IWL_DEBUG_RPM(trans, "Q: %d first tx - take ref\n", q->id);
|
||||
iwl_trans_pcie_ref(trans);
|
||||
}
|
||||
|
@ -172,6 +172,7 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
|
||||
(struct rsi_91x_sdiodev *)adapter->rsi_dev;
|
||||
u32 len;
|
||||
u32 num_blocks;
|
||||
const u8 *fw;
|
||||
const struct firmware *fw_entry = NULL;
|
||||
u32 block_size = dev->tx_blk_size;
|
||||
int status = 0;
|
||||
@ -200,6 +201,10 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Copy firmware into DMA-accessible memory */
|
||||
fw = kmemdup(fw_entry->data, fw_entry->size, GFP_KERNEL);
|
||||
if (!fw)
|
||||
return -ENOMEM;
|
||||
len = fw_entry->size;
|
||||
|
||||
if (len % 4)
|
||||
@ -210,7 +215,8 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
|
||||
rsi_dbg(INIT_ZONE, "%s: Instruction size:%d\n", __func__, len);
|
||||
rsi_dbg(INIT_ZONE, "%s: num blocks: %d\n", __func__, num_blocks);
|
||||
|
||||
status = rsi_copy_to_card(common, fw_entry->data, len, num_blocks);
|
||||
status = rsi_copy_to_card(common, fw, len, num_blocks);
|
||||
kfree(fw);
|
||||
release_firmware(fw_entry);
|
||||
return status;
|
||||
}
|
||||
|
@ -146,7 +146,10 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Copy firmware into DMA-accessible memory */
|
||||
fw = kmemdup(fw_entry->data, fw_entry->size, GFP_KERNEL);
|
||||
if (!fw)
|
||||
return -ENOMEM;
|
||||
len = fw_entry->size;
|
||||
|
||||
if (len % 4)
|
||||
@ -158,6 +161,7 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
|
||||
rsi_dbg(INIT_ZONE, "%s: num blocks: %d\n", __func__, num_blocks);
|
||||
|
||||
status = rsi_copy_to_card(common, fw, len, num_blocks);
|
||||
kfree(fw);
|
||||
release_firmware(fw_entry);
|
||||
return status;
|
||||
}
|
||||
|
@ -1015,9 +1015,12 @@ static void send_beacon_frame(struct ieee80211_hw *hw,
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct sk_buff *skb = ieee80211_beacon_get(hw, vif);
|
||||
struct rtl_tcb_desc tcb_desc;
|
||||
|
||||
if (skb)
|
||||
rtlpriv->intf_ops->adapter_tx(hw, NULL, skb, NULL);
|
||||
if (skb) {
|
||||
memset(&tcb_desc, 0, sizeof(struct rtl_tcb_desc));
|
||||
rtlpriv->intf_ops->adapter_tx(hw, NULL, skb, &tcb_desc);
|
||||
}
|
||||
}
|
||||
|
||||
static void rtl_op_bss_info_changed(struct ieee80211_hw *hw,
|
||||
|
@ -385,6 +385,7 @@ module_param_named(debug, rtl8723be_mod_params.debug, int, 0444);
|
||||
module_param_named(ips, rtl8723be_mod_params.inactiveps, bool, 0444);
|
||||
module_param_named(swlps, rtl8723be_mod_params.swctrl_lps, bool, 0444);
|
||||
module_param_named(fwlps, rtl8723be_mod_params.fwctrl_lps, bool, 0444);
|
||||
module_param_named(msi, rtl8723be_mod_params.msi_support, bool, 0444);
|
||||
module_param_named(disable_watchdog, rtl8723be_mod_params.disable_watchdog,
|
||||
bool, 0444);
|
||||
MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
|
||||
|
Loading…
Reference in New Issue
Block a user