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
8 changed files with 51 additions and 10 deletions
|
@ -3728,7 +3728,7 @@ const u32 *b43_nphy_get_tx_gain_table(struct b43_wldev *dev)
|
||||||
switch (phy->rev) {
|
switch (phy->rev) {
|
||||||
case 6:
|
case 6:
|
||||||
case 5:
|
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;
|
return b43_ntab_tx_gain_epa_rev3_hi_pwr_2g;
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case 4:
|
case 4:
|
||||||
|
|
|
@ -1023,7 +1023,7 @@ static void iwl_mvm_scan_umac_dwell(struct iwl_mvm *mvm,
|
||||||
cmd->scan_priority =
|
cmd->scan_priority =
|
||||||
iwl_mvm_scan_priority(mvm, IWL_SCAN_PRIORITY_EXT_6);
|
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 =
|
cmd->ooc_priority =
|
||||||
iwl_mvm_scan_priority(mvm, IWL_SCAN_PRIORITY_EXT_6);
|
iwl_mvm_scan_priority(mvm, IWL_SCAN_PRIORITY_EXT_6);
|
||||||
else
|
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)
|
if (trans->cfg->device_family == IWL_DEVICE_FAMILY_7000)
|
||||||
iwl_set_bits_prph(trans, APMG_PCIDEV_STT_REG,
|
iwl_set_bits_prph(trans, APMG_PCIDEV_STT_REG,
|
||||||
APMG_PCIDEV_STT_VAL_WAKE_ME);
|
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,
|
iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG,
|
||||||
CSR_HW_IF_CONFIG_REG_PREPARE |
|
CSR_HW_IF_CONFIG_REG_PREPARE |
|
||||||
CSR_HW_IF_CONFIG_REG_ENABLE_PME);
|
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);
|
mdelay(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -575,6 +581,10 @@ static int iwl_pcie_prepare_card_hw(struct iwl_trans *trans)
|
||||||
if (ret >= 0)
|
if (ret >= 0)
|
||||||
return 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++) {
|
for (iter = 0; iter < 10; iter++) {
|
||||||
/* If HW is not ready, prepare the conditions to check again */
|
/* If HW is not ready, prepare the conditions to check again */
|
||||||
iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG,
|
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 {
|
do {
|
||||||
ret = iwl_pcie_set_hw_ready(trans);
|
ret = iwl_pcie_set_hw_ready(trans);
|
||||||
if (ret >= 0)
|
if (ret >= 0) {
|
||||||
return 0;
|
ret = 0;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
usleep_range(200, 1000);
|
usleep_range(200, 1000);
|
||||||
t += 200;
|
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");
|
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;
|
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 */
|
/* start timer if queue currently empty */
|
||||||
if (q->read_ptr == q->write_ptr) {
|
if (q->read_ptr == q->write_ptr) {
|
||||||
if (txq->wd_timeout)
|
if (txq->wd_timeout) {
|
||||||
mod_timer(&txq->stuck_timer, jiffies + 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_DEBUG_RPM(trans, "Q: %d first tx - take ref\n", q->id);
|
||||||
iwl_trans_pcie_ref(trans);
|
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;
|
(struct rsi_91x_sdiodev *)adapter->rsi_dev;
|
||||||
u32 len;
|
u32 len;
|
||||||
u32 num_blocks;
|
u32 num_blocks;
|
||||||
|
const u8 *fw;
|
||||||
const struct firmware *fw_entry = NULL;
|
const struct firmware *fw_entry = NULL;
|
||||||
u32 block_size = dev->tx_blk_size;
|
u32 block_size = dev->tx_blk_size;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
@ -200,6 +201,10 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
|
||||||
return status;
|
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;
|
len = fw_entry->size;
|
||||||
|
|
||||||
if (len % 4)
|
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: Instruction size:%d\n", __func__, len);
|
||||||
rsi_dbg(INIT_ZONE, "%s: num blocks: %d\n", __func__, num_blocks);
|
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);
|
release_firmware(fw_entry);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,7 +146,10 @@ static int rsi_load_ta_instructions(struct rsi_common *common)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Copy firmware into DMA-accessible memory */
|
||||||
fw = kmemdup(fw_entry->data, fw_entry->size, GFP_KERNEL);
|
fw = kmemdup(fw_entry->data, fw_entry->size, GFP_KERNEL);
|
||||||
|
if (!fw)
|
||||||
|
return -ENOMEM;
|
||||||
len = fw_entry->size;
|
len = fw_entry->size;
|
||||||
|
|
||||||
if (len % 4)
|
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);
|
rsi_dbg(INIT_ZONE, "%s: num blocks: %d\n", __func__, num_blocks);
|
||||||
|
|
||||||
status = rsi_copy_to_card(common, fw, len, num_blocks);
|
status = rsi_copy_to_card(common, fw, len, num_blocks);
|
||||||
|
kfree(fw);
|
||||||
release_firmware(fw_entry);
|
release_firmware(fw_entry);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1015,9 +1015,12 @@ static void send_beacon_frame(struct ieee80211_hw *hw,
|
||||||
{
|
{
|
||||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||||
struct sk_buff *skb = ieee80211_beacon_get(hw, vif);
|
struct sk_buff *skb = ieee80211_beacon_get(hw, vif);
|
||||||
|
struct rtl_tcb_desc tcb_desc;
|
||||||
|
|
||||||
if (skb)
|
if (skb) {
|
||||||
rtlpriv->intf_ops->adapter_tx(hw, NULL, skb, NULL);
|
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,
|
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(ips, rtl8723be_mod_params.inactiveps, bool, 0444);
|
||||||
module_param_named(swlps, rtl8723be_mod_params.swctrl_lps, 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(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,
|
module_param_named(disable_watchdog, rtl8723be_mod_params.disable_watchdog,
|
||||||
bool, 0444);
|
bool, 0444);
|
||||||
MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
|
MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
|
||||||
|
|
Loading…
Add table
Reference in a new issue