Renamed 046..051 pending patches with the merged tag/hash. Two patches were skipped, they make use of WQ_BH present since v6.14:13221be720
3e3aa566dd
Manually refreshed 062-v6.14-wifi-rtw88-Add-support-for-LED-blinking.patch Manually refreshed 063-v6.14-wifi-rtw88-add-RTW88_LEDS-depends-on-LEDS_CLASS-to-K.patch Manually backported 090-v6.15-wifi-rtw88-Enable-the-new-RTL8814AE-RTL8814AU-driver.patch git log --no-merges --pretty=oneline --abbrev-commit 4c2c372de...0daa521a drivers/net/wireless/realtek/rtw88: 4c2c372de2e1 wifi: rtw88: fix the 'para' buffer size to avoid reading out of bounds f24d0d8c3cd7 wifi: rtw88: Fix the random "error beacon valid" messages for USB 80fe0bc1659c wifi: rtw88: usb: Upload the firmware in bigger chunks 490340faddea wifi: rtw88: usb: Reduce control message timeout to 500 ms b7f0cc647e52 wifi: rtw88: rtw8822bu VID/PID for BUFFALO WI-U2-866DM 2c17afde9ff6 wifi: rtw88: Handle RTL8723D(S) with blank efuse 0ffa1ba81b35 wifi: rtw88: Fix RX aggregation settings for RTL8723DS 20d3c19bd8f9 wifi: rtw88: do not ignore hardware read error during DPK fc5f5a0ec463 wifi: rtw88: sdio: call rtw_sdio_indicate_tx_status unconditionally b2effcdc2379 wifi: rtw88: sdio: map mgmt frames to queue TX_DESC_QSEL_MGMT 581cf3a9cb61 wifi: rtw88: Fix the module names printed in dmesg b8d49bb8d16a wifi: rtw88: Don't set SUPPORTS_AMSDU_IN_AMPDU for RTL8814AU 0d2a88690e58 wifi: rtw88: Set AMPDU factor to hardware for RTL8814A dcbb7bb3a364 wifi: rtw88: usb: Enable RX aggregation for RTL8814AU bf1103654df9 wifi: rtw88: usb: Enable switching the RTL8814AU to USB 3 625fbc16524a wifi: rtw88: usb: Remove redundant 'flush_workqueue()' calls 5c4cf36c538b wifi: rtw88: sdio: Remove redundant 'flush_workqueue()' calls d58ad77d5cc2 wifi: rtw88: Add __nonstring annotations for unterminated strings deb3ddeb1865 wifi: rtw88: Enable the new RTL8814AE/RTL8814AU drivers bad060e8a425 wifi: rtw88: Add rtw8814au.c dad8e8793102 wifi: rtw88: Add rtw8814ae.c 1a7545784642 wifi: rtw88: Add rtw8814a.{c,h} e38246889cc9 wifi: rtw88: Add rtw8814a_table.c (part 2/2) f4debfcb1b3c wifi: rtw88: Add rtw8814a_table.c (part 1/2) 679ec431477c wifi: rtw88: Add some definitions for RTL8814AU c374281f8285 wifi: rtw88: Extend rtw_debugfs_get_tx_pwr_tbl() for RTL8814AU cfebabdd351e wifi: rtw88: Extend rtw_debugfs_get_phy_info() for RTL8814AU 8b42c46cf665 wifi: rtw88: Extend rtw_phy_config_swing_table() for RTL8814AU 053a7aace020 wifi: rtw88: Fix rtw_rx_phy_stat() for RTL8814AU 6be7544d19fc wifi: rtw88: Fix rtw_init_vht_cap() for RTL8814AU c7eea1ba05ca wifi: rtw88: Fix rtw_init_ht_cap() for RTL8814AU 86d04f8f991a wifi: rtw88: Fix rtw_desc_to_mcsrate() to handle MCS16-31 e66bca16638e wifi: rtw88: Fix rtw_mac_power_switch() for RTL8814AU 80c4668d024f wifi: rtw88: Add support for Mercusys MA30N and D-Link DWA-T185 rev. A1 9f00e2218e15 wifi: rtw88: Fix rtw_update_sta_info() for RTL8814AU 0f98a5959657 wifi: rtw88: Extend TX power stuff for 3-4 spatial streams ad815f392003 wifi: rtw88: Rename RTW_RATE_SECTION_MAX to RTW_RATE_SECTION_NUM e66f3b5c7535 wifi: rtw88: Constify some more structs and arrays 8f0076726b66 wifi: rtw88: Extend rtw_fw_send_ra_info() for RTL8814AU d80e7d9b6ba3 wifi: rtw88: Extend rf_base_addr and rf_sipi_addr for RTL8814AU 62f726848da4 wifi: rtw88: Extend struct rtw_pwr_track_tbl for RTL8814AU 9e8243025cc0 wifi: rtw88: Fix download_firmware_validate() for RTL8814AU 8425f5c8f04d wifi: rtw88: Fix __rtw_download_firmware() for RTL8814AU 105dc94233e4 wifi: rtw88: Fix a typo of debug message in rtw8723d_iqk_check_tx_failed() 0d1d165eff9d wifi: rtw88: Don't use static local variable in rtw8821c_set_tx_power_index_by_rate 00451eb3bec7 wifi: rtw88: Don't use static local variable in rtw8822b_set_tx_power_index_by_rate b4bfbc50b1b9 wifi: rtw88: add RTW88_LEDS depends on LEDS_CLASS to Kconfig 4b6652bc6d8d wifi: rtw88: Add support for LED blinking fb2fcfbe5eef wifi: rtw88: sdio: Fix disconnection after beacon loss a806a8160a0f wifi: rtw88: 8703b: Fix RX/TX issues 5ad483955acc wifi: rtw88: Delete rf_type member of struct rtw_sta_info 5b1b9545262b wifi: rtw88: Add USB PHY configuration not backported (3e3aa566dd18 wifi: rtw88: usb: Preallocate and reuse the RX skbs) not backported (13221be72034 wifi: rtw88: Handle C2H_ADAPTIVITY in rtw_fw_c2h_cmd_handle() ) e9048e2935f7 wifi: rtw88: usb: Copy instead of cloning the RX skb 74a72c367573 wifi: rtw88: 8821a/8812a: Set ptct_efuse_size to 0 59ab27a9f20f wifi: rtw88: 8812a: Support RFE type 2 Signed-off-by: Marty Jones <mj8263788@gmail.com> Link: https://github.com/openwrt/openwrt/pull/19052 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
192 lines
7.7 KiB
Diff
192 lines
7.7 KiB
Diff
From 0d2a88690e583168effb03c64fd217a323b2c444 Mon Sep 17 00:00:00 2001
|
|
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
|
Date: Wed, 2 Apr 2025 18:31:12 +0300
|
|
Subject: [PATCH] wifi: rtw88: Set AMPDU factor to hardware for RTL8814A
|
|
|
|
Tell the chip the maximum AMPDU size supported by the AP. This greatly
|
|
improves the TX speed of RTL8814AU in the 2.4 GHz band. Before: ~90
|
|
Mbps. After: ~300 Mbps.
|
|
|
|
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
|
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
|
Link: https://patch.msgid.link/4edc2a63-81b3-431c-9a37-5a7d899a6cc2@gmail.com
|
|
---
|
|
drivers/net/wireless/realtek/rtw88/mac80211.c | 2 ++
|
|
drivers/net/wireless/realtek/rtw88/main.c | 32 +++++++++++++++++++
|
|
drivers/net/wireless/realtek/rtw88/main.h | 3 ++
|
|
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 1 +
|
|
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 1 +
|
|
drivers/net/wireless/realtek/rtw88/rtw8812a.c | 1 +
|
|
drivers/net/wireless/realtek/rtw88/rtw8814a.c | 11 +++++++
|
|
drivers/net/wireless/realtek/rtw88/rtw8821a.c | 1 +
|
|
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 1 +
|
|
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 1 +
|
|
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 +
|
|
11 files changed, 55 insertions(+)
|
|
|
|
--- a/drivers/net/wireless/realtek/rtw88/mac80211.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/mac80211.c
|
|
@@ -396,6 +396,8 @@ static void rtw_ops_bss_info_changed(str
|
|
if (rtw_bf_support)
|
|
rtw_bf_assoc(rtwdev, vif, conf);
|
|
|
|
+ rtw_set_ampdu_factor(rtwdev, vif, conf);
|
|
+
|
|
rtw_fw_beacon_filter_config(rtwdev, true, vif);
|
|
} else {
|
|
rtw_leave_lps(rtwdev);
|
|
--- a/drivers/net/wireless/realtek/rtw88/main.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/main.c
|
|
@@ -2447,6 +2447,38 @@ void rtw_core_enable_beacon(struct rtw_d
|
|
}
|
|
}
|
|
|
|
+void rtw_set_ampdu_factor(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
|
|
+ struct ieee80211_bss_conf *bss_conf)
|
|
+{
|
|
+ const struct rtw_chip_ops *ops = rtwdev->chip->ops;
|
|
+ struct ieee80211_sta *sta;
|
|
+ u8 factor = 0xff;
|
|
+
|
|
+ if (!ops->set_ampdu_factor)
|
|
+ return;
|
|
+
|
|
+ rcu_read_lock();
|
|
+
|
|
+ sta = ieee80211_find_sta(vif, bss_conf->bssid);
|
|
+ if (!sta) {
|
|
+ rcu_read_unlock();
|
|
+ rtw_warn(rtwdev, "%s: failed to find station %pM\n",
|
|
+ __func__, bss_conf->bssid);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if (sta->deflink.vht_cap.vht_supported)
|
|
+ factor = u32_get_bits(sta->deflink.vht_cap.cap,
|
|
+ IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK);
|
|
+ else if (sta->deflink.ht_cap.ht_supported)
|
|
+ factor = sta->deflink.ht_cap.ampdu_factor;
|
|
+
|
|
+ rcu_read_unlock();
|
|
+
|
|
+ if (factor != 0xff)
|
|
+ ops->set_ampdu_factor(rtwdev, factor);
|
|
+}
|
|
+
|
|
MODULE_AUTHOR("Realtek Corporation");
|
|
MODULE_DESCRIPTION("Realtek 802.11ac wireless core module");
|
|
MODULE_LICENSE("Dual BSD/GPL");
|
|
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
|
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
|
@@ -878,6 +878,7 @@ struct rtw_chip_ops {
|
|
u32 antenna_rx);
|
|
void (*cfg_ldo25)(struct rtw_dev *rtwdev, bool enable);
|
|
void (*efuse_grant)(struct rtw_dev *rtwdev, bool enable);
|
|
+ void (*set_ampdu_factor)(struct rtw_dev *rtwdev, u8 factor);
|
|
void (*false_alarm_statistics)(struct rtw_dev *rtwdev);
|
|
void (*phy_calibration)(struct rtw_dev *rtwdev);
|
|
void (*dpk_track)(struct rtw_dev *rtwdev);
|
|
@@ -2272,4 +2273,6 @@ void rtw_update_channel(struct rtw_dev *
|
|
void rtw_core_port_switch(struct rtw_dev *rtwdev, struct ieee80211_vif *vif);
|
|
bool rtw_core_check_sta_active(struct rtw_dev *rtwdev);
|
|
void rtw_core_enable_beacon(struct rtw_dev *rtwdev, bool enable);
|
|
+void rtw_set_ampdu_factor(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
|
|
+ struct ieee80211_bss_conf *bss_conf);
|
|
#endif
|
|
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
|
@@ -1904,6 +1904,7 @@ static const struct rtw_chip_ops rtw8703
|
|
.set_antenna = NULL,
|
|
.cfg_ldo25 = rtw8723x_cfg_ldo25,
|
|
.efuse_grant = rtw8723x_efuse_grant,
|
|
+ .set_ampdu_factor = NULL,
|
|
.false_alarm_statistics = rtw8723x_false_alarm_statistics,
|
|
.phy_calibration = rtw8703b_phy_calibration,
|
|
.dpk_track = NULL,
|
|
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
|
@@ -1404,6 +1404,7 @@ static const struct rtw_chip_ops rtw8723
|
|
.set_antenna = NULL,
|
|
.cfg_ldo25 = rtw8723x_cfg_ldo25,
|
|
.efuse_grant = rtw8723x_efuse_grant,
|
|
+ .set_ampdu_factor = NULL,
|
|
.false_alarm_statistics = rtw8723x_false_alarm_statistics,
|
|
.phy_calibration = rtw8723d_phy_calibration,
|
|
.cck_pd_set = rtw8723d_phy_cck_pd_set,
|
|
--- a/drivers/net/wireless/realtek/rtw88/rtw8812a.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/rtw8812a.c
|
|
@@ -925,6 +925,7 @@ static const struct rtw_chip_ops rtw8812
|
|
.set_tx_power_index = rtw88xxa_set_tx_power_index,
|
|
.cfg_ldo25 = rtw8812a_cfg_ldo25,
|
|
.efuse_grant = rtw88xxa_efuse_grant,
|
|
+ .set_ampdu_factor = NULL,
|
|
.false_alarm_statistics = rtw88xxa_false_alarm_statistics,
|
|
.phy_calibration = rtw8812a_phy_calibration,
|
|
.cck_pd_set = rtw88xxa_phy_cck_pd_set,
|
|
--- a/drivers/net/wireless/realtek/rtw88/rtw8814a.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/rtw8814a.c
|
|
@@ -1332,6 +1332,16 @@ static void rtw8814a_cfg_ldo25(struct rt
|
|
{
|
|
}
|
|
|
|
+/* Without this RTL8814A sends too many frames and (some?) 11n AP
|
|
+ * can't handle it, resulting in low TX speed. Other chips seem fine.
|
|
+ */
|
|
+static void rtw8814a_set_ampdu_factor(struct rtw_dev *rtwdev, u8 factor)
|
|
+{
|
|
+ factor = min_t(u8, factor, IEEE80211_VHT_MAX_AMPDU_256K);
|
|
+
|
|
+ rtw_write32(rtwdev, REG_AMPDU_MAX_LENGTH, (8192 << factor) - 1);
|
|
+}
|
|
+
|
|
static void rtw8814a_false_alarm_statistics(struct rtw_dev *rtwdev)
|
|
{
|
|
struct rtw_dm_info *dm_info = &rtwdev->dm_info;
|
|
@@ -2051,6 +2061,7 @@ static const struct rtw_chip_ops rtw8814
|
|
.set_antenna = NULL,
|
|
.cfg_ldo25 = rtw8814a_cfg_ldo25,
|
|
.efuse_grant = rtw8814a_efuse_grant,
|
|
+ .set_ampdu_factor = rtw8814a_set_ampdu_factor,
|
|
.false_alarm_statistics = rtw8814a_false_alarm_statistics,
|
|
.phy_calibration = rtw8814a_phy_calibration,
|
|
.cck_pd_set = rtw8814a_phy_cck_pd_set,
|
|
--- a/drivers/net/wireless/realtek/rtw88/rtw8821a.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821a.c
|
|
@@ -871,6 +871,7 @@ static const struct rtw_chip_ops rtw8821
|
|
.set_tx_power_index = rtw88xxa_set_tx_power_index,
|
|
.cfg_ldo25 = rtw8821a_cfg_ldo25,
|
|
.efuse_grant = rtw88xxa_efuse_grant,
|
|
+ .set_ampdu_factor = NULL,
|
|
.false_alarm_statistics = rtw88xxa_false_alarm_statistics,
|
|
.phy_calibration = rtw8821a_phy_calibration,
|
|
.cck_pd_set = rtw88xxa_phy_cck_pd_set,
|
|
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
|
@@ -1668,6 +1668,7 @@ static const struct rtw_chip_ops rtw8821
|
|
.set_antenna = NULL,
|
|
.set_tx_power_index = rtw8821c_set_tx_power_index,
|
|
.cfg_ldo25 = rtw8821c_cfg_ldo25,
|
|
+ .set_ampdu_factor = NULL,
|
|
.false_alarm_statistics = rtw8821c_false_alarm_statistics,
|
|
.phy_calibration = rtw8821c_phy_calibration,
|
|
.cck_pd_set = rtw8821c_phy_cck_pd_set,
|
|
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
|
@@ -2158,6 +2158,7 @@ static const struct rtw_chip_ops rtw8822
|
|
.set_tx_power_index = rtw8822b_set_tx_power_index,
|
|
.set_antenna = rtw8822b_set_antenna,
|
|
.cfg_ldo25 = rtw8822b_cfg_ldo25,
|
|
+ .set_ampdu_factor = NULL,
|
|
.false_alarm_statistics = rtw8822b_false_alarm_statistics,
|
|
.phy_calibration = rtw8822b_phy_calibration,
|
|
.pwr_track = rtw8822b_pwr_track,
|
|
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
|
@@ -4968,6 +4968,7 @@ static const struct rtw_chip_ops rtw8822
|
|
.set_tx_power_index = rtw8822c_set_tx_power_index,
|
|
.set_antenna = rtw8822c_set_antenna,
|
|
.cfg_ldo25 = rtw8822c_cfg_ldo25,
|
|
+ .set_ampdu_factor = NULL,
|
|
.false_alarm_statistics = rtw8822c_false_alarm_statistics,
|
|
.dpk_track = rtw8822c_dpk_track,
|
|
.phy_calibration = rtw8822c_phy_calibration,
|