mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2025-08-11 16:52:53 +00:00
Update to version 6.14.11 Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
74 lines
2.8 KiB
Diff
74 lines
2.8 KiB
Diff
From f24d0d8c3cd7e4237f802c4d2f3bd4ac04572948 Mon Sep 17 00:00:00 2001
|
|
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
|
Date: Sat, 10 May 2025 16:12:34 +0300
|
|
Subject: [PATCH] wifi: rtw88: Fix the random "error beacon valid" messages for
|
|
USB
|
|
|
|
All the USB devices have a problem in AP mode: uploading the updated
|
|
beacon to the chip's reserved page can randomly fail:
|
|
|
|
[34996.474304] rtw88_8723du 1-2:1.2: error beacon valid
|
|
[34996.474788] rtw88_8723du 1-2:1.2: failed to download drv rsvd page
|
|
[34999.956369] rtw88_8723du 1-2:1.2: error beacon valid
|
|
[34999.956846] rtw88_8723du 1-2:1.2: failed to download drv rsvd page
|
|
[34999.956855] rtw88_8723du 1-2:1.2: failed to download beacon
|
|
[35017.978296] rtw88_8723du 1-2:1.2: error beacon valid
|
|
[35017.978805] rtw88_8723du 1-2:1.2: failed to download drv rsvd page
|
|
[35017.978823] rtw88_8723du 1-2:1.2: failed to download beacon
|
|
[35023.200395] rtw88_8723du 1-2:1.2: error beacon valid
|
|
[35023.200869] rtw88_8723du 1-2:1.2: failed to download drv rsvd page
|
|
[35023.200875] rtw88_8723du 1-2:1.2: failed to download beacon
|
|
[35478.680547] rtw88_8723du 1-2:1.2: error beacon valid
|
|
[35478.681023] rtw88_8723du 1-2:1.2: failed to download drv rsvd page
|
|
|
|
Disable some beacon-related hardware functions before uploading the
|
|
beacon and enable them again after.
|
|
|
|
Tested with RTL8723DU, RTL8812BU, RTL8822CE.
|
|
|
|
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
|
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
|
Link: https://patch.msgid.link/c248c40a-d432-47ed-90e0-d81ee6c32464@gmail.com
|
|
---
|
|
drivers/net/wireless/realtek/rtw88/fw.c | 8 +++++++-
|
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
|
|
--- a/drivers/net/wireless/realtek/rtw88/fw.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/fw.c
|
|
@@ -1466,7 +1466,7 @@ void rtw_add_rsvd_page_sta(struct rtw_de
|
|
int rtw_fw_write_data_rsvd_page(struct rtw_dev *rtwdev, u16 pg_addr,
|
|
u8 *buf, u32 size)
|
|
{
|
|
- u8 bckp[2];
|
|
+ u8 bckp[3];
|
|
u8 val;
|
|
u16 rsvd_pg_head;
|
|
u32 bcn_valid_addr;
|
|
@@ -1478,6 +1478,8 @@ int rtw_fw_write_data_rsvd_page(struct r
|
|
if (!size)
|
|
return -EINVAL;
|
|
|
|
+ bckp[2] = rtw_read8(rtwdev, REG_BCN_CTRL);
|
|
+
|
|
if (rtw_chip_wcpu_11n(rtwdev)) {
|
|
rtw_write32_set(rtwdev, REG_DWBCN0_CTRL, BIT_BCN_VALID);
|
|
} else {
|
|
@@ -1491,6 +1493,9 @@ int rtw_fw_write_data_rsvd_page(struct r
|
|
val |= BIT_ENSWBCN >> 8;
|
|
rtw_write8(rtwdev, REG_CR + 1, val);
|
|
|
|
+ rtw_write8(rtwdev, REG_BCN_CTRL,
|
|
+ (bckp[2] & ~BIT_EN_BCN_FUNCTION) | BIT_DIS_TSF_UDT);
|
|
+
|
|
if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_PCIE) {
|
|
val = rtw_read8(rtwdev, REG_FWHW_TXQ_CTRL + 2);
|
|
bckp[1] = val;
|
|
@@ -1521,6 +1526,7 @@ restore:
|
|
rsvd_pg_head = rtwdev->fifo.rsvd_boundary;
|
|
rtw_write16(rtwdev, REG_FIFOPAGE_CTRL_2,
|
|
rsvd_pg_head | BIT_BCN_VALID_V1);
|
|
+ rtw_write8(rtwdev, REG_BCN_CTRL, bckp[2]);
|
|
if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_PCIE)
|
|
rtw_write8(rtwdev, REG_FWHW_TXQ_CTRL + 2, bckp[1]);
|
|
rtw_write8(rtwdev, REG_CR + 1, bckp[0]);
|