diff --git a/packages/linux/patches/rtlwifi/6.9/0001-wifi-rtlwifi-cleanup-few-rtlxxxx_set_hw_reg-routines.patch b/packages/linux/patches/rtlwifi/6.9/0001-wifi-rtlwifi-cleanup-few-rtlxxxx_set_hw_reg-routines.patch new file mode 100644 index 0000000000..b445f0299b --- /dev/null +++ b/packages/linux/patches/rtlwifi/6.9/0001-wifi-rtlwifi-cleanup-few-rtlxxxx_set_hw_reg-routines.patch @@ -0,0 +1,142 @@ +From 624934a7cfabca7dea2b2c1d10b029c1ff4c1f3f Mon Sep 17 00:00:00 2001 +From: Dmitry Antipov +Date: Mon, 25 Sep 2023 12:04:48 +0300 +Subject: [PATCH 1/7] wifi: rtlwifi: cleanup few rtlxxxx_set_hw_reg() routines + +Since 'u8' comparison against zero is always false, drop the +corresponding branches of AMPDU_MIN_SPACE adjustment within +'rtlxxxx_set_hw_reg()' for rtl8188ee, rtl8192ce, rtl8192de, +rtl8723ae, rtl8723be, and rtl8821ae. Compile tested only. + +Found by Linux Verification Center (linuxtesting.org) with SVACE. + +Signed-off-by: Dmitry Antipov +Acked-by: Ping-Ke Shih +Signed-off-by: Kalle Valo +Link: https://lore.kernel.org/r/20230925090452.25633-1-dmantipov@yandex.ru +--- + drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c | 5 ----- + drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c | 5 ----- + drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c | 4 ---- + drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c | 5 ----- + drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c | 6 ------ + drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c | 5 ----- + 6 files changed, 30 deletions(-) + +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c +index 58b1a46066b5..27f6c35ba0f9 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c +@@ -433,14 +433,9 @@ void rtl88ee_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val) + break; + case HW_VAR_AMPDU_MIN_SPACE:{ + u8 min_spacing_to_set; +- u8 sec_min_space; + + min_spacing_to_set = *val; + if (min_spacing_to_set <= 7) { +- sec_min_space = 0; +- +- if (min_spacing_to_set < sec_min_space) +- min_spacing_to_set = sec_min_space; + + mac->min_space_cfg = ((mac->min_space_cfg & + 0xf8) | +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c +index 049c4fe9eeed..0bc915723b93 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c +@@ -208,14 +208,9 @@ void rtl92ce_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val) + } + case HW_VAR_AMPDU_MIN_SPACE:{ + u8 min_spacing_to_set; +- u8 sec_min_space; + + min_spacing_to_set = *val; + if (min_spacing_to_set <= 7) { +- sec_min_space = 0; +- +- if (min_spacing_to_set < sec_min_space) +- min_spacing_to_set = sec_min_space; + + mac->min_space_cfg = ((mac->min_space_cfg & + 0xf8) | +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c +index 31a18bbface9..743ac6871bf4 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c +@@ -225,13 +225,9 @@ void rtl92de_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val) + } + case HW_VAR_AMPDU_MIN_SPACE: { + u8 min_spacing_to_set; +- u8 sec_min_space; + + min_spacing_to_set = *val; + if (min_spacing_to_set <= 7) { +- sec_min_space = 0; +- if (min_spacing_to_set < sec_min_space) +- min_spacing_to_set = sec_min_space; + mac->min_space_cfg = ((mac->min_space_cfg & 0xf8) | + min_spacing_to_set); + *val = min_spacing_to_set; +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c +index d26d4c4314a3..6991713a66d0 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c +@@ -212,14 +212,9 @@ void rtl8723e_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val) + } + case HW_VAR_AMPDU_MIN_SPACE:{ + u8 min_spacing_to_set; +- u8 sec_min_space; + + min_spacing_to_set = *((u8 *)val); + if (min_spacing_to_set <= 7) { +- sec_min_space = 0; +- +- if (min_spacing_to_set < sec_min_space) +- min_spacing_to_set = sec_min_space; + + mac->min_space_cfg = ((mac->min_space_cfg & + 0xf8) | +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c +index 15575644551f..0e77de1baaf8 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c +@@ -468,15 +468,9 @@ void rtl8723be_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val) + break; + case HW_VAR_AMPDU_MIN_SPACE:{ + u8 min_spacing_to_set; +- u8 sec_min_space; + + min_spacing_to_set = *((u8 *)val); + if (min_spacing_to_set <= 7) { +- sec_min_space = 0; +- +- if (min_spacing_to_set < sec_min_space) +- min_spacing_to_set = sec_min_space; +- + mac->min_space_cfg = ((mac->min_space_cfg & 0xf8) | + min_spacing_to_set); + +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c +index 3f8f6da33b12..1633328bc3d1 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c +@@ -546,14 +546,9 @@ void rtl8821ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val) + break; + case HW_VAR_AMPDU_MIN_SPACE:{ + u8 min_spacing_to_set; +- u8 sec_min_space; + + min_spacing_to_set = *((u8 *)val); + if (min_spacing_to_set <= 7) { +- sec_min_space = 0; +- +- if (min_spacing_to_set < sec_min_space) +- min_spacing_to_set = sec_min_space; + + mac->min_space_cfg = ((mac->min_space_cfg & + 0xf8) | +-- +2.43.0 + diff --git a/packages/linux/patches/rtlwifi/6.9/0002-wifi-rtlwifi-remove-unreachable-code-in-rtl92d_dm_ch.patch b/packages/linux/patches/rtlwifi/6.9/0002-wifi-rtlwifi-remove-unreachable-code-in-rtl92d_dm_ch.patch new file mode 100644 index 0000000000..c552f1ff58 --- /dev/null +++ b/packages/linux/patches/rtlwifi/6.9/0002-wifi-rtlwifi-remove-unreachable-code-in-rtl92d_dm_ch.patch @@ -0,0 +1,62 @@ +From 583494febbdd6a76b6c2a3fad704082f4f9f4d75 Mon Sep 17 00:00:00 2001 +From: Dmitry Antipov +Date: Tue, 3 Oct 2023 07:33:16 +0300 +Subject: [PATCH 2/7] wifi: rtlwifi: remove unreachable code in + rtl92d_dm_check_edca_turbo() + +Since '!(0x5ea42b & 0xffff0000)' is always false, remove unreachable +block in 'rtl92d_dm_check_edca_turbo()' and convert EDCA limits to +constant variables. Compile tested only. + +Found by Linux Verification Center (linuxtesting.org) with SVACE. + +Signed-off-by: Dmitry Antipov +Acked-by: Ping-Ke Shih +Signed-off-by: Kalle Valo +Link: https://lore.kernel.org/r/20231003043318.11370-1-dmantipov@yandex.ru +--- + .../wireless/realtek/rtlwifi/rtl8192de/dm.c | 18 ++---------------- + 1 file changed, 2 insertions(+), 16 deletions(-) + +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/dm.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/dm.c +index 6cc9c7649eda..cf4aca83bd05 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/dm.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/dm.c +@@ -592,32 +592,18 @@ static void rtl92d_dm_check_edca_turbo(struct ieee80211_hw *hw) + { + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); ++ const u32 edca_be_ul = 0x5ea42b; ++ const u32 edca_be_dl = 0x5ea42b; + static u64 last_txok_cnt; + static u64 last_rxok_cnt; + u64 cur_txok_cnt; + u64 cur_rxok_cnt; +- u32 edca_be_ul = 0x5ea42b; +- u32 edca_be_dl = 0x5ea42b; + + if (mac->link_state != MAC80211_LINKED) { + rtlpriv->dm.current_turbo_edca = false; + goto exit; + } + +- /* Enable BEQ TxOP limit configuration in wireless G-mode. */ +- /* To check whether we shall force turn on TXOP configuration. */ +- if ((!rtlpriv->dm.disable_framebursting) && +- (rtlpriv->sec.pairwise_enc_algorithm == WEP40_ENCRYPTION || +- rtlpriv->sec.pairwise_enc_algorithm == WEP104_ENCRYPTION || +- rtlpriv->sec.pairwise_enc_algorithm == TKIP_ENCRYPTION)) { +- /* Force TxOP limit to 0x005e for UL. */ +- if (!(edca_be_ul & 0xffff0000)) +- edca_be_ul |= 0x005e0000; +- /* Force TxOP limit to 0x005e for DL. */ +- if (!(edca_be_dl & 0xffff0000)) +- edca_be_dl |= 0x005e0000; +- } +- + if ((!rtlpriv->dm.is_any_nonbepkts) && + (!rtlpriv->dm.disable_framebursting)) { + cur_txok_cnt = rtlpriv->stats.txbytesunicast - last_txok_cnt; +-- +2.43.0 + diff --git a/packages/linux/patches/rtlwifi/6.9/0003-wifi-rtlwifi-simplify-TX-command-fill-callbacks.patch b/packages/linux/patches/rtlwifi/6.9/0003-wifi-rtlwifi-simplify-TX-command-fill-callbacks.patch new file mode 100644 index 0000000000..754669891b --- /dev/null +++ b/packages/linux/patches/rtlwifi/6.9/0003-wifi-rtlwifi-simplify-TX-command-fill-callbacks.patch @@ -0,0 +1,413 @@ +From bc77b0b9adf81b9d4b7a33de3246f75fe756fd32 Mon Sep 17 00:00:00 2001 +From: Dmitry Antipov +Date: Wed, 11 Oct 2023 18:44:37 +0300 +Subject: [PATCH 3/7] wifi: rtlwifi: simplify TX command fill callbacks + +Since 'rtlpriv->cfg->ops->fill_tx_cmddesc()' is always called +with 'firstseg' and 'lastseg' set to 1 (and the latter is +never actually used), all of the relevant chip-specific +routines may be simplified. Compile tested only. + +Signed-off-by: Dmitry Antipov +Acked-by: Ping-Ke Shih +Signed-off-by: Kalle Valo +Link: https://lore.kernel.org/r/20231011154442.52457-2-dmantipov@yandex.ru +--- + drivers/net/wireless/realtek/rtlwifi/core.c | 2 +- + drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.c | 8 +++----- + drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h | 1 - + drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c | 9 +++------ + drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.h | 1 - + drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c | 2 +- + drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c | 8 +++----- + drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h | 5 ++--- + drivers/net/wireless/realtek/rtlwifi/rtl8192de/fw.c | 2 +- + drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c | 8 +++----- + drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h | 1 - + drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.c | 8 +++----- + drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.h | 1 - + drivers/net/wireless/realtek/rtlwifi/rtl8192se/fw.c | 2 +- + drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.c | 2 +- + drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.h | 4 ++-- + drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c | 8 +++----- + drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h | 1 - + drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c | 1 - + drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h | 1 - + drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.c | 5 ++--- + drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.h | 1 - + drivers/net/wireless/realtek/rtlwifi/wifi.h | 1 - + 23 files changed, 29 insertions(+), 53 deletions(-) + +diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c +index 3835b639d453..cc9b2a459386 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/core.c ++++ b/drivers/net/wireless/realtek/rtlwifi/core.c +@@ -1897,7 +1897,7 @@ bool rtl_cmd_send_packet(struct ieee80211_hw *hw, struct sk_buff *skb) + /*this is wrong, fill_tx_cmddesc needs update*/ + pdesc = &ring->desc[0]; + +- rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *)pdesc, 1, 1, skb); ++ rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *)pdesc, skb); + + __skb_queue_tail(&ring->queue, skb); + +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.c +index 65ebe52883d3..d094163a9a71 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.c +@@ -665,9 +665,8 @@ void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw, + rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "\n"); + } + +-void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw, +- u8 *pdesc8, bool firstseg, +- bool lastseg, struct sk_buff *skb) ++void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8, ++ struct sk_buff *skb) + { + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); +@@ -687,8 +686,7 @@ void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw, + } + clear_pci_tx_desc_content(pdesc, TX_DESC_SIZE); + +- if (firstseg) +- set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN); ++ set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN); + + set_tx_desc_tx_rate(pdesc, DESC92C_RATE1M); + +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h +index e17f70b4d199..aae654b0e3ba 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h +@@ -797,6 +797,5 @@ bool rtl88ee_is_tx_desc_closed(struct ieee80211_hw *hw, + u8 hw_queue, u16 index); + void rtl88ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); + void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, +- bool firstseg, bool lastseg, + struct sk_buff *skb); + #endif +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c +index 5376bb34251f..50e139186a93 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c +@@ -518,9 +518,8 @@ void rtl92ce_tx_fill_desc(struct ieee80211_hw *hw, + rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "\n"); + } + +-void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw, +- u8 *pdesc8, bool firstseg, +- bool lastseg, struct sk_buff *skb) ++void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8, ++ struct sk_buff *skb) + { + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); +@@ -540,9 +539,7 @@ void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw, + } + clear_pci_tx_desc_content(pdesc, TX_DESC_SIZE); + +- if (firstseg) +- set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN); +- ++ set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN); + set_tx_desc_tx_rate(pdesc, DESC_RATE1M); + + set_tx_desc_seq(pdesc, 0); +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.h +index b45b05a6a523..f3ffe3d9883c 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.h ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.h +@@ -527,6 +527,5 @@ bool rtl92ce_is_tx_desc_closed(struct ieee80211_hw *hw, + u8 hw_queue, u16 index); + void rtl92ce_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); + void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, +- bool b_firstseg, bool b_lastseg, + struct sk_buff *skb); + #endif +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c +index a040c07791d1..5ec0eb8773a5 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c +@@ -1539,7 +1539,7 @@ static bool usb_cmd_send_packet(struct ieee80211_hw *hw, struct sk_buff *skb) + * if its "here". + * + * This is maybe necessary: +- * rtlpriv->cfg->ops->fill_tx_cmddesc(hw, buffer, 1, 1, skb); ++ * rtlpriv->cfg->ops->fill_tx_cmddesc(hw, buffer, skb); + */ + dev_kfree_skb(skb); + +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c +index b70767e72f3d..9969e9d1fc4b 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c +@@ -626,9 +626,8 @@ void rtl92cu_fill_fake_txdesc(struct ieee80211_hw *hw, u8 *pdesc8, + _rtl_tx_desc_checksum(pdesc); + } + +-void rtl92cu_tx_fill_cmddesc(struct ieee80211_hw *hw, +- u8 *pdesc8, bool firstseg, +- bool lastseg, struct sk_buff *skb) ++void rtl92cu_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8, ++ struct sk_buff *skb) + { + struct rtl_priv *rtlpriv = rtl_priv(hw); + u8 fw_queue = QSLT_BEACON; +@@ -637,8 +636,7 @@ void rtl92cu_tx_fill_cmddesc(struct ieee80211_hw *hw, + __le32 *pdesc = (__le32 *)pdesc8; + + memset((void *)pdesc, 0, RTL_TX_HEADER_SIZE); +- if (firstseg) +- set_tx_desc_offset(pdesc, RTL_TX_HEADER_SIZE); ++ set_tx_desc_offset(pdesc, RTL_TX_HEADER_SIZE); + set_tx_desc_tx_rate(pdesc, DESC_RATE1M); + set_tx_desc_seq(pdesc, 0); + set_tx_desc_linip(pdesc, 0); +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h +index 171fe39dfb0c..cc4ef2bfd2e7 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h +@@ -396,8 +396,7 @@ void rtl92cu_tx_fill_desc(struct ieee80211_hw *hw, + struct rtl_tcb_desc *tcb_desc); + void rtl92cu_fill_fake_txdesc(struct ieee80211_hw *hw, u8 *pdesc, + u32 buffer_len, bool ispspoll); +-void rtl92cu_tx_fill_cmddesc(struct ieee80211_hw *hw, +- u8 *pdesc, bool b_firstseg, +- bool b_lastseg, struct sk_buff *skb); ++void rtl92cu_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, ++ struct sk_buff *skb); + + #endif +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/fw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/fw.c +index 9ddb8478784b..e1fb29962801 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/fw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/fw.c +@@ -469,7 +469,7 @@ static bool _rtl92d_cmd_send_packet(struct ieee80211_hw *hw, + pdesc = &ring->desc[idx]; + /* discard output from call below */ + rtlpriv->cfg->ops->get_desc(hw, (u8 *)pdesc, true, HW_DESC_OWN); +- rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *) pdesc, 1, 1, skb); ++ rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *)pdesc, skb); + __skb_queue_tail(&ring->queue, skb); + spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags); + rtlpriv->cfg->ops->tx_polling(hw, BEACON_QUEUE); +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c +index c09c0c312665..02ac69c08ed3 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c +@@ -655,9 +655,8 @@ void rtl92de_tx_fill_desc(struct ieee80211_hw *hw, + rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "\n"); + } + +-void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw, +- u8 *pdesc8, bool firstseg, +- bool lastseg, struct sk_buff *skb) ++void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8, ++ struct sk_buff *skb) + { + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); +@@ -678,8 +677,7 @@ void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw, + return; + } + clear_pci_tx_desc_content(pdesc, TX_DESC_SIZE); +- if (firstseg) +- set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN); ++ set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN); + /* 5G have no CCK rate + * Caution: The macros below are multi-line expansions. + * The braces are needed no matter what checkpatch says +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h +index d01578875cd5..2992668c156c 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h +@@ -564,7 +564,6 @@ bool rtl92de_is_tx_desc_closed(struct ieee80211_hw *hw, + u8 hw_queue, u16 index); + void rtl92de_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); + void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, +- bool b_firstseg, bool b_lastseg, + struct sk_buff *skb); + + #endif +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.c +index a182cdeb58e2..67388e0b3fa0 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.c +@@ -827,9 +827,8 @@ void rtl92ee_tx_fill_desc(struct ieee80211_hw *hw, + rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "\n"); + } + +-void rtl92ee_tx_fill_cmddesc(struct ieee80211_hw *hw, +- u8 *pdesc8, bool firstseg, +- bool lastseg, struct sk_buff *skb) ++void rtl92ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8, ++ struct sk_buff *skb) + { + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); +@@ -846,8 +845,7 @@ void rtl92ee_tx_fill_cmddesc(struct ieee80211_hw *hw, + } + clear_pci_tx_desc_content(pdesc, txdesc_len); + +- if (firstseg) +- set_tx_desc_offset(pdesc, txdesc_len); ++ set_tx_desc_offset(pdesc, txdesc_len); + + set_tx_desc_tx_rate(pdesc, DESC_RATE1M); + +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.h +index 967cef3a9cbf..3852a50a688b 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.h ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.h +@@ -743,6 +743,5 @@ u64 rtl92ee_get_desc(struct ieee80211_hw *hw, + bool rtl92ee_is_tx_desc_closed(struct ieee80211_hw *hw, u8 hw_queue, u16 index); + void rtl92ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); + void rtl92ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, +- bool firstseg, bool lastseg, + struct sk_buff *skb); + #endif +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/fw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/fw.c +index f570495af044..579b1789d6d1 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/fw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/fw.c +@@ -122,7 +122,7 @@ static bool _rtl92s_cmd_send_packet(struct ieee80211_hw *hw, + + idx = (ring->idx + skb_queue_len(&ring->queue)) % ring->entries; + pdesc = &ring->desc[idx]; +- rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *)pdesc, 1, 1, skb); ++ rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *)pdesc, skb); + __skb_queue_tail(&ring->queue, skb); + + spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags); +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.c +index a5853a170b58..f104cdb649f8 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.c +@@ -492,7 +492,7 @@ void rtl92se_tx_fill_desc(struct ieee80211_hw *hw, + } + + void rtl92se_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8, +- bool firstseg, bool lastseg, struct sk_buff *skb) ++ struct sk_buff *skb) + { + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.h +index 90aa12fc6a7f..40291a6a15d0 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.h ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.h +@@ -10,8 +10,8 @@ void rtl92se_tx_fill_desc(struct ieee80211_hw *hw, + struct ieee80211_sta *sta, + struct sk_buff *skb, u8 hw_queue, + struct rtl_tcb_desc *ptcb_desc); +-void rtl92se_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, bool firstseg, +- bool lastseg, struct sk_buff *skb); ++void rtl92se_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, ++ struct sk_buff *skb); + bool rtl92se_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats, + struct ieee80211_rx_status *rx_status, u8 *pdesc, + struct sk_buff *skb); +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c +index 7f294e698994..d9823ddab7be 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c +@@ -519,9 +519,8 @@ void rtl8723e_tx_fill_desc(struct ieee80211_hw *hw, + rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "\n"); + } + +-void rtl8723e_tx_fill_cmddesc(struct ieee80211_hw *hw, +- u8 *pdesc8, bool firstseg, +- bool lastseg, struct sk_buff *skb) ++void rtl8723e_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8, ++ struct sk_buff *skb) + { + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); +@@ -541,8 +540,7 @@ void rtl8723e_tx_fill_cmddesc(struct ieee80211_hw *hw, + } + clear_pci_tx_desc_content(pdesc, TX_DESC_SIZE); + +- if (firstseg) +- set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN); ++ set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN); + + set_tx_desc_tx_rate(pdesc, DESC92C_RATE1M); + +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h +index 2d25f62a4d52..f352fddfff32 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h +@@ -530,6 +530,5 @@ bool rtl8723e_is_tx_desc_closed(struct ieee80211_hw *hw, + u8 hw_queue, u16 index); + void rtl8723e_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); + void rtl8723e_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, +- bool firstseg, bool lastseg, + struct sk_buff *skb); + #endif +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c +index 24ef7cc52e99..8b6352f7f93b 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c +@@ -585,7 +585,6 @@ void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw, + } + + void rtl8723be_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8, +- bool firstseg, bool lastseg, + struct sk_buff *skb) + { + struct rtl_priv *rtlpriv = rtl_priv(hw); +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h +index 174aca20c7e1..da027f915cf4 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h +@@ -642,6 +642,5 @@ bool rtl8723be_is_tx_desc_closed(struct ieee80211_hw *hw, + u8 hw_queue, u16 index); + void rtl8723be_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); + void rtl8723be_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, +- bool firstseg, bool lastseg, + struct sk_buff *skb); + #endif +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.c +index d7cb3319d885..bd71592fe26a 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.c +@@ -828,9 +828,8 @@ void rtl8821ae_tx_fill_desc(struct ieee80211_hw *hw, + rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "\n"); + } + +-void rtl8821ae_tx_fill_cmddesc(struct ieee80211_hw *hw, +- u8 *pdesc8, bool firstseg, +- bool lastseg, struct sk_buff *skb) ++void rtl8821ae_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8, ++ struct sk_buff *skb) + { + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.h +index a9ed6fd41089..1155365348f3 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.h ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.h +@@ -648,6 +648,5 @@ bool rtl8821ae_is_tx_desc_closed(struct ieee80211_hw *hw, + u8 hw_queue, u16 index); + void rtl8821ae_tx_polling(struct ieee80211_hw *hw, u8 hw_queue); + void rtl8821ae_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, +- bool firstseg, bool lastseg, + struct sk_buff *skb); + #endif +diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h +index 2e7e04f91279..600b33905cab 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h ++++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h +@@ -2249,7 +2249,6 @@ struct rtl_hal_ops { + void (*fill_fake_txdesc)(struct ieee80211_hw *hw, u8 *pdesc, + u32 buffer_len, bool bsspspoll); + void (*fill_tx_cmddesc)(struct ieee80211_hw *hw, u8 *pdesc, +- bool firstseg, bool lastseg, + struct sk_buff *skb); + void (*fill_tx_special_desc)(struct ieee80211_hw *hw, + u8 *pdesc, u8 *pbd_desc, +-- +2.43.0 + diff --git a/packages/linux/patches/rtlwifi/6.9/0004-wifi-rtlwifi-drop-unused-const_amdpci_aspm.patch b/packages/linux/patches/rtlwifi/6.9/0004-wifi-rtlwifi-drop-unused-const_amdpci_aspm.patch new file mode 100644 index 0000000000..5955a05317 --- /dev/null +++ b/packages/linux/patches/rtlwifi/6.9/0004-wifi-rtlwifi-drop-unused-const_amdpci_aspm.patch @@ -0,0 +1,182 @@ +From 1705e79a096e605b9f9da5442024f05c5e240694 Mon Sep 17 00:00:00 2001 +From: Bjorn Helgaas +Date: Thu, 16 Nov 2023 12:05:29 -0600 +Subject: [PATCH 4/7] wifi: rtlwifi: drop unused const_amdpci_aspm +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Remove the unused "const_amdpci_aspm" member of struct rtl_pci and +struct rtl_ps_ctl. + +Signed-off-by: Bjorn Helgaas +Acked-by: Ping-Ke Shih +Reviewed-by: Ilpo Järvinen +Signed-off-by: Kalle Valo +Link: https://lore.kernel.org/r/20231116180529.52752-1-helgaas@kernel.org +--- + drivers/net/wireless/realtek/rtlwifi/pci.c | 1 - + drivers/net/wireless/realtek/rtlwifi/pci.h | 1 - + drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c | 3 --- + drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c | 3 --- + drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c | 3 --- + drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c | 3 --- + drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c | 3 --- + drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c | 3 --- + drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c | 3 --- + drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c | 3 --- + drivers/net/wireless/realtek/rtlwifi/wifi.h | 2 -- + 11 files changed, 28 deletions(-) + +diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c b/drivers/net/wireless/realtek/rtlwifi/pci.c +index 9886e719739b..b163a069660b 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/pci.c ++++ b/drivers/net/wireless/realtek/rtlwifi/pci.c +@@ -70,7 +70,6 @@ static void _rtl_pci_update_default_setting(struct ieee80211_hw *hw) + ppsc->support_aspm = false; + + /*Update PCI ASPM setting */ +- ppsc->const_amdpci_aspm = rtlpci->const_amdpci_aspm; + switch (rtlpci->const_pci_aspm) { + case 0: + /*No ASPM */ +diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.h b/drivers/net/wireless/realtek/rtlwifi/pci.h +index 866861626a0a..4725d43609fd 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/pci.h ++++ b/drivers/net/wireless/realtek/rtlwifi/pci.h +@@ -195,7 +195,6 @@ struct rtl_pci { + u32 reg_bcn_ctrl_val; + + /*ASPM*/ u8 const_pci_aspm; +- u8 const_amdpci_aspm; + u8 const_hwsw_rfoff_d3; + u8 const_support_pciaspm; + /*pci-e bridge */ +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c +index b77937fe2448..37bb59fa8bfa 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c +@@ -21,9 +21,6 @@ static void rtl88e_init_aspm_vars(struct ieee80211_hw *hw) + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); + +- /*close ASPM for AMD defaultly */ +- rtlpci->const_amdpci_aspm = 0; +- + /* ASPM PS mode. + * 0 - Disable ASPM, + * 1 - Enable ASPM without Clock Req, +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c +index e452275d8789..e20f2bec45c4 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c +@@ -24,9 +24,6 @@ static void rtl92c_init_aspm_vars(struct ieee80211_hw *hw) + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); + +- /*close ASPM for AMD defaultly */ +- rtlpci->const_amdpci_aspm = 0; +- + /* + * ASPM PS mode. + * 0 - Disable ASPM, +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c +index 11f319c97124..afd685ed460a 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c +@@ -21,9 +21,6 @@ static void rtl92d_init_aspm_vars(struct ieee80211_hw *hw) + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); + +- /*close ASPM for AMD defaultly */ +- rtlpci->const_amdpci_aspm = 0; +- + /* + * ASPM PS mode. + * 0 - Disable ASPM, +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c +index 616a47d8d97a..a5ea2b44a97c 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c +@@ -24,9 +24,6 @@ static void rtl92ee_init_aspm_vars(struct ieee80211_hw *hw) + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); + +- /*close ASPM for AMD defaultly */ +- rtlpci->const_amdpci_aspm = 0; +- + /** + * ASPM PS mode. + * 0 - Disable ASPM, +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c +index 30bce381c3bb..675bdd32feb1 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c +@@ -21,9 +21,6 @@ static void rtl92s_init_aspm_vars(struct ieee80211_hw *hw) + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); + +- /*close ASPM for AMD defaultly */ +- rtlpci->const_amdpci_aspm = 0; +- + /* ASPM PS mode. + * 0 - Disable ASPM, + * 1 - Enable ASPM without Clock Req, +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c +index c821436a1991..dd7505e2f22c 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c +@@ -26,9 +26,6 @@ static void rtl8723e_init_aspm_vars(struct ieee80211_hw *hw) + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); + +- /*close ASPM for AMD defaultly */ +- rtlpci->const_amdpci_aspm = 0; +- + /** + * ASPM PS mode. + * 0 - Disable ASPM, +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c +index 43b611d5288d..162c34f0e9b7 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c +@@ -26,9 +26,6 @@ static void rtl8723be_init_aspm_vars(struct ieee80211_hw *hw) + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); + +- /*close ASPM for AMD defaultly */ +- rtlpci->const_amdpci_aspm = 0; +- + /* ASPM PS mode. + * 0 - Disable ASPM, + * 1 - Enable ASPM without Clock Req, +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c +index 0bca542e103f..7b911695db33 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c +@@ -23,9 +23,6 @@ static void rtl8821ae_init_aspm_vars(struct ieee80211_hw *hw) + struct rtl_priv *rtlpriv = rtl_priv(hw); + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); + +- /*close ASPM for AMD defaultly */ +- rtlpci->const_amdpci_aspm = 0; +- + /** + * ASPM PS mode. + * 0 - Disable ASPM, +diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h +index 600b33905cab..b105c713e35f 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h ++++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h +@@ -2023,8 +2023,6 @@ struct rtl_ps_ctl { + u32 cur_ps_level; + u32 reg_rfps_level; + +- /*just for PCIE ASPM */ +- u8 const_amdpci_aspm; + bool pwrdown_mode; + + enum rf_pwrstate inactive_pwrstate; +-- +2.43.0 + diff --git a/packages/linux/patches/rtlwifi/6.9/0005-wifi-rtlwifi-rtl8192de-Don-t-read-register-in-_rtl92.patch b/packages/linux/patches/rtlwifi/6.9/0005-wifi-rtlwifi-rtl8192de-Don-t-read-register-in-_rtl92.patch new file mode 100644 index 0000000000..4ddd97b32d --- /dev/null +++ b/packages/linux/patches/rtlwifi/6.9/0005-wifi-rtlwifi-rtl8192de-Don-t-read-register-in-_rtl92.patch @@ -0,0 +1,50 @@ +From 366e361d988e0d62cc2b27e1e6255651b0353f3c Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Sat, 13 Jan 2024 01:42:29 +0200 +Subject: [PATCH 5/7] wifi: rtlwifi: rtl8192de: Don't read register in + _rtl92de_query_rxphystatus + +Instead of reading bit 9 of RFPGA0_XA_HSSIPARAMETER2 every time a frame +is received, just use rtlphy->cck_high_power, which is initialised in +_rtl92d_phy_bb_config(). That bit never changes anyway. + +With this change _rtl92de_query_rxphystatus() can be shared with the +upcoming USB driver. The USB driver can't read registers in this +function because register reading can sleep. + +Compile tested only. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Kalle Valo +Link: https://msgid.link/19a3e023-0eaa-4096-9f78-a2c8e909cb54@gmail.com +--- + drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c +index 02ac69c08ed3..192982ec8152 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c +@@ -42,6 +42,7 @@ static void _rtl92de_query_rxphystatus(struct ieee80211_hw *hw, + bool packet_beacon) + { + struct rtl_priv *rtlpriv = rtl_priv(hw); ++ struct rtl_phy *rtlphy = &(rtlpriv->phy); + struct rtl_ps_ctl *ppsc = rtl_psc(rtlpriv); + struct phy_sts_cck_8192d *cck_buf; + s8 rx_pwr_all, rx_pwr[4]; +@@ -62,9 +63,7 @@ static void _rtl92de_query_rxphystatus(struct ieee80211_hw *hw, + u8 report, cck_highpwr; + cck_buf = (struct phy_sts_cck_8192d *)p_drvinfo; + if (ppsc->rfpwr_state == ERFON) +- cck_highpwr = (u8) rtl_get_bbreg(hw, +- RFPGA0_XA_HSSIPARAMETER2, +- BIT(9)); ++ cck_highpwr = rtlphy->cck_high_power; + else + cck_highpwr = false; + if (!cck_highpwr) { +-- +2.43.0 + diff --git a/packages/linux/patches/rtlwifi/6.9/0006-wifi-rtlwifi-Remove-rtl_intf_ops.read_efuse_byte.patch b/packages/linux/patches/rtlwifi/6.9/0006-wifi-rtlwifi-Remove-rtl_intf_ops.read_efuse_byte.patch new file mode 100644 index 0000000000..dd865f08ef --- /dev/null +++ b/packages/linux/patches/rtlwifi/6.9/0006-wifi-rtlwifi-Remove-rtl_intf_ops.read_efuse_byte.patch @@ -0,0 +1,66 @@ +From 5c051c716329a26d66f893e9415f22f65381a77a Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 27 Feb 2024 14:15:52 +0200 +Subject: [PATCH 6/7] wifi: rtlwifi: Remove rtl_intf_ops.read_efuse_byte + +PCI drivers and USB drivers can both use the same function, +read_efuse_byte(), and they can call it directly. + +rtl8192de was the only user. + +Tested only with the upcoming rtl8192du driver. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Kalle Valo +Link: https://msgid.link/4e2c968d-f25c-4a40-be97-4fdcbdde69cf@gmail.com +--- + drivers/net/wireless/realtek/rtlwifi/pci.c | 1 - + drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c | 6 ++---- + drivers/net/wireless/realtek/rtlwifi/wifi.h | 1 - + 3 files changed, 2 insertions(+), 6 deletions(-) + +diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c b/drivers/net/wireless/realtek/rtlwifi/pci.c +index b163a069660b..6f57bf8f404e 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/pci.c ++++ b/drivers/net/wireless/realtek/rtlwifi/pci.c +@@ -2422,7 +2422,6 @@ EXPORT_SYMBOL(rtl_pci_resume); + #endif /* CONFIG_PM_SLEEP */ + + const struct rtl_intf_ops rtl_pci_ops = { +- .read_efuse_byte = read_efuse_byte, + .adapter_start = rtl_pci_start, + .adapter_stop = rtl_pci_stop, + .check_buddy_priv = rtl_pci_check_buddy_priv, +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c +index 743ac6871bf4..4ba42f6be3f2 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c +@@ -1669,10 +1669,8 @@ static void _rtl92de_efuse_update_chip_version(struct ieee80211_hw *hw) + u8 cutvalue[2]; + u16 chipvalue; + +- rtlpriv->intf_ops->read_efuse_byte(hw, EEPROME_CHIP_VERSION_H, +- &cutvalue[1]); +- rtlpriv->intf_ops->read_efuse_byte(hw, EEPROME_CHIP_VERSION_L, +- &cutvalue[0]); ++ read_efuse_byte(hw, EEPROME_CHIP_VERSION_H, &cutvalue[1]); ++ read_efuse_byte(hw, EEPROME_CHIP_VERSION_L, &cutvalue[0]); + chipvalue = (cutvalue[1] << 8) | cutvalue[0]; + switch (chipvalue) { + case 0xAA55: +diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h +index b105c713e35f..3cd95dd4e711 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h ++++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h +@@ -2315,7 +2315,6 @@ struct rtl_hal_ops { + + struct rtl_intf_ops { + /*com */ +- void (*read_efuse_byte)(struct ieee80211_hw *hw, u16 _offset, u8 *pbuf); + int (*adapter_start)(struct ieee80211_hw *hw); + void (*adapter_stop)(struct ieee80211_hw *hw); + bool (*check_buddy_priv)(struct ieee80211_hw *hw, +-- +2.43.0 + diff --git a/packages/linux/patches/rtlwifi/6.9/0007-wifi-rtlwifi-rtl_usb-Store-the-endpoint-addresses.patch b/packages/linux/patches/rtlwifi/6.9/0007-wifi-rtlwifi-rtl_usb-Store-the-endpoint-addresses.patch new file mode 100644 index 0000000000..78506f47c5 --- /dev/null +++ b/packages/linux/patches/rtlwifi/6.9/0007-wifi-rtlwifi-rtl_usb-Store-the-endpoint-addresses.patch @@ -0,0 +1,259 @@ +From 548fc9fe36544db208afb45c4ce6e85c7a548fad Mon Sep 17 00:00:00 2001 +From: Bitterblue Smith +Date: Tue, 13 Feb 2024 16:33:11 +0200 +Subject: [PATCH 7/7] wifi: rtlwifi: rtl_usb: Store the endpoint addresses + +And use the stored addresses in rtl8192cu instead of hardcoding them. + +This is what the vendor drivers do. + +Perhaps this is not strictly necessary for RTL8192CU devices. However, +the dual mac version of RTL8192DU has two USB interfaces, each with its +own set of endpoints. Hardcoding their addresses in the upcoming +rtl8192du driver would require making some assumptions which I'm not +qualified to make. + +Signed-off-by: Bitterblue Smith +Acked-by: Ping-Ke Shih +Signed-off-by: Kalle Valo +Link: https://msgid.link/7b6a602a-6101-4bab-958d-bcff4d565b40@gmail.com +--- + .../wireless/realtek/rtlwifi/rtl8192cu/sw.c | 1 - + .../wireless/realtek/rtlwifi/rtl8192cu/trx.c | 77 ++++++++++--------- + .../wireless/realtek/rtlwifi/rtl8192cu/trx.h | 1 - + drivers/net/wireless/realtek/rtlwifi/usb.c | 31 ++++++-- + drivers/net/wireless/realtek/rtlwifi/usb.h | 2 + + drivers/net/wireless/realtek/rtlwifi/wifi.h | 1 - + 6 files changed, 68 insertions(+), 45 deletions(-) + +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c +index e6403d4c937c..bf63c060c985 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c +@@ -146,7 +146,6 @@ MODULE_PARM_DESC(debug_mask, "Set debug mask (default 0)"); + + static struct rtl_hal_usbint_cfg rtl92cu_interface_cfg = { + /* rx */ +- .in_ep_num = RTL92C_USB_BULK_IN_NUM, + .rx_urb_num = RTL92C_NUM_RX_URBS, + .rx_max_size = RTL92C_SIZE_MAX_RX_BUFFER, + .usb_rx_hdl = rtl8192cu_rx_hdl, +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c +index 9969e9d1fc4b..e051295ea596 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c +@@ -79,68 +79,75 @@ static int configvernoutep(struct ieee80211_hw *hw) + static void twooutepmapping(struct ieee80211_hw *hw, bool is_chip8, + bool bwificfg, struct rtl_ep_map *ep_map) + { ++ struct rtl_usb_priv *usb_priv = rtl_usbpriv(hw); ++ struct rtl_usb *rtlusb = rtl_usbdev(usb_priv); + struct rtl_priv *rtlpriv = rtl_priv(hw); + + if (bwificfg) { /* for WMM */ + rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, + "USB Chip-B & WMM Setting.....\n"); +- ep_map->ep_mapping[RTL_TXQ_BE] = 2; +- ep_map->ep_mapping[RTL_TXQ_BK] = 3; +- ep_map->ep_mapping[RTL_TXQ_VI] = 3; +- ep_map->ep_mapping[RTL_TXQ_VO] = 2; +- ep_map->ep_mapping[RTL_TXQ_MGT] = 2; +- ep_map->ep_mapping[RTL_TXQ_BCN] = 2; +- ep_map->ep_mapping[RTL_TXQ_HI] = 2; ++ ep_map->ep_mapping[RTL_TXQ_BE] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_BK] = rtlusb->out_eps[1]; ++ ep_map->ep_mapping[RTL_TXQ_VI] = rtlusb->out_eps[1]; ++ ep_map->ep_mapping[RTL_TXQ_VO] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_MGT] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_BCN] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_HI] = rtlusb->out_eps[0]; + } else { /* typical setting */ + rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, + "USB typical Setting.....\n"); +- ep_map->ep_mapping[RTL_TXQ_BE] = 3; +- ep_map->ep_mapping[RTL_TXQ_BK] = 3; +- ep_map->ep_mapping[RTL_TXQ_VI] = 2; +- ep_map->ep_mapping[RTL_TXQ_VO] = 2; +- ep_map->ep_mapping[RTL_TXQ_MGT] = 2; +- ep_map->ep_mapping[RTL_TXQ_BCN] = 2; +- ep_map->ep_mapping[RTL_TXQ_HI] = 2; ++ ep_map->ep_mapping[RTL_TXQ_BE] = rtlusb->out_eps[1]; ++ ep_map->ep_mapping[RTL_TXQ_BK] = rtlusb->out_eps[1]; ++ ep_map->ep_mapping[RTL_TXQ_VI] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_VO] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_MGT] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_BCN] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_HI] = rtlusb->out_eps[0]; + } + } + + static void threeoutepmapping(struct ieee80211_hw *hw, bool bwificfg, + struct rtl_ep_map *ep_map) + { ++ struct rtl_usb_priv *usb_priv = rtl_usbpriv(hw); ++ struct rtl_usb *rtlusb = rtl_usbdev(usb_priv); + struct rtl_priv *rtlpriv = rtl_priv(hw); + + if (bwificfg) { /* for WMM */ + rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, + "USB 3EP Setting for WMM.....\n"); +- ep_map->ep_mapping[RTL_TXQ_BE] = 5; +- ep_map->ep_mapping[RTL_TXQ_BK] = 3; +- ep_map->ep_mapping[RTL_TXQ_VI] = 3; +- ep_map->ep_mapping[RTL_TXQ_VO] = 2; +- ep_map->ep_mapping[RTL_TXQ_MGT] = 2; +- ep_map->ep_mapping[RTL_TXQ_BCN] = 2; +- ep_map->ep_mapping[RTL_TXQ_HI] = 2; ++ ep_map->ep_mapping[RTL_TXQ_BE] = rtlusb->out_eps[2]; ++ ep_map->ep_mapping[RTL_TXQ_BK] = rtlusb->out_eps[1]; ++ ep_map->ep_mapping[RTL_TXQ_VI] = rtlusb->out_eps[1]; ++ ep_map->ep_mapping[RTL_TXQ_VO] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_MGT] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_BCN] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_HI] = rtlusb->out_eps[0]; + } else { /* typical setting */ + rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, + "USB 3EP Setting for typical.....\n"); +- ep_map->ep_mapping[RTL_TXQ_BE] = 5; +- ep_map->ep_mapping[RTL_TXQ_BK] = 5; +- ep_map->ep_mapping[RTL_TXQ_VI] = 3; +- ep_map->ep_mapping[RTL_TXQ_VO] = 2; +- ep_map->ep_mapping[RTL_TXQ_MGT] = 2; +- ep_map->ep_mapping[RTL_TXQ_BCN] = 2; +- ep_map->ep_mapping[RTL_TXQ_HI] = 2; ++ ep_map->ep_mapping[RTL_TXQ_BE] = rtlusb->out_eps[2]; ++ ep_map->ep_mapping[RTL_TXQ_BK] = rtlusb->out_eps[2]; ++ ep_map->ep_mapping[RTL_TXQ_VI] = rtlusb->out_eps[1]; ++ ep_map->ep_mapping[RTL_TXQ_VO] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_MGT] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_BCN] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_HI] = rtlusb->out_eps[0]; + } + } + + static void oneoutepmapping(struct ieee80211_hw *hw, struct rtl_ep_map *ep_map) + { +- ep_map->ep_mapping[RTL_TXQ_BE] = 2; +- ep_map->ep_mapping[RTL_TXQ_BK] = 2; +- ep_map->ep_mapping[RTL_TXQ_VI] = 2; +- ep_map->ep_mapping[RTL_TXQ_VO] = 2; +- ep_map->ep_mapping[RTL_TXQ_MGT] = 2; +- ep_map->ep_mapping[RTL_TXQ_BCN] = 2; +- ep_map->ep_mapping[RTL_TXQ_HI] = 2; ++ struct rtl_usb_priv *usb_priv = rtl_usbpriv(hw); ++ struct rtl_usb *rtlusb = rtl_usbdev(usb_priv); ++ ++ ep_map->ep_mapping[RTL_TXQ_BE] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_BK] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_VI] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_VO] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_MGT] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_BCN] = rtlusb->out_eps[0]; ++ ep_map->ep_mapping[RTL_TXQ_HI] = rtlusb->out_eps[0]; + } + + static int _out_ep_mapping(struct ieee80211_hw *hw) +diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h +index cc4ef2bfd2e7..31ec9deae7fb 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h ++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h +@@ -4,7 +4,6 @@ + #ifndef __RTL92CU_TRX_H__ + #define __RTL92CU_TRX_H__ + +-#define RTL92C_USB_BULK_IN_NUM 1 + #define RTL92C_NUM_RX_URBS 8 + #define RTL92C_NUM_TX_URBS 32 + +diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.c b/drivers/net/wireless/realtek/rtlwifi/usb.c +index 30bf2775a335..706909a50790 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/usb.c ++++ b/drivers/net/wireless/realtek/rtlwifi/usb.c +@@ -280,7 +280,6 @@ static int _rtl_usb_init_rx(struct ieee80211_hw *hw) + + rtlusb->rx_max_size = rtlpriv->cfg->usb_interface_cfg->rx_max_size; + rtlusb->rx_urb_num = rtlpriv->cfg->usb_interface_cfg->rx_urb_num; +- rtlusb->in_ep = rtlpriv->cfg->usb_interface_cfg->in_ep_num; + rtlusb->usb_rx_hdl = rtlpriv->cfg->usb_interface_cfg->usb_rx_hdl; + rtlusb->usb_rx_segregate_hdl = + rtlpriv->cfg->usb_interface_cfg->usb_rx_segregate_hdl; +@@ -312,20 +311,38 @@ static int _rtl_usb_init(struct ieee80211_hw *hw) + + pep_desc = &usb_intf->cur_altsetting->endpoint[epidx].desc; + +- if (usb_endpoint_dir_in(pep_desc)) ++ if (usb_endpoint_dir_in(pep_desc)) { ++ if (usb_endpoint_xfer_bulk(pep_desc)) { ++ /* The vendor drivers assume there is only one ++ * bulk in ep and that it's the first in ep. ++ */ ++ if (rtlusb->in_ep_nums == 0) ++ rtlusb->in_ep = usb_endpoint_num(pep_desc); ++ else ++ pr_warn("%s: bulk in endpoint is not the first in endpoint\n", ++ __func__); ++ } ++ + rtlusb->in_ep_nums++; +- else if (usb_endpoint_dir_out(pep_desc)) ++ } else if (usb_endpoint_dir_out(pep_desc)) { ++ if (rtlusb->out_ep_nums < RTL_USB_MAX_BULKOUT_NUM) { ++ if (usb_endpoint_xfer_bulk(pep_desc)) ++ rtlusb->out_eps[rtlusb->out_ep_nums] = ++ usb_endpoint_num(pep_desc); ++ } else { ++ pr_warn("%s: found more bulk out endpoints than the expected %d\n", ++ __func__, RTL_USB_MAX_BULKOUT_NUM); ++ } ++ + rtlusb->out_ep_nums++; ++ } + + rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, + "USB EP(0x%02x), MaxPacketSize=%d, Interval=%d\n", + pep_desc->bEndpointAddress, pep_desc->wMaxPacketSize, + pep_desc->bInterval); + } +- if (rtlusb->in_ep_nums < rtlpriv->cfg->usb_interface_cfg->in_ep_num) { +- pr_err("Too few input end points found\n"); +- return -EINVAL; +- } ++ + if (rtlusb->out_ep_nums == 0) { + pr_err("No output end points found\n"); + return -EINVAL; +diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.h b/drivers/net/wireless/realtek/rtlwifi/usb.h +index 3bf85b23eec1..12529afc0510 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/usb.h ++++ b/drivers/net/wireless/realtek/rtlwifi/usb.h +@@ -19,6 +19,7 @@ + + #define RTL_USB_MAX_TXQ_NUM 4 /* max tx queue */ + #define RTL_USB_MAX_EP_NUM 6 /* max ep number */ ++#define RTL_USB_MAX_BULKOUT_NUM 4 + #define RTL_USB_MAX_TX_URBS_NUM 8 + + enum rtl_txq { +@@ -94,6 +95,7 @@ struct rtl_usb { + + /* Tx */ + u8 out_ep_nums ; ++ u8 out_eps[RTL_USB_MAX_BULKOUT_NUM]; + u8 out_queue_sel; + struct rtl_ep_map ep_map; + +diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h +index 3cd95dd4e711..b2179fd1d709 100644 +--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h ++++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h +@@ -2378,7 +2378,6 @@ struct rtl_mod_params { + + struct rtl_hal_usbint_cfg { + /* data - rx */ +- u32 in_ep_num; + u32 rx_urb_num; + u32 rx_max_size; + +-- +2.43.0 +