wireless-drivers fixes for 4.18
First set of fixes for 4.18 and for numerous drivers. Something to mention about is the wcn36xx fix which makes it possible to compile with gcc older than 4.4 (though I'm not sure if we even support those anymore). qtnfmac * coverity fix for a new commit in v4.18-rc1 rtlwifi * fix kernel oops during driver removal * fix firmware image corruption for rtl8821ae brcmfmac * fix crash if there's no firmware image mwifiex * a revert and a better fix for a new commit v4.18-rc1 mt7601u * fix a recent regression about unnecessary warning about avg_rssi wcn36xx * convert testmode.c to plain ASCII ath10k * fix a firmware crash during bandwidth change -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJbO1LKAAoJEG4XJFUm622bPEgH/jJ552p5KdOFkwtKWQ9sybKP 53yCEJw0sjaKVaXdPbOLZQP4ioJ0xYiOxKN1LBmBg2AVFKvnSp5LRWwmpzqdpOoE oYo09wcSE5Q7AFHaWDmV5/6ze/S1Aem9B5iNdS/hScuXqsnqct17RVO1zVWpHnU5 W8+qVFrBcbqrvuTDdGo5GBaUQBeRHpIpGjABBk7D6qXVwOtzr2ibKGRHRITu3yYo vA+IF+S+IwWEITt4AxaN728sk6Q3S9r5kBmRlyzlfeSmT8S/zS8Hid5P2eQz6Dv4 Ib22ZvBVFyKQd4qeXYG1lWxbTQrNZIY3JUDGkcdhkhdb3TKYL37x3mWP2LoTpK4= =0sGc -----END PGP SIGNATURE----- Merge tag 'wireless-drivers-for-davem-2018-07-03' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers Kalle Valo says: ==================== wireless-drivers fixes for 4.18 First set of fixes for 4.18 and for numerous drivers. Something to mention about is the wcn36xx fix which makes it possible to compile with gcc older than 4.4 (though I'm not sure if we even support those anymore). qtnfmac * coverity fix for a new commit in v4.18-rc1 rtlwifi * fix kernel oops during driver removal * fix firmware image corruption for rtl8821ae brcmfmac * fix crash if there's no firmware image mwifiex * a revert and a better fix for a new commit v4.18-rc1 mt7601u * fix a recent regression about unnecessary warning about avg_rssi wcn36xx * convert testmode.c to plain ASCII ath10k * fix a firmware crash during bandwidth change ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
248c690a2d
|
@ -8628,7 +8628,7 @@ MARVELL MWIFIEX WIRELESS DRIVER
|
|||
M: Amitkumar Karwar <amitkarwar@gmail.com>
|
||||
M: Nishant Sarmukadam <nishants@marvell.com>
|
||||
M: Ganapathi Bhat <gbhat@marvell.com>
|
||||
M: Xinming Hu <huxm@marvell.com>
|
||||
M: Xinming Hu <huxinming820@gmail.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/wireless/marvell/mwifiex/
|
||||
|
|
|
@ -6058,8 +6058,19 @@ static void ath10k_sta_rc_update_wk(struct work_struct *wk)
|
|||
ath10k_mac_max_vht_nss(vht_mcs_mask)));
|
||||
|
||||
if (changed & IEEE80211_RC_BW_CHANGED) {
|
||||
ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n",
|
||||
sta->addr, bw);
|
||||
enum wmi_phy_mode mode;
|
||||
|
||||
mode = chan_to_phymode(&def);
|
||||
ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d phymode %d\n",
|
||||
sta->addr, bw, mode);
|
||||
|
||||
err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
|
||||
WMI_PEER_PHYMODE, mode);
|
||||
if (err) {
|
||||
ath10k_warn(ar, "failed to update STA %pM peer phymode %d: %d\n",
|
||||
sta->addr, mode, err);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
|
||||
WMI_PEER_CHAN_WIDTH, bw);
|
||||
|
@ -6100,6 +6111,7 @@ static void ath10k_sta_rc_update_wk(struct work_struct *wk)
|
|||
sta->addr);
|
||||
}
|
||||
|
||||
exit:
|
||||
mutex_unlock(&ar->conf_mutex);
|
||||
}
|
||||
|
||||
|
|
|
@ -6144,6 +6144,7 @@ enum wmi_peer_param {
|
|||
WMI_PEER_NSS = 0x5,
|
||||
WMI_PEER_USE_4ADDR = 0x6,
|
||||
WMI_PEER_DEBUG = 0xa,
|
||||
WMI_PEER_PHYMODE = 0xd,
|
||||
WMI_PEER_DUMMY_VAR = 0xff, /* dummy parameter for STA PS workaround */
|
||||
};
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/*
|
||||
* Copyright (c) 2018, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
|
|
|
@ -4296,6 +4296,13 @@ void brcmf_sdio_remove(struct brcmf_sdio *bus)
|
|||
brcmf_dbg(TRACE, "Enter\n");
|
||||
|
||||
if (bus) {
|
||||
/* Stop watchdog task */
|
||||
if (bus->watchdog_tsk) {
|
||||
send_sig(SIGTERM, bus->watchdog_tsk, 1);
|
||||
kthread_stop(bus->watchdog_tsk);
|
||||
bus->watchdog_tsk = NULL;
|
||||
}
|
||||
|
||||
/* De-register interrupt handler */
|
||||
brcmf_sdiod_intr_unregister(bus->sdiodev);
|
||||
|
||||
|
|
|
@ -644,11 +644,6 @@ static void mwifiex_usb_disconnect(struct usb_interface *intf)
|
|||
MWIFIEX_FUNC_SHUTDOWN);
|
||||
}
|
||||
|
||||
if (adapter->workqueue)
|
||||
flush_workqueue(adapter->workqueue);
|
||||
|
||||
mwifiex_usb_free(card);
|
||||
|
||||
mwifiex_dbg(adapter, FATAL,
|
||||
"%s: removing card\n", __func__);
|
||||
mwifiex_remove_card(adapter);
|
||||
|
@ -1356,6 +1351,8 @@ static void mwifiex_unregister_dev(struct mwifiex_adapter *adapter)
|
|||
{
|
||||
struct usb_card_rec *card = (struct usb_card_rec *)adapter->card;
|
||||
|
||||
mwifiex_usb_free(card);
|
||||
|
||||
mwifiex_usb_cleanup_tx_aggr(adapter);
|
||||
|
||||
card->adapter = NULL;
|
||||
|
|
|
@ -986,13 +986,15 @@ static void mt7601u_agc_tune(struct mt7601u_dev *dev)
|
|||
*/
|
||||
spin_lock_bh(&dev->con_mon_lock);
|
||||
avg_rssi = ewma_rssi_read(&dev->avg_rssi);
|
||||
WARN_ON_ONCE(avg_rssi == 0);
|
||||
spin_unlock_bh(&dev->con_mon_lock);
|
||||
if (avg_rssi == 0)
|
||||
return;
|
||||
|
||||
avg_rssi = -avg_rssi;
|
||||
if (avg_rssi <= -70)
|
||||
val -= 0x20;
|
||||
else if (avg_rssi <= -60)
|
||||
val -= 0x10;
|
||||
spin_unlock_bh(&dev->con_mon_lock);
|
||||
|
||||
if (val != mt7601u_bbp_rr(dev, 66))
|
||||
mt7601u_bbp_wr(dev, 66, val);
|
||||
|
|
|
@ -654,8 +654,7 @@ qtnf_disconnect(struct wiphy *wiphy, struct net_device *dev,
|
|||
vif = qtnf_mac_get_base_vif(mac);
|
||||
if (!vif) {
|
||||
pr_err("MAC%u: primary VIF is not configured\n", mac->macid);
|
||||
ret = -EFAULT;
|
||||
goto out;
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (vif->wdev.iftype != NL80211_IFTYPE_STATION) {
|
||||
|
|
|
@ -484,18 +484,21 @@ static void _rtl_init_deferred_work(struct ieee80211_hw *hw)
|
|||
|
||||
}
|
||||
|
||||
void rtl_deinit_deferred_work(struct ieee80211_hw *hw)
|
||||
void rtl_deinit_deferred_work(struct ieee80211_hw *hw, bool ips_wq)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
|
||||
del_timer_sync(&rtlpriv->works.watchdog_timer);
|
||||
|
||||
cancel_delayed_work(&rtlpriv->works.watchdog_wq);
|
||||
cancel_delayed_work_sync(&rtlpriv->works.watchdog_wq);
|
||||
if (ips_wq)
|
||||
cancel_delayed_work(&rtlpriv->works.ips_nic_off_wq);
|
||||
cancel_delayed_work(&rtlpriv->works.ps_work);
|
||||
cancel_delayed_work(&rtlpriv->works.ps_rfon_wq);
|
||||
cancel_delayed_work(&rtlpriv->works.fwevt_wq);
|
||||
cancel_delayed_work(&rtlpriv->works.c2hcmd_wq);
|
||||
else
|
||||
cancel_delayed_work_sync(&rtlpriv->works.ips_nic_off_wq);
|
||||
cancel_delayed_work_sync(&rtlpriv->works.ps_work);
|
||||
cancel_delayed_work_sync(&rtlpriv->works.ps_rfon_wq);
|
||||
cancel_delayed_work_sync(&rtlpriv->works.fwevt_wq);
|
||||
cancel_delayed_work_sync(&rtlpriv->works.c2hcmd_wq);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rtl_deinit_deferred_work);
|
||||
|
||||
|
|
|
@ -121,7 +121,7 @@ void rtl_init_rfkill(struct ieee80211_hw *hw);
|
|||
void rtl_deinit_rfkill(struct ieee80211_hw *hw);
|
||||
|
||||
void rtl_watch_dog_timer_callback(struct timer_list *t);
|
||||
void rtl_deinit_deferred_work(struct ieee80211_hw *hw);
|
||||
void rtl_deinit_deferred_work(struct ieee80211_hw *hw, bool ips_wq);
|
||||
|
||||
bool rtl_action_proc(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx);
|
||||
int rtlwifi_rate_mapping(struct ieee80211_hw *hw, bool isht,
|
||||
|
|
|
@ -130,7 +130,6 @@ found_alt:
|
|||
firmware->size);
|
||||
rtlpriv->rtlhal.wowlan_fwsize = firmware->size;
|
||||
}
|
||||
rtlpriv->rtlhal.fwsize = firmware->size;
|
||||
release_firmware(firmware);
|
||||
}
|
||||
|
||||
|
@ -196,7 +195,7 @@ static void rtl_op_stop(struct ieee80211_hw *hw)
|
|||
/* reset sec info */
|
||||
rtl_cam_reset_sec_info(hw);
|
||||
|
||||
rtl_deinit_deferred_work(hw);
|
||||
rtl_deinit_deferred_work(hw, false);
|
||||
}
|
||||
rtlpriv->intf_ops->adapter_stop(hw);
|
||||
|
||||
|
|
|
@ -2377,7 +2377,7 @@ void rtl_pci_disconnect(struct pci_dev *pdev)
|
|||
ieee80211_unregister_hw(hw);
|
||||
rtlmac->mac80211_registered = 0;
|
||||
} else {
|
||||
rtl_deinit_deferred_work(hw);
|
||||
rtl_deinit_deferred_work(hw, false);
|
||||
rtlpriv->intf_ops->adapter_stop(hw);
|
||||
}
|
||||
rtlpriv->cfg->ops->disable_interrupt(hw);
|
||||
|
|
|
@ -71,7 +71,7 @@ bool rtl_ps_disable_nic(struct ieee80211_hw *hw)
|
|||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
|
||||
/*<1> Stop all timer */
|
||||
rtl_deinit_deferred_work(hw);
|
||||
rtl_deinit_deferred_work(hw, true);
|
||||
|
||||
/*<2> Disable Interrupt */
|
||||
rtlpriv->cfg->ops->disable_interrupt(hw);
|
||||
|
@ -292,7 +292,7 @@ void rtl_ips_nic_on(struct ieee80211_hw *hw)
|
|||
struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
|
||||
enum rf_pwrstate rtstate;
|
||||
|
||||
cancel_delayed_work(&rtlpriv->works.ips_nic_off_wq);
|
||||
cancel_delayed_work_sync(&rtlpriv->works.ips_nic_off_wq);
|
||||
|
||||
mutex_lock(&rtlpriv->locks.ips_mutex);
|
||||
if (ppsc->inactiveps) {
|
||||
|
|
|
@ -1132,7 +1132,7 @@ void rtl_usb_disconnect(struct usb_interface *intf)
|
|||
ieee80211_unregister_hw(hw);
|
||||
rtlmac->mac80211_registered = 0;
|
||||
} else {
|
||||
rtl_deinit_deferred_work(hw);
|
||||
rtl_deinit_deferred_work(hw, false);
|
||||
rtlpriv->intf_ops->adapter_stop(hw);
|
||||
}
|
||||
/*deinit rfkill */
|
||||
|
|
Loading…
Reference in New Issue