From 343bcc6e249f21f67f898543cefb3dab3ea78424 Mon Sep 17 00:00:00 2001 From: SuperKali Date: Mon, 8 Sep 2025 07:33:30 +0200 Subject: [PATCH] patch: rtw88: sdio: fix incorrect RF path detection when MAC is powered off (#8587) --- .../compilation/patch/drivers_network.sh | 1 + ...002-rtw88-sdio-rf-path-detection-fix.patch | 48 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 patch/misc/rtw88/6.1/002-rtw88-sdio-rf-path-detection-fix.patch diff --git a/lib/functions/compilation/patch/drivers_network.sh b/lib/functions/compilation/patch/drivers_network.sh index a387d8818..815bab283 100644 --- a/lib/functions/compilation/patch/drivers_network.sh +++ b/lib/functions/compilation/patch/drivers_network.sh @@ -354,6 +354,7 @@ driver_rtw88() { display_alert "Adding" "Upstream wireless RTW88 drivers" "info" if [[ -f "${SRC}/patch/misc/rtw88/${version}/001-drivers-net-wireless-realtek-rtw88-upstream-wireless.patch" ]]; then process_patch_file "${SRC}/patch/misc/rtw88/${version}/001-drivers-net-wireless-realtek-rtw88-upstream-wireless.patch" "applying" + process_patch_file "${SRC}/patch/misc/rtw88/${version}/002-rtw88-sdio-rf-path-detection-fix.patch" "applying" process_patch_file "${SRC}/patch/misc/rtw88/hack/003-rtw88-decrease-the-log-level-of-tx-report.patch" "applying" fi fi diff --git a/patch/misc/rtw88/6.1/002-rtw88-sdio-rf-path-detection-fix.patch b/patch/misc/rtw88/6.1/002-rtw88-sdio-rf-path-detection-fix.patch new file mode 100644 index 000000000..f2f68e49a --- /dev/null +++ b/patch/misc/rtw88/6.1/002-rtw88-sdio-rf-path-detection-fix.patch @@ -0,0 +1,48 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: SuperKali +Date: Sun, 7 Sep 2025 22:00:20 +0200 +Subject: rtw88: sdio: fix incorrect RF path detection when MAC is powered off + +When reading REG_SYS_CFG1 register via direct I/O while MAC is powered off, +incorrect values are returned (0x303030ea instead of 0x493d30ea), causing +RTL8822CS to be incorrectly detected as 1T1R instead of 2T2R. + +This leads to "unsupported rf path" errors and WiFi malfunction in 9 out of +10 boots on some hardware configurations. + +Fix by forcing indirect I/O when MAC is powered off and the address is not +a bus address, ensuring correct register values are read during chip +initialization. + +Signed-off-by: SuperKali +Link: https://lore.kernel.org/linux-wireless/7407FAA3-F4A4-48AA-91E5-A78DA711447D@gmail.com/ +--- + drivers/net/wireless/realtek/rtw88/sdio.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/wireless/realtek/rtw88/sdio.c b/drivers/net/wireless/realtek/rtw88/sdio.c +index 0cae5746f540..b054a73b50e0 100644 +--- a/drivers/net/wireless/realtek/rtw88/sdio.c ++++ b/drivers/net/wireless/realtek/rtw88/sdio.c +@@ -141,12 +141,16 @@ static u32 rtw_sdio_to_io_address(struct rtw_dev *rtwdev, u32 addr, + return rtw_sdio_to_bus_offset(rtwdev, addr); + } + + static bool rtw_sdio_use_direct_io(struct rtw_dev *rtwdev, u32 addr) + { +- return !rtw_sdio_is_sdio30_supported(rtwdev) || +- rtw_sdio_is_bus_addr(addr); ++ if (!rtw_sdio_is_bus_addr(addr) && ++ !test_bit(RTW_FLAG_POWERON, rtwdev->flags)) ++ return false; ++ ++ return !rtw_sdio_is_sdio30_supported(rtwdev) || ++ rtw_sdio_is_bus_addr(addr); + } + + static int rtw_sdio_indirect_reg_cfg(struct rtw_dev *rtwdev, u32 addr, u32 cfg) + { + struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv; +-- +Armbian +