mac80211: sync some rt2x00 patches with wireless-next
[openwrt/openwrt.git] / package / kernel / mac80211 / patches / rt2x00 / 005-2-v6.8-wifi-rt2x00-disable-RTS-threshold-for-rt2800-by-defa.patch
diff --git a/package/kernel/mac80211/patches/rt2x00/005-2-v6.8-wifi-rt2x00-disable-RTS-threshold-for-rt2800-by-defa.patch b/package/kernel/mac80211/patches/rt2x00/005-2-v6.8-wifi-rt2x00-disable-RTS-threshold-for-rt2800-by-defa.patch
new file mode 100644 (file)
index 0000000..b3e95da
--- /dev/null
@@ -0,0 +1,43 @@
+From 570beb6285fd355904b22625da20809f477096c5 Mon Sep 17 00:00:00 2001
+From: Shiji Yang <yangshiji66@outlook.com>
+Date: Sat, 4 Nov 2023 16:57:59 +0800
+Subject: wifi: rt2x00: disable RTS threshold for rt2800 by default
+
+rt2800 has a lot of registers to control the RTS enable/disable
+status for different rates. And the driver control them via
+rt2800_set_rts_threshold(). When RTS was disabled in user
+interface, this function won't be called at all. This means that
+the RTS is still 'on' for CCK and OFDM rates. So we'd better to
+disable them by default because it should be like this. The RTS
+for HT20 and HT40 is already default off so we don't need to
+touch them. If we toggle the RTS status, these register bits
+will be enable/disable again by rt2800_set_rts_threshold().
+
+Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
+Acked-by: Stanislaw Gruszka <stf_xl@wp.pl>
+Signed-off-by: Kalle Valo <kvalo@kernel.org>
+Link: https://lore.kernel.org/r/TYAP286MB03155DDB953155B7A2DE849ABCA4A@TYAP286MB0315.JPNP286.PROD.OUTLOOK.COM
+---
+ drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
++++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+@@ -6100,7 +6100,7 @@ static int rt2800_init_registers(struct
+       rt2x00_set_field32(&reg, CCK_PROT_CFG_TX_OP_ALLOW_MM40, 0);
+       rt2x00_set_field32(&reg, CCK_PROT_CFG_TX_OP_ALLOW_GF20, 1);
+       rt2x00_set_field32(&reg, CCK_PROT_CFG_TX_OP_ALLOW_GF40, 0);
+-      rt2x00_set_field32(&reg, CCK_PROT_CFG_RTS_TH_EN, 1);
++      rt2x00_set_field32(&reg, CCK_PROT_CFG_RTS_TH_EN, 0);
+       rt2800_register_write(rt2x00dev, CCK_PROT_CFG, reg);
+       reg = rt2800_register_read(rt2x00dev, OFDM_PROT_CFG);
+@@ -6113,7 +6113,7 @@ static int rt2800_init_registers(struct
+       rt2x00_set_field32(&reg, OFDM_PROT_CFG_TX_OP_ALLOW_MM40, 0);
+       rt2x00_set_field32(&reg, OFDM_PROT_CFG_TX_OP_ALLOW_GF20, 1);
+       rt2x00_set_field32(&reg, OFDM_PROT_CFG_TX_OP_ALLOW_GF40, 0);
+-      rt2x00_set_field32(&reg, OFDM_PROT_CFG_RTS_TH_EN, 1);
++      rt2x00_set_field32(&reg, OFDM_PROT_CFG_RTS_TH_EN, 0);
+       rt2800_register_write(rt2x00dev, OFDM_PROT_CFG, reg);
+       reg = rt2800_register_read(rt2x00dev, MM20_PROT_CFG);