]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
wifi: rtl8xxxu: Fix off by one initial RTS rate
authorBitterblue Smith <rtl8821cerfe2@gmail.com>
Tue, 2 Jan 2024 19:33:07 +0000 (21:33 +0200)
committerKalle Valo <kvalo@kernel.org>
Wed, 10 Jan 2024 14:55:37 +0000 (16:55 +0200)
rtl8xxxu_set_basic_rates() sets the wrong initial RTS rate. It sets the
next higher rate than the one it should set, e.g. 36M instead of 24M.

The while loop was supposed to find the index of the most significant
bit which is 1, but it was copied incorrectly from the vendor driver.
Use __fls() instead.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Reviewed-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://msgid.link/761e6836-6cd6-4930-91b6-0446834655c5@gmail.com
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c

index 921d25e152cf6e63757ffce39db9c30c3b69f7a3..aac594093629009493951c82d00c041df1120a51 100644 (file)
@@ -4870,10 +4870,9 @@ static void rtl8xxxu_set_basic_rates(struct rtl8xxxu_priv *priv, u32 rate_cfg)
 
        dev_dbg(&priv->udev->dev, "%s: rates %08x\n", __func__, rate_cfg);
 
-       while (rate_cfg) {
-               rate_cfg = (rate_cfg >> 1);
-               rate_idx++;
-       }
+       if (rate_cfg)
+               rate_idx = __fls(rate_cfg);
+
        rtl8xxxu_write8(priv, REG_INIRTS_RATE_SEL, rate_idx);
 }