ath10k/ath10k-ct: fix incorrect multicast/broadcast rate setting
If no mcast_rate is set for the wifi-iface then there is no rate_idx (0)
set for the bss. This breaks for example 5GHz meshpoint interfaces because
0 maps to a CCK rate (11Mbit/s).
It must also be avoided that the ath10k-ct internal state for the rates is
not synced with the mac80211 rates state. Otherwise, the user specified
rate (e.g. a wifi-iface mcast_rate for a meshpoint interface) will only be
set on startup. And a short while after that, ath10k-ct specific code in
ath10k_check_apply_special_rates is missing a valid rate in its own
structures and is then recalculating a new default rate. This default rate
is in most situations not the requested rate.
Fixes: a399b60735
("ath10k/ath10k-ct: support multicast and management rate control")
This commit is contained in:
parent
dcf5f192a0
commit
b2f249e995
@ -0,0 +1,113 @@
|
||||
From: Sven Eckelmann <sven@narfation.org>
|
||||
Date: Mon, 25 Feb 2019 20:42:28 +0100
|
||||
Subject: ath10k-ct: fix incorrect multicast/broadcast rate setting
|
||||
|
||||
If no mcast_rate is set for the wifi-iface then there is no rate_idx (0)
|
||||
set for the bss. This can break for example 5GHz meshpoint interfaces
|
||||
because 0 maps to a CCK rate (11Mbit/s).
|
||||
|
||||
It must also be avoided that the internal state for the rates is not synced
|
||||
with the mac80211 rates state. Otherwise, the a rate (e.g. a wifi-iface
|
||||
mcast_rate for a meshpoint interface) will be set on startup. And a short
|
||||
while after that, ath10k-ct specific code in
|
||||
ath10k_check_apply_special_rates is missing a valid rate in its own
|
||||
structures and is then recalculating a new default rate. This default rate
|
||||
is in most situations not the requested rate.
|
||||
|
||||
Fixes: 4df3c71cd4c5 ("ath10k-ct: Update to 2018-12-11 and use version based on 4.19")
|
||||
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
||||
|
||||
Forwarded: https://github.com/openwrt/openwrt/pull/1862
|
||||
|
||||
diff --git a/package/kernel/ath10k-ct/patches/979-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch b/package/kernel/ath10k-ct/patches/979-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..0e4f0565d6191a4e91eb2cfdffb25a850dd69a28
|
||||
--- /dev/null
|
||||
+++ b/package/kernel/ath10k-ct/patches/979-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch
|
||||
@@ -0,0 +1,43 @@
|
||||
+From: Pradeep kumar Chitrapu <pradeepc@codeaurora.org>
|
||||
+Date: Mon, 10 Dec 2018 20:56:11 -0800
|
||||
+Subject: ath10k: fix incorrect multicast/broadcast rate setting
|
||||
+
|
||||
+Invalid rate code is sent to firmware when multicast rate value of 0 is
|
||||
+sent to driver indicating disabled case, causing broken mesh path.
|
||||
+so fix that.
|
||||
+
|
||||
+Tested on QCA9984 with firmware 10.4-3.6.1-00827
|
||||
+
|
||||
+Fixes: cd93b83ad92 ("ath10k: support for multicast rate control")
|
||||
+Co-developed-by: Zhi Chen <zhichen@codeaurora.org>
|
||||
+Signed-off-by: Zhi Chen <zhichen@codeaurora.org>
|
||||
+Signed-off-by: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org>
|
||||
+
|
||||
+Origin: other, https://patchwork.kernel.org/patch/10723033/
|
||||
+
|
||||
+--- a/ath10k-4.13/mac.c
|
||||
++++ b/ath10k-4.13/mac.c
|
||||
+@@ -6264,8 +6264,8 @@ static void ath10k_bss_info_changed(stru
|
||||
+ struct cfg80211_chan_def def;
|
||||
+ u32 vdev_param, pdev_param, slottime, preamble;
|
||||
+ u16 bitrate, hw_value;
|
||||
+- u8 rate, basic_rate_idx;
|
||||
+- int rateidx, ret = 0, hw_rate_code;
|
||||
++ u8 rate, basic_rate_idx, rateidx;
|
||||
++ int ret = 0, hw_rate_code, mcast_rate;
|
||||
+ enum nl80211_band band;
|
||||
+ const struct ieee80211_supported_band *sband;
|
||||
+
|
||||
+@@ -6438,7 +6438,11 @@ static void ath10k_bss_info_changed(stru
|
||||
+ if (changed & BSS_CHANGED_MCAST_RATE &&
|
||||
+ !WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def))) {
|
||||
+ band = def.chan->band;
|
||||
+- rateidx = vif->bss_conf.mcast_rate[band] - 1;
|
||||
++ mcast_rate = vif->bss_conf.mcast_rate[band];
|
||||
++ if (mcast_rate > 0)
|
||||
++ rateidx = mcast_rate - 1;
|
||||
++ else
|
||||
++ rateidx = ffs(vif->bss_conf.basic_rates) - 1;
|
||||
+
|
||||
+ if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY)
|
||||
+ rateidx += ATH10K_MAC_FIRST_OFDM_RATE_IDX;
|
||||
diff --git a/package/kernel/ath10k-ct/patches/980-ath10k-commit-rates-from-mac80211.patch b/package/kernel/ath10k-ct/patches/980-ath10k-commit-rates-from-mac80211.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..6b12ba0995cdbd56f1e5dce8c5aba14e7af95c3c
|
||||
--- /dev/null
|
||||
+++ b/package/kernel/ath10k-ct/patches/980-ath10k-commit-rates-from-mac80211.patch
|
||||
@@ -0,0 +1,37 @@
|
||||
+From: Sven Eckelmann <sven@narfation.org>
|
||||
+Date: Mon, 10 Dec 2018 20:56:11 -0800
|
||||
+Subject: ath10k-ct: apply mac80211 rates to ath10k-ct rate state
|
||||
+
|
||||
+The rates from mac80211 have to be copied to the state of ath10k-ct or
|
||||
+otherwise the ath10k_check_apply_special_rates function overwrites
|
||||
+them again with some default values. This breaks for example the
|
||||
+mcast_rate set for a wifi-iface.
|
||||
+
|
||||
+Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
||||
+
|
||||
+--- a/ath10k-4.13/mac.c
|
||||
++++ b/ath10k-4.13/mac.c
|
||||
+@@ -6460,6 +6460,7 @@ static void ath10k_bss_info_changed(stru
|
||||
+ "mac vdev %d mcast_rate %x\n",
|
||||
+ arvif->vdev_id, rate);
|
||||
+
|
||||
++ arvif->mcast_rate[band] = rate;
|
||||
+ vdev_param = ar->wmi.vdev_param->mcast_data_rate;
|
||||
+ ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
|
||||
+ vdev_param, rate);
|
||||
+@@ -6468,6 +6469,7 @@ static void ath10k_bss_info_changed(stru
|
||||
+ "failed to set mcast rate on vdev %i: %d\n",
|
||||
+ arvif->vdev_id, ret);
|
||||
+
|
||||
++ arvif->bcast_rate[band] = rate;
|
||||
+ vdev_param = ar->wmi.vdev_param->bcast_data_rate;
|
||||
+ ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
|
||||
+ vdev_param, rate);
|
||||
+@@ -6494,6 +6496,7 @@ static void ath10k_bss_info_changed(stru
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
++ arvif->mgt_rate[def.chan->band] = hw_rate_code;
|
||||
+ vdev_param = ar->wmi.vdev_param->mgmt_rate;
|
||||
+ ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
|
||||
+ hw_rate_code);
|
@ -0,0 +1,60 @@
|
||||
From: Sven Eckelmann <sven@narfation.org>
|
||||
Date: Mon, 25 Feb 2019 20:42:28 +0100
|
||||
Subject: mac80211: ath10k: fix incorrect multicast/broadcast rate setting
|
||||
|
||||
If no mcast_rate is set for the wifi-iface then there is no rate_idx (0)
|
||||
set for the bss. This breaks for example 5GHz meshpoint interfaces because
|
||||
0 maps to a CCK rate (11Mbit/s).
|
||||
|
||||
Fixes: db90c243a0b9 ("mac80211: update to version based on 4.19-rc4")
|
||||
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
||||
|
||||
diff --git a/package/kernel/mac80211/patches/979-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch b/package/kernel/mac80211/patches/979-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..8695b7e094885bb479e14386a0461a25cf57603d
|
||||
--- /dev/null
|
||||
+++ b/package/kernel/mac80211/patches/979-ath10k-fix-incorrect-multicast-broadcast-rate-settin.patch
|
||||
@@ -0,0 +1,43 @@
|
||||
+From: Pradeep kumar Chitrapu <pradeepc@codeaurora.org>
|
||||
+Date: Mon, 10 Dec 2018 20:56:11 -0800
|
||||
+Subject: ath10k: fix incorrect multicast/broadcast rate setting
|
||||
+
|
||||
+Invalid rate code is sent to firmware when multicast rate value of 0 is
|
||||
+sent to driver indicating disabled case, causing broken mesh path.
|
||||
+so fix that.
|
||||
+
|
||||
+Tested on QCA9984 with firmware 10.4-3.6.1-00827
|
||||
+
|
||||
+Fixes: cd93b83ad92 ("ath10k: support for multicast rate control")
|
||||
+Co-developed-by: Zhi Chen <zhichen@codeaurora.org>
|
||||
+Signed-off-by: Zhi Chen <zhichen@codeaurora.org>
|
||||
+Signed-off-by: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org>
|
||||
+
|
||||
+Origin: other, https://patchwork.kernel.org/patch/10723033/
|
||||
+
|
||||
+--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||
++++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||
+@@ -5484,8 +5484,8 @@ static void ath10k_bss_info_changed(stru
|
||||
+ struct cfg80211_chan_def def;
|
||||
+ u32 vdev_param, pdev_param, slottime, preamble;
|
||||
+ u16 bitrate, hw_value;
|
||||
+- u8 rate, basic_rate_idx;
|
||||
+- int rateidx, ret = 0, hw_rate_code;
|
||||
++ u8 rate, basic_rate_idx, rateidx;
|
||||
++ int ret = 0, hw_rate_code, mcast_rate;
|
||||
+ enum nl80211_band band;
|
||||
+ const struct ieee80211_supported_band *sband;
|
||||
+
|
||||
+@@ -5658,7 +5658,11 @@ static void ath10k_bss_info_changed(stru
|
||||
+ if (changed & BSS_CHANGED_MCAST_RATE &&
|
||||
+ !WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def))) {
|
||||
+ band = def.chan->band;
|
||||
+- rateidx = vif->bss_conf.mcast_rate[band] - 1;
|
||||
++ mcast_rate = vif->bss_conf.mcast_rate[band];
|
||||
++ if (mcast_rate > 0)
|
||||
++ rateidx = mcast_rate - 1;
|
||||
++ else
|
||||
++ rateidx = ffs(vif->bss_conf.basic_rates) - 1;
|
||||
+
|
||||
+ if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY)
|
||||
+ rateidx += ATH10K_MAC_FIRST_OFDM_RATE_IDX;
|
Loading…
Reference in New Issue
Block a user