Re: [PATCH rtw-next v2 0/7] wifi: rtw89: improvements for USB part

Bitterblue Smith
2025-10-04T17:37:22Z

On 02/10/2025 23:08, Fedor Pchelkin wrote:
> The first two patches concern memory leak issues found during testing.
>
> The third and the fourth one do some extra small changes.
>
> The other ones implement TX completion functionality missing for the USB
> part of rtw89 driver, suggested by Bitterblue Smith [1]. This will allow
> handling TX wait skbs and the ones flagged with IEEE80211_TX_CTL_REQ_TX_STATUS
> correctly.
>
> rtw89 has several ways of handling TX status report events. The first one
> is based on RPP feature which is used by PCIe HCI. The other one depends
> on firmware sending a corresponding C2H message, quite similar to what
> rtw88 has. RTL8851BU vendor driver [2] was taken for reference.
>
> [1]: https://lore.kernel.org/linux-wireless/0cb4d19b-94c7-450e-ac56-8b0d4a1d889f@gmail.com/
> [2]: https://github.com/fofajardo/rtl8851bu.git
>
> Series has been tested to work with RTL8851BU (USB) and RTL8852BE (PCIe)
> devices.
>
>
> Changelog.
>
> v2: - add new 3/7 and 4/7 patches prepared due feedback to previous comments
> or developed in process
> - further changelog below --- in the patches
>
> v1: https://lore.kernel.org/linux-wireless/20250920132614.277719-1-pchelkin@ispras.ru/
>
> Fedor Pchelkin (7):
> wifi: rtw89: usb: use common error path for skbs in
> rtw89_usb_rx_handler()
> wifi: rtw89: usb: fix leak in rtw89_usb_write_port()
> wifi: rtw89: usb: use ieee80211_free_txskb() where appropriate
> wifi: rtw89: refine rtw89_core_tx_wait_complete()
> wifi: rtw89: implement C2H TX report handler
> wifi: rtw89: handle IEEE80211_TX_CTL_REQ_TX_STATUS frames for USB
> wifi: rtw89: process TX wait skbs for USB via C2H handler
>
> drivers/net/wireless/realtek/rtw89/core.c | 41 ++++++++++++---
> drivers/net/wireless/realtek/rtw89/core.h | 45 +++++++++++++----
> drivers/net/wireless/realtek/rtw89/fw.h | 14 ++++++
> drivers/net/wireless/realtek/rtw89/mac.c | 46 +++++++++++++++++
> drivers/net/wireless/realtek/rtw89/mac.h | 61 +++++++++++++++++++++++
> drivers/net/wireless/realtek/rtw89/pci.c | 2 +-
> drivers/net/wireless/realtek/rtw89/pci.h | 4 --
> drivers/net/wireless/realtek/rtw89/txrx.h | 6 ++-
> drivers/net/wireless/realtek/rtw89/usb.c | 41 +++++++++++----
> 9 files changed, 228 insertions(+), 32 deletions(-)
>

I tested these patches with RTL8851BU, RTL8832AU, RTL8832BU, RTL8832CU, and
RTL8912AU. They all work, with a few additions.

Before these patches RTL8851BU and RTL8832AU would remain "connected" when
I power off the router. That's because they don't have beacon filtering in
the firmware and the null frames sent by mac80211 were always marked with
IEEE80211_TX_STAT_ACK. With these patches they disconnect immediately when
I power off the router. So that works nicely.

What doesn't work is TX reports for management frames. Currently rtw89
doesn't configure the firmware to provide TX reports for the management
queue. That can be enabled with SET_CMC_TBL_MGQ_RPT_EN for the wifi 6 chips
and with CCTLINFO_G7_W0_MGQ_RPT_EN for RTL8922AU.

The other thing that doesn't work is the TX reports are different for
RTL8852CU and RTL8922AU. It's only a small difference for RTL8852CU:

#define RTW89_C2H_MAC_TX_RPT_W5_DATA_TX_CNT_V1 GENMASK(15, 10)

RTL8922AU is more strange. It needs something like this:

#define RTW89_C2H_MAC_TX_RPT_W12_TX_STATE_V2 GENMASK(9, 8)
#define RTW89_C2H_MAC_TX_RPT_W12_SW_DEFINE_V2 GENMASK(15, 12)
#define RTW89_C2H_MAC_TX_RPT_W14_DATA_TX_CNT_V2 GENMASK(15, 10)

The C2H is 80 bytes here (header included).

I think that's everything.