linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH rtw-next v4 00/12] wifi: rtw89: Add support for RTL8852CU
@ 2025-11-01 19:17 Bitterblue Smith
  2025-11-01 19:19 ` [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode Bitterblue Smith
                   ` (10 more replies)
  0 siblings, 11 replies; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-01 19:17 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

v3 was here:
https://lore.kernel.org/linux-wireless/fac0abab-2334-4ae2-9a80-f3fd7808e392@gmail.com/

The only changes since v3 are in patch 1 (it's new) and patch 9,
to fix the disconnection problems.

Bitterblue Smith (11):
  wifi: rtw89: Add rtw89_core_get_ch_dma_v2()
  wifi: rtw89: usb: Move bulk out map to new struct rtw89_usb_info
  wifi: rtw89: usb: Prepare rtw89_usb_ops_mac_pre_init() for RTL8852CU
  wifi: rtw89: usb: Prepare rtw89_usb_ops_mac_post_init() for RTL8852CU
  wifi: rtw89: Fix rtw89_mac_dmac_func_pre_en_ax() for USB/SDIO
  wifi: rtw89: 8852c: Fix rtw8852c_pwr_{on,off}_func() for USB
  wifi: rtw89: Add rtw8852c_dle_mem_usb{2,3}
  wifi: rtw89: Add rtw8852c_hfc_param_ini_usb
  wifi: rtw89: 8852c: Accept USB devices and load their MAC address
  wifi: rtw89: Add rtw8852cu.c
  wifi: rtw89: Enable the new rtw89_8852cu module

Ping-Ke Shih (1):
  wifi: rtw89: 8832cu: turn off TX partial mode

 drivers/net/wireless/realtek/rtw89/Kconfig    |  11 ++
 drivers/net/wireless/realtek/rtw89/Makefile   |   3 +
 drivers/net/wireless/realtek/rtw89/core.c     |  19 +++
 drivers/net/wireless/realtek/rtw89/core.h     |   7 +-
 drivers/net/wireless/realtek/rtw89/mac.c      |  34 ++++-
 drivers/net/wireless/realtek/rtw89/mac.h      |  10 ++
 drivers/net/wireless/realtek/rtw89/rtw8851b.c |   4 +-
 .../net/wireless/realtek/rtw89/rtw8851bu.c    |  22 +++
 drivers/net/wireless/realtek/rtw89/rtw8852a.c |   4 +-
 drivers/net/wireless/realtek/rtw89/rtw8852b.c |   4 +-
 .../net/wireless/realtek/rtw89/rtw8852bt.c    |   4 +-
 .../net/wireless/realtek/rtw89/rtw8852bu.c    |  22 +++
 drivers/net/wireless/realtek/rtw89/rtw8852c.c | 128 +++++++++++++++---
 drivers/net/wireless/realtek/rtw89/rtw8852c.h |   2 +-
 .../net/wireless/realtek/rtw89/rtw8852cu.c    |  69 ++++++++++
 drivers/net/wireless/realtek/rtw89/rtw8922a.c |   4 +-
 drivers/net/wireless/realtek/rtw89/usb.c      |  45 ++----
 drivers/net/wireless/realtek/rtw89/usb.h      |  11 ++
 18 files changed, 343 insertions(+), 60 deletions(-)
 create mode 100644 drivers/net/wireless/realtek/rtw89/rtw8852cu.c

-- 
2.51.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode
  2025-11-01 19:17 [PATCH rtw-next v4 00/12] wifi: rtw89: Add support for RTL8852CU Bitterblue Smith
@ 2025-11-01 19:19 ` Bitterblue Smith
  2025-11-01 19:20   ` [PATCH rtw-next v4 02/12] wifi: rtw89: Add rtw89_core_get_ch_dma_v2() Bitterblue Smith
                     ` (2 more replies)
  2025-11-01 19:22 ` [PATCH rtw-next v4 03/12] wifi: rtw89: usb: Move bulk out map to new struct rtw89_usb_info Bitterblue Smith
                   ` (9 subsequent siblings)
  10 siblings, 3 replies; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-01 19:19 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

From: Ping-Ke Shih <pkshih@realtek.com>

The TX partial mode in USB devices will cause timeout to wait for payload,
causing SER 0x999 and disconnection. Turn off this mode according to
design suggestion.

rtw89_8852cu 2-4:1.0: FW status = 0xee001108
rtw89_8852cu 2-4:1.0: FW BADADDR = 0x18605fc8
rtw89_8852cu 2-4:1.0: FW EPC/RA = 0x0
rtw89_8852cu 2-4:1.0: FW MISC = 0x1010000
rtw89_8852cu 2-4:1.0: R_AX_HALT_C2H = 0x999
rtw89_8852cu 2-4:1.0: R_AX_SER_DBG_INFO = 0x71020010
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f554
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f556
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
rtw89_8852cu 2-4:1.0: --->
err=0x999
rtw89_8852cu 2-4:1.0: R_AX_SER_DBG_INFO =0x71020010
rtw89_8852cu 2-4:1.0: R_AX_SER_DBG_INFO =0x71020010
rtw89_8852cu 2-4:1.0: DBG Counter 1 (R_AX_DRV_FW_HSK_4)=0x00000000
rtw89_8852cu 2-4:1.0: DBG Counter 2 (R_AX_DRV_FW_HSK_5)=0x00000000
rtw89_8852cu 2-4:1.0: R_AX_DMAC_ERR_ISR=0x00000000
rtw89_8852cu 2-4:1.0: R_AX_DMAC_ERR_IMR=0x00000000
rtw89_8852cu 2-4:1.0: R_AX_CMAC_ERR_ISR [0]=0x00000000
rtw89_8852cu 2-4:1.0: R_AX_CMAC_FUNC_EN [0]=0xf000803f
rtw89_8852cu 2-4:1.0: R_AX_CK_EN [0]=0xffffffff
rtw89_8852cu 2-4:1.0: R_AX_CMAC_ERR_IMR [0]=0x00000000
rtw89_8852cu 2-4:1.0: [CMAC] : CMAC1 not enabled

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
---
v4:
 - Patch is new in v4.
---
 drivers/net/wireless/realtek/rtw89/mac.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c
index d837513f4e92..df040b4e8855 100644
--- a/drivers/net/wireless/realtek/rtw89/mac.c
+++ b/drivers/net/wireless/realtek/rtw89/mac.c
@@ -2327,7 +2327,8 @@ static int sec_eng_init_ax(struct rtw89_dev *rtwdev)
 	if (chip->chip_id == RTL8852C)
 		val |= B_AX_UC_MGNT_DEC;
 	if (chip->chip_id == RTL8852A || chip->chip_id == RTL8852B ||
-	    chip->chip_id == RTL8851B)
+	    chip->chip_id == RTL8851B ||
+	    (chip->chip_id == RTL8852C && rtwdev->hci.type == RTW89_HCI_TYPE_USB))
 		val &= ~B_AX_TX_PARTIAL_MODE;
 	rtw89_write32(rtwdev, R_AX_SEC_ENG_CTRL, val);
 
-- 
2.51.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH rtw-next v4 02/12] wifi: rtw89: Add rtw89_core_get_ch_dma_v2()
  2025-11-01 19:19 ` [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode Bitterblue Smith
@ 2025-11-01 19:20   ` Bitterblue Smith
  2025-11-03  0:47   ` [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode Ping-Ke Shih
  2025-11-04  1:53   ` Ping-Ke Shih
  2 siblings, 0 replies; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-01 19:20 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

RTL8852CU, RTL8852AU, and RTL8922AU need a different mapping of TX
queue to DMA channel compared to their PCI versions, so make
get_ch_dma in struct rtw89_chip_ops an array and add
rtw89_core_get_ch_dma_v2().

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2:
 - No change, messed up sending v1.

v3:
 - Use the new get_ch_dma chip op and add rtw89_core_get_ch_dma_v2()
   instead of modifying rtw89_core_get_ch_dma().

v4:
 - Add Acked-by.
---
 drivers/net/wireless/realtek/rtw89/core.c     | 19 +++++++++++++++++++
 drivers/net/wireless/realtek/rtw89/core.h     |  5 +++--
 drivers/net/wireless/realtek/rtw89/rtw8851b.c |  4 +++-
 drivers/net/wireless/realtek/rtw89/rtw8852a.c |  4 +++-
 drivers/net/wireless/realtek/rtw89/rtw8852b.c |  4 +++-
 .../net/wireless/realtek/rtw89/rtw8852bt.c    |  4 +++-
 drivers/net/wireless/realtek/rtw89/rtw8852c.c |  4 +++-
 drivers/net/wireless/realtek/rtw89/rtw8922a.c |  4 +++-
 8 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw89/core.c b/drivers/net/wireless/realtek/rtw89/core.c
index 1b5a40e9821c..1f92be300ea7 100644
--- a/drivers/net/wireless/realtek/rtw89/core.c
+++ b/drivers/net/wireless/realtek/rtw89/core.c
@@ -759,6 +759,25 @@ u8 rtw89_core_get_ch_dma_v1(struct rtw89_dev *rtwdev, u8 qsel)
 }
 EXPORT_SYMBOL(rtw89_core_get_ch_dma_v1);
 
+u8 rtw89_core_get_ch_dma_v2(struct rtw89_dev *rtwdev, u8 qsel)
+{
+	switch (qsel) {
+	default:
+		rtw89_warn(rtwdev, "Cannot map qsel to dma v2: %d\n", qsel);
+		fallthrough;
+	case RTW89_TX_QSEL_BE_0:
+	case RTW89_TX_QSEL_VO_0:
+		return RTW89_TXCH_ACH0;
+	case RTW89_TX_QSEL_BK_0:
+	case RTW89_TX_QSEL_VI_0:
+		return RTW89_TXCH_ACH2;
+	case RTW89_TX_QSEL_B0_MGMT:
+	case RTW89_TX_QSEL_B0_HI:
+		return RTW89_TXCH_CH8;
+	}
+}
+EXPORT_SYMBOL(rtw89_core_get_ch_dma_v2);
+
 static void
 rtw89_core_tx_update_mgmt_info(struct rtw89_dev *rtwdev,
 			       struct rtw89_core_tx_request *tx_req)
diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h
index f8b443894db9..c7b48bd000c7 100644
--- a/drivers/net/wireless/realtek/rtw89/core.h
+++ b/drivers/net/wireless/realtek/rtw89/core.h
@@ -3764,7 +3764,7 @@ struct rtw89_chip_ops {
 	void (*fill_txdesc_fwcmd)(struct rtw89_dev *rtwdev,
 				  struct rtw89_tx_desc_info *desc_info,
 				  void *txdesc);
-	u8 (*get_ch_dma)(struct rtw89_dev *rtwdev, u8 qsel);
+	u8 (*get_ch_dma[RTW89_HCI_TYPE_NUM])(struct rtw89_dev *rtwdev, u8 qsel);
 	int (*cfg_ctrl_path)(struct rtw89_dev *rtwdev, bool wl);
 	int (*mac_cfg_gnt)(struct rtw89_dev *rtwdev,
 			   const struct rtw89_mac_ax_coex_gnt *gnt_cfg);
@@ -7253,7 +7253,7 @@ u8 rtw89_chip_get_ch_dma(struct rtw89_dev *rtwdev, u8 qsel)
 {
 	const struct rtw89_chip_info *chip = rtwdev->chip;
 
-	return chip->ops->get_ch_dma(rtwdev, qsel);
+	return chip->ops->get_ch_dma[rtwdev->hci.type](rtwdev, qsel);
 }
 
 static inline
@@ -7507,6 +7507,7 @@ void rtw89_core_fill_txdesc_fwcmd_v2(struct rtw89_dev *rtwdev,
 				     void *txdesc);
 u8 rtw89_core_get_ch_dma(struct rtw89_dev *rtwdev, u8 qsel);
 u8 rtw89_core_get_ch_dma_v1(struct rtw89_dev *rtwdev, u8 qsel);
+u8 rtw89_core_get_ch_dma_v2(struct rtw89_dev *rtwdev, u8 qsel);
 void rtw89_core_rx(struct rtw89_dev *rtwdev,
 		   struct rtw89_rx_desc_info *desc_info,
 		   struct sk_buff *skb);
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851b.c b/drivers/net/wireless/realtek/rtw89/rtw8851b.c
index edcbda124916..2019f6022cbb 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8851b.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8851b.c
@@ -2537,7 +2537,9 @@ static const struct rtw89_chip_ops rtw8851b_chip_ops = {
 	.query_rxdesc		= rtw89_core_query_rxdesc,
 	.fill_txdesc		= rtw89_core_fill_txdesc,
 	.fill_txdesc_fwcmd	= rtw89_core_fill_txdesc,
-	.get_ch_dma		= rtw89_core_get_ch_dma,
+	.get_ch_dma		= {rtw89_core_get_ch_dma,
+				   rtw89_core_get_ch_dma,
+				   NULL,},
 	.cfg_ctrl_path		= rtw89_mac_cfg_ctrl_path,
 	.mac_cfg_gnt		= rtw89_mac_cfg_gnt,
 	.stop_sch_tx		= rtw89_mac_stop_sch_tx,
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852a.c b/drivers/net/wireless/realtek/rtw89/rtw8852a.c
index 232f4c1bee1b..fa347dbebf9a 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852a.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852a.c
@@ -2178,7 +2178,9 @@ static const struct rtw89_chip_ops rtw8852a_chip_ops = {
 	.query_rxdesc		= rtw89_core_query_rxdesc,
 	.fill_txdesc		= rtw89_core_fill_txdesc,
 	.fill_txdesc_fwcmd	= rtw89_core_fill_txdesc,
-	.get_ch_dma		= rtw89_core_get_ch_dma,
+	.get_ch_dma		= {rtw89_core_get_ch_dma,
+				   rtw89_core_get_ch_dma_v2,
+				   NULL,},
 	.cfg_ctrl_path		= rtw89_mac_cfg_ctrl_path,
 	.mac_cfg_gnt		= rtw89_mac_cfg_gnt,
 	.stop_sch_tx		= rtw89_mac_stop_sch_tx,
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852b.c b/drivers/net/wireless/realtek/rtw89/rtw8852b.c
index 0777e336aaa1..38cd151f8c3f 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852b.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852b.c
@@ -842,7 +842,9 @@ static const struct rtw89_chip_ops rtw8852b_chip_ops = {
 	.query_rxdesc		= rtw89_core_query_rxdesc,
 	.fill_txdesc		= rtw89_core_fill_txdesc,
 	.fill_txdesc_fwcmd	= rtw89_core_fill_txdesc,
-	.get_ch_dma		= rtw89_core_get_ch_dma,
+	.get_ch_dma		= {rtw89_core_get_ch_dma,
+				   rtw89_core_get_ch_dma,
+				   NULL,},
 	.cfg_ctrl_path		= rtw89_mac_cfg_ctrl_path,
 	.mac_cfg_gnt		= rtw89_mac_cfg_gnt,
 	.stop_sch_tx		= rtw89_mac_stop_sch_tx,
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852bt.c b/drivers/net/wireless/realtek/rtw89/rtw8852bt.c
index b3a79ebc7e75..15ba780492d6 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852bt.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852bt.c
@@ -708,7 +708,9 @@ static const struct rtw89_chip_ops rtw8852bt_chip_ops = {
 	.query_rxdesc		= rtw89_core_query_rxdesc,
 	.fill_txdesc		= rtw89_core_fill_txdesc,
 	.fill_txdesc_fwcmd	= rtw89_core_fill_txdesc,
-	.get_ch_dma		= rtw89_core_get_ch_dma,
+	.get_ch_dma		= {rtw89_core_get_ch_dma,
+				   NULL,
+				   NULL,},
 	.cfg_ctrl_path		= rtw89_mac_cfg_ctrl_path,
 	.mac_cfg_gnt		= rtw89_mac_cfg_gnt,
 	.stop_sch_tx		= rtw89_mac_stop_sch_tx,
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c.c b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
index 440801d63343..ee1915307376 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852c.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
@@ -2962,7 +2962,9 @@ static const struct rtw89_chip_ops rtw8852c_chip_ops = {
 	.query_rxdesc		= rtw89_core_query_rxdesc,
 	.fill_txdesc		= rtw89_core_fill_txdesc_v1,
 	.fill_txdesc_fwcmd	= rtw89_core_fill_txdesc_fwcmd_v1,
-	.get_ch_dma		= rtw89_core_get_ch_dma,
+	.get_ch_dma		= {rtw89_core_get_ch_dma,
+				   rtw89_core_get_ch_dma_v2,
+				   NULL,},
 	.cfg_ctrl_path		= rtw89_mac_cfg_ctrl_path_v1,
 	.mac_cfg_gnt		= rtw89_mac_cfg_gnt_v1,
 	.stop_sch_tx		= rtw89_mac_stop_sch_tx_v1,
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8922a.c b/drivers/net/wireless/realtek/rtw89/rtw8922a.c
index 6aa19ad259ac..61f3a0a3f440 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8922a.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8922a.c
@@ -2821,7 +2821,9 @@ static const struct rtw89_chip_ops rtw8922a_chip_ops = {
 	.query_rxdesc		= rtw89_core_query_rxdesc_v2,
 	.fill_txdesc		= rtw89_core_fill_txdesc_v2,
 	.fill_txdesc_fwcmd	= rtw89_core_fill_txdesc_fwcmd_v2,
-	.get_ch_dma		= rtw89_core_get_ch_dma,
+	.get_ch_dma		= {rtw89_core_get_ch_dma,
+				   rtw89_core_get_ch_dma_v2,
+				   NULL,},
 	.cfg_ctrl_path		= rtw89_mac_cfg_ctrl_path_v2,
 	.mac_cfg_gnt		= rtw89_mac_cfg_gnt_v2,
 	.stop_sch_tx		= rtw89_mac_stop_sch_tx_v2,
-- 
2.51.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH rtw-next v4 03/12] wifi: rtw89: usb: Move bulk out map to new struct rtw89_usb_info
  2025-11-01 19:17 [PATCH rtw-next v4 00/12] wifi: rtw89: Add support for RTL8852CU Bitterblue Smith
  2025-11-01 19:19 ` [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode Bitterblue Smith
@ 2025-11-01 19:22 ` Bitterblue Smith
  2025-11-01 19:22 ` [PATCH rtw-next v4 04/12] wifi: rtw89: usb: Prepare rtw89_usb_ops_mac_pre_init() for RTL8852CU Bitterblue Smith
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-01 19:22 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

RTL8852AU, RTL8852CU, and RTL8922AU will need a different TX channel
to bulk out endpoint mapping, so create a new struct rtw89_usb_info
and move the mapping there. Initialise it in each chip's driver.

Struct rtw89_usb_info will also hold some registers which are located
at different offsets in RTL8852CU compared to the other wifi 6 chips.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2:
 - No change, messed up sending v1.

v3:
 - Move the bulk out map to the new struct rtw89_usb_info instead of
   adding the new mapping to rtw89_usb_get_bulkout_id().

v4:
 - Add Acked-by.
---
 drivers/net/wireless/realtek/rtw89/core.h     |  2 ++
 .../net/wireless/realtek/rtw89/rtw8851bu.c    | 15 +++++++++++
 .../net/wireless/realtek/rtw89/rtw8852bu.c    | 15 +++++++++++
 drivers/net/wireless/realtek/rtw89/usb.c      | 25 +++----------------
 drivers/net/wireless/realtek/rtw89/usb.h      |  5 ++++
 5 files changed, 40 insertions(+), 22 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h
index c7b48bd000c7..97cb0e5f0898 100644
--- a/drivers/net/wireless/realtek/rtw89/core.h
+++ b/drivers/net/wireless/realtek/rtw89/core.h
@@ -15,6 +15,7 @@
 
 struct rtw89_dev;
 struct rtw89_pci_info;
+struct rtw89_usb_info;
 struct rtw89_mac_gen_def;
 struct rtw89_phy_gen_def;
 struct rtw89_fw_blacklist;
@@ -4514,6 +4515,7 @@ struct rtw89_chip_variant {
 
 union rtw89_bus_info {
 	const struct rtw89_pci_info *pci;
+	const struct rtw89_usb_info *usb;
 };
 
 struct rtw89_driver_info {
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851bu.c b/drivers/net/wireless/realtek/rtw89/rtw8851bu.c
index 04e1ab13b753..c39acbec12a9 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8851bu.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8851bu.c
@@ -7,10 +7,25 @@
 #include "rtw8851b.h"
 #include "usb.h"
 
+static const struct rtw89_usb_info rtw8851b_usb_info = {
+	.bulkout_id = {
+		[RTW89_DMA_ACH0] = 3,
+		[RTW89_DMA_ACH1] = 4,
+		[RTW89_DMA_ACH2] = 5,
+		[RTW89_DMA_ACH3] = 6,
+		[RTW89_DMA_B0MG] = 0,
+		[RTW89_DMA_B0HI] = 1,
+		[RTW89_DMA_H2C] = 2,
+	},
+};
+
 static const struct rtw89_driver_info rtw89_8851bu_info = {
 	.chip = &rtw8851b_chip_info,
 	.variant = NULL,
 	.quirks = NULL,
+	.bus = {
+		.usb = &rtw8851b_usb_info,
+	}
 };
 
 static const struct usb_device_id rtw_8851bu_id_table[] = {
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852bu.c b/drivers/net/wireless/realtek/rtw89/rtw8852bu.c
index 0694272f7ffa..28e69473918e 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852bu.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852bu.c
@@ -7,10 +7,25 @@
 #include "rtw8852b.h"
 #include "usb.h"
 
+static const struct rtw89_usb_info rtw8852b_usb_info = {
+	.bulkout_id = {
+		[RTW89_DMA_ACH0] = 3,
+		[RTW89_DMA_ACH1] = 4,
+		[RTW89_DMA_ACH2] = 5,
+		[RTW89_DMA_ACH3] = 6,
+		[RTW89_DMA_B0MG] = 0,
+		[RTW89_DMA_B0HI] = 1,
+		[RTW89_DMA_H2C] = 2,
+	},
+};
+
 static const struct rtw89_driver_info rtw89_8852bu_info = {
 	.chip = &rtw8852b_chip_info,
 	.variant = NULL,
 	.quirks = NULL,
+	.bus = {
+		.usb = &rtw8852b_usb_info,
+	}
 };
 
 static const struct usb_device_id rtw_8852bu_id_table[] = {
diff --git a/drivers/net/wireless/realtek/rtw89/usb.c b/drivers/net/wireless/realtek/rtw89/usb.c
index afbd1fb79021..8c0129d54b6c 100644
--- a/drivers/net/wireless/realtek/rtw89/usb.c
+++ b/drivers/net/wireless/realtek/rtw89/usb.c
@@ -167,27 +167,6 @@ rtw89_usb_ops_check_and_reclaim_tx_resource(struct rtw89_dev *rtwdev,
 	return 42; /* TODO some kind of calculation? */
 }
 
-static u8 rtw89_usb_get_bulkout_id(u8 ch_dma)
-{
-	switch (ch_dma) {
-	case RTW89_DMA_ACH0:
-		return 3;
-	case RTW89_DMA_ACH1:
-		return 4;
-	case RTW89_DMA_ACH2:
-		return 5;
-	case RTW89_DMA_ACH3:
-		return 6;
-	default:
-	case RTW89_DMA_B0MG:
-		return 0;
-	case RTW89_DMA_B0HI:
-		return 1;
-	case RTW89_DMA_H2C:
-		return 2;
-	}
-}
-
 static void rtw89_usb_write_port_complete(struct urb *urb)
 {
 	struct rtw89_usb_tx_ctrl_block *txcb = urb->context;
@@ -249,9 +228,10 @@ static int rtw89_usb_write_port(struct rtw89_dev *rtwdev, u8 ch_dma,
 				void *data, int len, void *context)
 {
 	struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev);
+	const struct rtw89_usb_info *info = rtwusb->info;
 	struct usb_device *usbd = rtwusb->udev;
 	struct urb *urb;
-	u8 bulkout_id = rtw89_usb_get_bulkout_id(ch_dma);
+	u8 bulkout_id = info->bulkout_id[ch_dma];
 	unsigned int pipe;
 	int ret;
 
@@ -949,6 +929,7 @@ int rtw89_usb_probe(struct usb_interface *intf,
 
 	rtwusb = rtw89_usb_priv(rtwdev);
 	rtwusb->rtwdev = rtwdev;
+	rtwusb->info = info->bus.usb;
 
 	rtwdev->hci.ops = &rtw89_usb_ops;
 	rtwdev->hci.type = RTW89_HCI_TYPE_USB;
diff --git a/drivers/net/wireless/realtek/rtw89/usb.h b/drivers/net/wireless/realtek/rtw89/usb.h
index c1b4bfa20979..a27c698a424c 100644
--- a/drivers/net/wireless/realtek/rtw89/usb.h
+++ b/drivers/net/wireless/realtek/rtw89/usb.h
@@ -20,6 +20,10 @@
 #define RTW89_MAX_ENDPOINT_NUM		9
 #define RTW89_MAX_BULKOUT_NUM		7
 
+struct rtw89_usb_info {
+	u8 bulkout_id[RTW89_DMA_CH_NUM];
+};
+
 struct rtw89_usb_rx_ctrl_block {
 	struct rtw89_dev *rtwdev;
 	struct urb *rx_urb;
@@ -35,6 +39,7 @@ struct rtw89_usb_tx_ctrl_block {
 struct rtw89_usb {
 	struct rtw89_dev *rtwdev;
 	struct usb_device *udev;
+	const struct rtw89_usb_info *info;
 
 	__le32 *vendor_req_buf;
 
-- 
2.51.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH rtw-next v4 04/12] wifi: rtw89: usb: Prepare rtw89_usb_ops_mac_pre_init() for RTL8852CU
  2025-11-01 19:17 [PATCH rtw-next v4 00/12] wifi: rtw89: Add support for RTL8852CU Bitterblue Smith
  2025-11-01 19:19 ` [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode Bitterblue Smith
  2025-11-01 19:22 ` [PATCH rtw-next v4 03/12] wifi: rtw89: usb: Move bulk out map to new struct rtw89_usb_info Bitterblue Smith
@ 2025-11-01 19:22 ` Bitterblue Smith
  2025-11-01 19:23 ` [PATCH rtw-next v4 05/12] wifi: rtw89: usb: Prepare rtw89_usb_ops_mac_post_init() " Bitterblue Smith
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-01 19:22 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

The registers used in rtw89_usb_ops_mac_pre_init() are located at
different offsets in RTL8852CU, so move them to struct rtw89_usb_info,
which is filled in each chip's driver.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2:
 - No change, messed up sending v1.

v3:
 - Move the registers to struct rtw89_usb_info instead of extending
   rtw89_usb_ops_mac_pre_init().

v4:
 - Add Acked-by.
---
 drivers/net/wireless/realtek/rtw89/rtw8851bu.c |  4 ++++
 drivers/net/wireless/realtek/rtw89/rtw8852bu.c |  4 ++++
 drivers/net/wireless/realtek/rtw89/usb.c       | 13 ++++++++-----
 drivers/net/wireless/realtek/rtw89/usb.h       |  3 +++
 4 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851bu.c b/drivers/net/wireless/realtek/rtw89/rtw8851bu.c
index c39acbec12a9..9cc682872d24 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8851bu.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8851bu.c
@@ -5,9 +5,13 @@
 #include <linux/module.h>
 #include <linux/usb.h>
 #include "rtw8851b.h"
+#include "reg.h"
 #include "usb.h"
 
 static const struct rtw89_usb_info rtw8851b_usb_info = {
+	.usb_host_request_2		= R_AX_USB_HOST_REQUEST_2,
+	.usb_wlan0_1			= R_AX_USB_WLAN0_1,
+	.hci_func_en			= R_AX_HCI_FUNC_EN,
 	.bulkout_id = {
 		[RTW89_DMA_ACH0] = 3,
 		[RTW89_DMA_ACH1] = 4,
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852bu.c b/drivers/net/wireless/realtek/rtw89/rtw8852bu.c
index 28e69473918e..b913cae95e3b 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852bu.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852bu.c
@@ -5,9 +5,13 @@
 #include <linux/module.h>
 #include <linux/usb.h>
 #include "rtw8852b.h"
+#include "reg.h"
 #include "usb.h"
 
 static const struct rtw89_usb_info rtw8852b_usb_info = {
+	.usb_host_request_2		= R_AX_USB_HOST_REQUEST_2,
+	.usb_wlan0_1			= R_AX_USB_WLAN0_1,
+	.hci_func_en			= R_AX_HCI_FUNC_EN,
 	.bulkout_id = {
 		[RTW89_DMA_ACH0] = 3,
 		[RTW89_DMA_ACH1] = 4,
diff --git a/drivers/net/wireless/realtek/rtw89/usb.c b/drivers/net/wireless/realtek/rtw89/usb.c
index 8c0129d54b6c..ea1d8726ec3f 100644
--- a/drivers/net/wireless/realtek/rtw89/usb.c
+++ b/drivers/net/wireless/realtek/rtw89/usb.c
@@ -678,20 +678,23 @@ static int rtw89_usb_ops_deinit(struct rtw89_dev *rtwdev)
 
 static int rtw89_usb_ops_mac_pre_init(struct rtw89_dev *rtwdev)
 {
+	struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev);
+	const struct rtw89_usb_info *info = rtwusb->info;
 	u32 val32;
 
-	rtw89_write32_set(rtwdev, R_AX_USB_HOST_REQUEST_2, B_AX_R_USBIO_MODE);
+	rtw89_write32_set(rtwdev, info->usb_host_request_2,
+			  B_AX_R_USBIO_MODE);
 
 	/* fix USB IO hang suggest by chihhanli@realtek.com */
-	rtw89_write32_clr(rtwdev, R_AX_USB_WLAN0_1,
+	rtw89_write32_clr(rtwdev, info->usb_wlan0_1,
 			  B_AX_USBRX_RST | B_AX_USBTX_RST);
 
-	val32 = rtw89_read32(rtwdev, R_AX_HCI_FUNC_EN);
+	val32 = rtw89_read32(rtwdev, info->hci_func_en);
 	val32 &= ~(B_AX_HCI_RXDMA_EN | B_AX_HCI_TXDMA_EN);
-	rtw89_write32(rtwdev, R_AX_HCI_FUNC_EN, val32);
+	rtw89_write32(rtwdev, info->hci_func_en, val32);
 
 	val32 |= B_AX_HCI_RXDMA_EN | B_AX_HCI_TXDMA_EN;
-	rtw89_write32(rtwdev, R_AX_HCI_FUNC_EN, val32);
+	rtw89_write32(rtwdev, info->hci_func_en, val32);
 	/* fix USB TRX hang suggest by chihhanli@realtek.com */
 
 	return 0;
diff --git a/drivers/net/wireless/realtek/rtw89/usb.h b/drivers/net/wireless/realtek/rtw89/usb.h
index a27c698a424c..be3a9fbe42c0 100644
--- a/drivers/net/wireless/realtek/rtw89/usb.h
+++ b/drivers/net/wireless/realtek/rtw89/usb.h
@@ -21,6 +21,9 @@
 #define RTW89_MAX_BULKOUT_NUM		7
 
 struct rtw89_usb_info {
+	u32 usb_host_request_2;
+	u32 usb_wlan0_1;
+	u32 hci_func_en;
 	u8 bulkout_id[RTW89_DMA_CH_NUM];
 };
 
-- 
2.51.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH rtw-next v4 05/12] wifi: rtw89: usb: Prepare rtw89_usb_ops_mac_post_init() for RTL8852CU
  2025-11-01 19:17 [PATCH rtw-next v4 00/12] wifi: rtw89: Add support for RTL8852CU Bitterblue Smith
                   ` (2 preceding siblings ...)
  2025-11-01 19:22 ` [PATCH rtw-next v4 04/12] wifi: rtw89: usb: Prepare rtw89_usb_ops_mac_pre_init() for RTL8852CU Bitterblue Smith
@ 2025-11-01 19:23 ` Bitterblue Smith
  2025-11-01 19:24 ` [PATCH rtw-next v4 06/12] wifi: rtw89: Fix rtw89_mac_dmac_func_pre_en_ax() for USB/SDIO Bitterblue Smith
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-01 19:23 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

The registers used in rtw89_usb_ops_mac_post_init() are located at
different offsets in RTL8852CU, so move them to struct rtw89_usb_info,
which is filled in each chip's driver.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2:
 - No change, messed up sending v1.

v3:
 - Move the registers to struct rtw89_usb_info instead of extending
   rtw89_usb_ops_mac_post_init().

v4:
 - Add Acked-by.
---
 drivers/net/wireless/realtek/rtw89/rtw8851bu.c | 3 +++
 drivers/net/wireless/realtek/rtw89/rtw8852bu.c | 3 +++
 drivers/net/wireless/realtek/rtw89/usb.c       | 7 ++++---
 drivers/net/wireless/realtek/rtw89/usb.h       | 3 +++
 4 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851bu.c b/drivers/net/wireless/realtek/rtw89/rtw8851bu.c
index 9cc682872d24..b8799a37add3 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8851bu.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8851bu.c
@@ -12,6 +12,9 @@ static const struct rtw89_usb_info rtw8851b_usb_info = {
 	.usb_host_request_2		= R_AX_USB_HOST_REQUEST_2,
 	.usb_wlan0_1			= R_AX_USB_WLAN0_1,
 	.hci_func_en			= R_AX_HCI_FUNC_EN,
+	.usb3_mac_npi_config_intf_0	= R_AX_USB3_MAC_NPI_CONFIG_INTF_0,
+	.usb_endpoint_0			= R_AX_USB_ENDPOINT_0,
+	.usb_endpoint_2			= R_AX_USB_ENDPOINT_2,
 	.bulkout_id = {
 		[RTW89_DMA_ACH0] = 3,
 		[RTW89_DMA_ACH1] = 4,
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852bu.c b/drivers/net/wireless/realtek/rtw89/rtw8852bu.c
index b913cae95e3b..c8a644403341 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852bu.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852bu.c
@@ -12,6 +12,9 @@ static const struct rtw89_usb_info rtw8852b_usb_info = {
 	.usb_host_request_2		= R_AX_USB_HOST_REQUEST_2,
 	.usb_wlan0_1			= R_AX_USB_WLAN0_1,
 	.hci_func_en			= R_AX_HCI_FUNC_EN,
+	.usb3_mac_npi_config_intf_0	= R_AX_USB3_MAC_NPI_CONFIG_INTF_0,
+	.usb_endpoint_0			= R_AX_USB_ENDPOINT_0,
+	.usb_endpoint_2			= R_AX_USB_ENDPOINT_2,
 	.bulkout_id = {
 		[RTW89_DMA_ACH0] = 3,
 		[RTW89_DMA_ACH1] = 4,
diff --git a/drivers/net/wireless/realtek/rtw89/usb.c b/drivers/net/wireless/realtek/rtw89/usb.c
index ea1d8726ec3f..4c47071b30fd 100644
--- a/drivers/net/wireless/realtek/rtw89/usb.c
+++ b/drivers/net/wireless/realtek/rtw89/usb.c
@@ -708,10 +708,11 @@ static int rtw89_usb_ops_mac_pre_deinit(struct rtw89_dev *rtwdev)
 static int rtw89_usb_ops_mac_post_init(struct rtw89_dev *rtwdev)
 {
 	struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev);
+	const struct rtw89_usb_info *info = rtwusb->info;
 	enum usb_device_speed speed;
 	u32 ep;
 
-	rtw89_write32_clr(rtwdev, R_AX_USB3_MAC_NPI_CONFIG_INTF_0,
+	rtw89_write32_clr(rtwdev, info->usb3_mac_npi_config_intf_0,
 			  B_AX_SSPHY_LFPS_FILTER);
 
 	speed = rtwusb->udev->speed;
@@ -727,9 +728,9 @@ static int rtw89_usb_ops_mac_post_init(struct rtw89_dev *rtwdev)
 		if (ep == 8)
 			continue;
 
-		rtw89_write8_mask(rtwdev, R_AX_USB_ENDPOINT_0,
+		rtw89_write8_mask(rtwdev, info->usb_endpoint_0,
 				  B_AX_EP_IDX, ep);
-		rtw89_write8(rtwdev, R_AX_USB_ENDPOINT_2 + 1, NUMP);
+		rtw89_write8(rtwdev, info->usb_endpoint_2 + 1, NUMP);
 	}
 
 	return 0;
diff --git a/drivers/net/wireless/realtek/rtw89/usb.h b/drivers/net/wireless/realtek/rtw89/usb.h
index be3a9fbe42c0..32cdbf5128e4 100644
--- a/drivers/net/wireless/realtek/rtw89/usb.h
+++ b/drivers/net/wireless/realtek/rtw89/usb.h
@@ -24,6 +24,9 @@ struct rtw89_usb_info {
 	u32 usb_host_request_2;
 	u32 usb_wlan0_1;
 	u32 hci_func_en;
+	u32 usb3_mac_npi_config_intf_0;
+	u32 usb_endpoint_0;
+	u32 usb_endpoint_2;
 	u8 bulkout_id[RTW89_DMA_CH_NUM];
 };
 
-- 
2.51.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH rtw-next v4 06/12] wifi: rtw89: Fix rtw89_mac_dmac_func_pre_en_ax() for USB/SDIO
  2025-11-01 19:17 [PATCH rtw-next v4 00/12] wifi: rtw89: Add support for RTL8852CU Bitterblue Smith
                   ` (3 preceding siblings ...)
  2025-11-01 19:23 ` [PATCH rtw-next v4 05/12] wifi: rtw89: usb: Prepare rtw89_usb_ops_mac_post_init() " Bitterblue Smith
@ 2025-11-01 19:24 ` Bitterblue Smith
  2025-11-01 19:24 ` [PATCH rtw-next v4 07/12] wifi: rtw89: 8852c: Fix rtw8852c_pwr_{on,off}_func() for USB Bitterblue Smith
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-01 19:24 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

Set the DMA mode according to the interface type.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2:
 - No change, messed up sending v1.

v3:
 - Add Acked-by.

v4:
 - No change.
---
 drivers/net/wireless/realtek/rtw89/mac.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c
index df040b4e8855..b5309ae3fd57 100644
--- a/drivers/net/wireless/realtek/rtw89/mac.c
+++ b/drivers/net/wireless/realtek/rtw89/mac.c
@@ -3984,8 +3984,15 @@ static void rtw89_mac_dmac_func_pre_en_ax(struct rtw89_dev *rtwdev)
 
 	val = rtw89_read32(rtwdev, R_AX_HAXI_INIT_CFG1);
 	val &= ~(B_AX_DMA_MODE_MASK | B_AX_STOP_AXI_MST);
-	val |= FIELD_PREP(B_AX_DMA_MODE_MASK, DMA_MOD_PCIE_1B) |
-	       B_AX_TXHCI_EN_V1 | B_AX_RXHCI_EN_V1;
+	val |= B_AX_TXHCI_EN_V1 | B_AX_RXHCI_EN_V1;
+
+	if (rtwdev->hci.type == RTW89_HCI_TYPE_PCIE)
+		val |= FIELD_PREP(B_AX_DMA_MODE_MASK, DMA_MOD_PCIE_1B);
+	else if (rtwdev->hci.type == RTW89_HCI_TYPE_USB)
+		val |= FIELD_PREP(B_AX_DMA_MODE_MASK, DMA_MOD_USB);
+	else
+		val |= FIELD_PREP(B_AX_DMA_MODE_MASK, DMA_MOD_SDIO);
+
 	rtw89_write32(rtwdev, R_AX_HAXI_INIT_CFG1, val);
 
 	rtw89_write32_clr(rtwdev, R_AX_HAXI_DMA_STOP1,
-- 
2.51.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH rtw-next v4 07/12] wifi: rtw89: 8852c: Fix rtw8852c_pwr_{on,off}_func() for USB
  2025-11-01 19:17 [PATCH rtw-next v4 00/12] wifi: rtw89: Add support for RTL8852CU Bitterblue Smith
                   ` (4 preceding siblings ...)
  2025-11-01 19:24 ` [PATCH rtw-next v4 06/12] wifi: rtw89: Fix rtw89_mac_dmac_func_pre_en_ax() for USB/SDIO Bitterblue Smith
@ 2025-11-01 19:24 ` Bitterblue Smith
  2025-11-01 19:25 ` [PATCH rtw-next v4 08/12] wifi: rtw89: Add rtw8852c_dle_mem_usb{2,3} Bitterblue Smith
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-01 19:24 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

There are a few differences in the power on/off functions between PCIE
and USB. The changes in the power off function in particular are needed
for the RTL8832CU to be able to power on again after it's powered off.

While the RTL8832CU appears to work without the changes in the power on
function, it's probably best to implement them, in case they are needed
in some situations.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2:
 - No change, messed up sending v1.

v3:
 - Add Acked-by.

v4:
 - No change.
---
 drivers/net/wireless/realtek/rtw89/rtw8852c.c | 31 ++++++++++++++-----
 1 file changed, 24 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c.c b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
index ee1915307376..6aedbd03e3d4 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852c.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
@@ -214,7 +214,8 @@ static int rtw8852c_pwr_on_func(struct rtw89_dev *rtwdev)
 	int ret;
 
 	val32 = rtw89_read32_mask(rtwdev, R_AX_SYS_STATUS1, B_AX_PAD_HCI_SEL_V2_MASK);
-	if (val32 == MAC_AX_HCI_SEL_PCIE_USB)
+	if (val32 == MAC_AX_HCI_SEL_PCIE_USB ||
+	    rtwdev->hci.type == RTW89_HCI_TYPE_USB)
 		rtw89_write32_set(rtwdev, R_AX_LDO_AON_CTRL0, B_AX_PD_REGU_L);
 
 	rtw89_write32_clr(rtwdev, R_AX_SYS_PW_CTRL, B_AX_AFSM_WLSUS_EN |
@@ -246,7 +247,9 @@ static int rtw8852c_pwr_on_func(struct rtw89_dev *rtwdev)
 	rtw89_write8_clr(rtwdev, R_AX_PLATFORM_ENABLE, B_AX_PLATFORM_EN);
 
 	rtw89_write8_set(rtwdev, R_AX_PLATFORM_ENABLE, B_AX_PLATFORM_EN);
-	rtw89_write32_clr(rtwdev, R_AX_SYS_SDIO_CTRL, B_AX_PCIE_CALIB_EN_V1);
+
+	if (rtwdev->hci.type == RTW89_HCI_TYPE_PCIE)
+		rtw89_write32_clr(rtwdev, R_AX_SYS_SDIO_CTRL, B_AX_PCIE_CALIB_EN_V1);
 
 	rtw89_write32_clr(rtwdev, R_AX_SYS_ISO_CTRL_EXTEND, B_AX_CMAC1_FEN);
 	rtw89_write32_set(rtwdev, R_AX_SYS_ISO_CTRL_EXTEND, B_AX_R_SYM_ISO_CMAC12PP);
@@ -305,9 +308,11 @@ static int rtw8852c_pwr_on_func(struct rtw89_dev *rtwdev)
 
 	rtw89_write32_clr(rtwdev, R_AX_SYS_ISO_CTRL, B_AX_PWC_EV2EF_B14);
 	rtw89_write32_clr(rtwdev, R_AX_PMC_DBG_CTRL2, B_AX_SYSON_DIS_PMCR_AX_WRMSK);
-	rtw89_write32_set(rtwdev, R_AX_GPIO0_15_EECS_EESK_LED1_PULL_LOW_EN,
-			  B_AX_EECS_PULL_LOW_EN | B_AX_EESK_PULL_LOW_EN |
-			  B_AX_LED1_PULL_LOW_EN);
+
+	if (rtwdev->hci.type == RTW89_HCI_TYPE_PCIE)
+		rtw89_write32_set(rtwdev, R_AX_GPIO0_15_EECS_EESK_LED1_PULL_LOW_EN,
+				  B_AX_EECS_PULL_LOW_EN | B_AX_EESK_PULL_LOW_EN |
+				  B_AX_LED1_PULL_LOW_EN);
 
 	rtw89_write32_set(rtwdev, R_AX_DMAC_FUNC_EN,
 			  B_AX_MAC_FUNC_EN | B_AX_DMAC_FUNC_EN | B_AX_MPDU_PROC_EN |
@@ -385,12 +390,24 @@ static int rtw8852c_pwr_off_func(struct rtw89_dev *rtwdev)
 	if (ret)
 		return ret;
 
-	rtw89_write32(rtwdev, R_AX_WLLPS_CTRL, SW_LPS_OPTION);
+	if (rtwdev->hci.type == RTW89_HCI_TYPE_PCIE)
+		rtw89_write32(rtwdev, R_AX_WLLPS_CTRL, SW_LPS_OPTION);
+	else if (rtwdev->hci.type == RTW89_HCI_TYPE_USB)
+		rtw89_write32_clr(rtwdev, R_AX_SYS_PW_CTRL, B_AX_SOP_EDSWR);
+
 	rtw89_write32_set(rtwdev, R_AX_SYS_PW_CTRL, B_AX_XTAL_OFF_A_DIE);
 	rtw89_write32_set(rtwdev, R_AX_SYS_SWR_CTRL1, B_AX_SYM_CTRL_SPS_PWMFREQ);
 	rtw89_write32_mask(rtwdev, R_AX_SPS_DIG_ON_CTRL0,
 			   B_AX_REG_ZCDC_H_MASK, 0x3);
-	rtw89_write32_set(rtwdev, R_AX_SYS_PW_CTRL, B_AX_APFM_SWLPS);
+
+	if (rtwdev->hci.type == RTW89_HCI_TYPE_PCIE) {
+		rtw89_write32_set(rtwdev, R_AX_SYS_PW_CTRL, B_AX_APFM_SWLPS);
+	} else if (rtwdev->hci.type == RTW89_HCI_TYPE_USB) {
+		val32 = rtw89_read32(rtwdev, R_AX_SYS_PW_CTRL);
+		val32 &= ~B_AX_AFSM_PCIE_SUS_EN;
+		val32 |= B_AX_AFSM_WLSUS_EN;
+		rtw89_write32(rtwdev, R_AX_SYS_PW_CTRL, val32);
+	}
 
 	return 0;
 }
-- 
2.51.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH rtw-next v4 08/12] wifi: rtw89: Add rtw8852c_dle_mem_usb{2,3}
  2025-11-01 19:17 [PATCH rtw-next v4 00/12] wifi: rtw89: Add support for RTL8852CU Bitterblue Smith
                   ` (5 preceding siblings ...)
  2025-11-01 19:24 ` [PATCH rtw-next v4 07/12] wifi: rtw89: 8852c: Fix rtw8852c_pwr_{on,off}_func() for USB Bitterblue Smith
@ 2025-11-01 19:25 ` Bitterblue Smith
  2025-11-01 19:26 ` [PATCH rtw-next v4 09/12] wifi: rtw89: Add rtw8852c_hfc_param_ini_usb Bitterblue Smith
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-01 19:25 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

Add rtw8852c_dle_mem_usb2 and rtw8852c_dle_mem_usb3 and their various
quotas and sizes in struct rtw89_mac_size_set.

"dle" could be "Data Link Engine" or "Double Link Engine". These are
some parameters needed for RTL8852CU.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2:
 - No change, messed up sending v1.

v3:
 - Add Acked-by.

v4:
 - No change.
---
 drivers/net/wireless/realtek/rtw89/mac.c      | 20 ++++++++++++
 drivers/net/wireless/realtek/rtw89/mac.h      | 10 ++++++
 drivers/net/wireless/realtek/rtw89/rtw8852c.c | 31 ++++++++++++++++++-
 3 files changed, 60 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c
index b5309ae3fd57..bc39b4f7bc4f 100644
--- a/drivers/net/wireless/realtek/rtw89/mac.c
+++ b/drivers/net/wireless/realtek/rtw89/mac.c
@@ -1663,6 +1663,8 @@ const struct rtw89_mac_size_set rtw89_mac_size = {
 	.wde_size7 = {RTW89_WDE_PG_64, 510, 2,},
 	/* DLFW */
 	.wde_size9 = {RTW89_WDE_PG_64, 0, 1024,},
+	/* 8852C USB3.0 */
+	.wde_size17 = {RTW89_WDE_PG_64, 354, 30,},
 	/* 8852C DLFW */
 	.wde_size18 = {RTW89_WDE_PG_64, 0, 2048,},
 	/* 8852C PCIE SCC */
@@ -1670,6 +1672,8 @@ const struct rtw89_mac_size_set rtw89_mac_size = {
 	.wde_size23 = {RTW89_WDE_PG_64, 1022, 2,},
 	/* 8852B USB2.0/USB3.0 SCC */
 	.wde_size25 = {RTW89_WDE_PG_64, 162, 94,},
+	/* 8852C USB2.0 */
+	.wde_size31 = {RTW89_WDE_PG_64, 384, 0,},
 	/* PCIE */
 	.ple_size0 = {RTW89_PLE_PG_128, 1520, 16,},
 	.ple_size0_v1 = {RTW89_PLE_PG_128, 2688, 240, 212992,},
@@ -1681,6 +1685,8 @@ const struct rtw89_mac_size_set rtw89_mac_size = {
 	/* DLFW */
 	.ple_size8 = {RTW89_PLE_PG_128, 64, 960,},
 	.ple_size9 = {RTW89_PLE_PG_128, 2288, 16,},
+	/* 8852C USB */
+	.ple_size17 = {RTW89_PLE_PG_128, 3368, 24,},
 	/* 8852C DLFW */
 	.ple_size18 = {RTW89_PLE_PG_128, 2544, 16,},
 	/* 8852C PCIE SCC */
@@ -1689,6 +1695,8 @@ const struct rtw89_mac_size_set rtw89_mac_size = {
 	.ple_size32 = {RTW89_PLE_PG_128, 620, 20,},
 	/* 8852B USB3.0 SCC */
 	.ple_size33 = {RTW89_PLE_PG_128, 632, 8,},
+	/* 8852C USB2.0 */
+	.ple_size34 = {RTW89_PLE_PG_128, 3374, 18,},
 	/* PCIE 64 */
 	.wde_qt0 = {3792, 196, 0, 107,},
 	.wde_qt0_v1 = {3302, 6, 0, 20,},
@@ -1698,6 +1706,8 @@ const struct rtw89_mac_size_set rtw89_mac_size = {
 	.wde_qt6 = {448, 48, 0, 16,},
 	/* 8852B PCIE SCC */
 	.wde_qt7 = {446, 48, 0, 16,},
+	/* 8852C USB3.0 */
+	.wde_qt16 = {344, 2, 0, 8,},
 	/* 8852C DLFW */
 	.wde_qt17 = {0, 0, 0,  0,},
 	/* 8852C PCIE SCC */
@@ -1705,6 +1715,8 @@ const struct rtw89_mac_size_set rtw89_mac_size = {
 	.wde_qt23 = {958, 48, 0, 16,},
 	/* 8852B USB2.0/USB3.0 SCC */
 	.wde_qt25 = {152, 2, 0, 8,},
+	/* 8852C USB2.0 */
+	.wde_qt31 = {338, 6, 0, 40,},
 	.ple_qt0 = {320, 320, 32, 16, 13, 13, 292, 292, 64, 18, 1, 4, 0,},
 	.ple_qt1 = {320, 320, 32, 16, 1316, 1316, 1595, 1595, 1367, 1321, 1, 1307, 0,},
 	/* PCIE SCC */
@@ -1716,6 +1728,10 @@ const struct rtw89_mac_size_set rtw89_mac_size = {
 	.ple_qt13 = {0, 0, 16, 48, 0, 0, 0, 0, 0, 0, 0,},
 	/* PCIE 64 */
 	.ple_qt18 = {147, 0, 16, 20, 17, 13, 89, 0, 32, 14, 8, 0,},
+	/* USB 52C USB3.0 */
+	.ple_qt42 = {1068, 0, 16, 48, 4, 13, 178, 0, 16, 1, 8, 16, 0,},
+	/* USB 52C USB3.0 */
+	.ple_qt43 = {3068, 0, 32, 48, 4, 13, 178, 0, 16, 1, 8, 16, 0,},
 	/* DLFW 52C */
 	.ple_qt44 = {0, 0, 16, 256, 0, 0, 0, 0, 0, 0, 0, 0,},
 	/* DLFW 52C */
@@ -1735,6 +1751,10 @@ const struct rtw89_mac_size_set rtw89_mac_size = {
 	/* USB3.0 52B 92K */
 	.ple_qt74 = {286, 0, 16, 48, 4, 13, 178, 0, 32, 14, 8, 0, 0,},
 	.ple_qt75 = {286, 0, 32, 48, 37, 13, 211, 0, 65, 14, 24, 0, 0,},
+	/* USB2.0 52C */
+	.ple_qt78 = {1560, 0, 16, 48, 13, 13, 390, 0, 32, 38, 8, 16, 0,},
+	/* USB2.0 52C */
+	.ple_qt79 = {1560, 0, 32, 48, 1253, 13, 1630, 0, 1272, 38, 120, 1256, 0,},
 	/* 8852A PCIE WOW */
 	.ple_qt_52a_wow = {264, 0, 32, 20, 64, 13, 1005, 0, 64, 128, 120,},
 	/* 8852B PCIE WOW */
diff --git a/drivers/net/wireless/realtek/rtw89/mac.h b/drivers/net/wireless/realtek/rtw89/mac.h
index 25fe5e5c8a97..46302f4aa3d9 100644
--- a/drivers/net/wireless/realtek/rtw89/mac.h
+++ b/drivers/net/wireless/realtek/rtw89/mac.h
@@ -923,10 +923,12 @@ struct rtw89_mac_size_set {
 	const struct rtw89_dle_size wde_size6;
 	const struct rtw89_dle_size wde_size7;
 	const struct rtw89_dle_size wde_size9;
+	const struct rtw89_dle_size wde_size17;
 	const struct rtw89_dle_size wde_size18;
 	const struct rtw89_dle_size wde_size19;
 	const struct rtw89_dle_size wde_size23;
 	const struct rtw89_dle_size wde_size25;
+	const struct rtw89_dle_size wde_size31;
 	const struct rtw89_dle_size ple_size0;
 	const struct rtw89_dle_size ple_size0_v1;
 	const struct rtw89_dle_size ple_size3_v1;
@@ -934,19 +936,23 @@ struct rtw89_mac_size_set {
 	const struct rtw89_dle_size ple_size6;
 	const struct rtw89_dle_size ple_size8;
 	const struct rtw89_dle_size ple_size9;
+	const struct rtw89_dle_size ple_size17;
 	const struct rtw89_dle_size ple_size18;
 	const struct rtw89_dle_size ple_size19;
 	const struct rtw89_dle_size ple_size32;
 	const struct rtw89_dle_size ple_size33;
+	const struct rtw89_dle_size ple_size34;
 	const struct rtw89_wde_quota wde_qt0;
 	const struct rtw89_wde_quota wde_qt0_v1;
 	const struct rtw89_wde_quota wde_qt4;
 	const struct rtw89_wde_quota wde_qt6;
 	const struct rtw89_wde_quota wde_qt7;
+	const struct rtw89_wde_quota wde_qt16;
 	const struct rtw89_wde_quota wde_qt17;
 	const struct rtw89_wde_quota wde_qt18;
 	const struct rtw89_wde_quota wde_qt23;
 	const struct rtw89_wde_quota wde_qt25;
+	const struct rtw89_wde_quota wde_qt31;
 	const struct rtw89_ple_quota ple_qt0;
 	const struct rtw89_ple_quota ple_qt1;
 	const struct rtw89_ple_quota ple_qt4;
@@ -954,6 +960,8 @@ struct rtw89_mac_size_set {
 	const struct rtw89_ple_quota ple_qt9;
 	const struct rtw89_ple_quota ple_qt13;
 	const struct rtw89_ple_quota ple_qt18;
+	const struct rtw89_ple_quota ple_qt42;
+	const struct rtw89_ple_quota ple_qt43;
 	const struct rtw89_ple_quota ple_qt44;
 	const struct rtw89_ple_quota ple_qt45;
 	const struct rtw89_ple_quota ple_qt46;
@@ -965,6 +973,8 @@ struct rtw89_mac_size_set {
 	const struct rtw89_ple_quota ple_qt73;
 	const struct rtw89_ple_quota ple_qt74;
 	const struct rtw89_ple_quota ple_qt75;
+	const struct rtw89_ple_quota ple_qt78;
+	const struct rtw89_ple_quota ple_qt79;
 	const struct rtw89_ple_quota ple_qt_52a_wow;
 	const struct rtw89_ple_quota ple_qt_52b_wow;
 	const struct rtw89_ple_quota ple_qt_52bt_wow;
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c.c b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
index 6aedbd03e3d4..651ef96d143a 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852c.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
@@ -64,6 +64,32 @@ static const struct rtw89_dle_mem rtw8852c_dle_mem_pcie[] = {
 			       NULL},
 };
 
+static const struct rtw89_dle_mem rtw8852c_dle_mem_usb2[] = {
+	[RTW89_QTA_SCC] = {RTW89_QTA_SCC, &rtw89_mac_size.wde_size31,
+			   &rtw89_mac_size.ple_size34, &rtw89_mac_size.wde_qt31,
+			   &rtw89_mac_size.wde_qt31, &rtw89_mac_size.ple_qt78,
+			   &rtw89_mac_size.ple_qt79},
+	[RTW89_QTA_DLFW] = {RTW89_QTA_DLFW, &rtw89_mac_size.wde_size18,
+			    &rtw89_mac_size.ple_size18, &rtw89_mac_size.wde_qt17,
+			    &rtw89_mac_size.wde_qt17, &rtw89_mac_size.ple_qt44,
+			    &rtw89_mac_size.ple_qt45},
+	[RTW89_QTA_INVALID] = {RTW89_QTA_INVALID, NULL, NULL, NULL, NULL, NULL,
+			       NULL},
+};
+
+static const struct rtw89_dle_mem rtw8852c_dle_mem_usb3[] = {
+	[RTW89_QTA_SCC] = {RTW89_QTA_SCC, &rtw89_mac_size.wde_size17,
+			   &rtw89_mac_size.ple_size17, &rtw89_mac_size.wde_qt16,
+			   &rtw89_mac_size.wde_qt16, &rtw89_mac_size.ple_qt42,
+			   &rtw89_mac_size.ple_qt43},
+	[RTW89_QTA_DLFW] = {RTW89_QTA_DLFW, &rtw89_mac_size.wde_size18,
+			    &rtw89_mac_size.ple_size18, &rtw89_mac_size.wde_qt17,
+			    &rtw89_mac_size.wde_qt17, &rtw89_mac_size.ple_qt44,
+			    &rtw89_mac_size.ple_qt45},
+	[RTW89_QTA_INVALID] = {RTW89_QTA_INVALID, NULL, NULL, NULL, NULL, NULL,
+			       NULL},
+};
+
 static const u32 rtw8852c_h2c_regs[RTW89_H2CREG_MAX] = {
 	R_AX_H2CREG_DATA0_V1, R_AX_H2CREG_DATA1_V1, R_AX_H2CREG_DATA2_V1,
 	R_AX_H2CREG_DATA3_V1
@@ -3026,7 +3052,10 @@ const struct rtw89_chip_info rtw8852c_chip_info = {
 	.dis_2g_40m_ul_ofdma	= false,
 	.rsvd_ple_ofst		= 0x6f800,
 	.hfc_param_ini		= {rtw8852c_hfc_param_ini_pcie, NULL, NULL},
-	.dle_mem		= {rtw8852c_dle_mem_pcie, NULL, NULL, NULL},
+	.dle_mem		= {rtw8852c_dle_mem_pcie,
+				   rtw8852c_dle_mem_usb2,
+				   rtw8852c_dle_mem_usb3,
+				   NULL},
 	.wde_qempty_acq_grpnum	= 16,
 	.wde_qempty_mgq_grpsel	= 16,
 	.rf_base_addr		= {0xe000, 0xf000},
-- 
2.51.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH rtw-next v4 09/12] wifi: rtw89: Add rtw8852c_hfc_param_ini_usb
  2025-11-01 19:17 [PATCH rtw-next v4 00/12] wifi: rtw89: Add support for RTL8852CU Bitterblue Smith
                   ` (6 preceding siblings ...)
  2025-11-01 19:25 ` [PATCH rtw-next v4 08/12] wifi: rtw89: Add rtw8852c_dle_mem_usb{2,3} Bitterblue Smith
@ 2025-11-01 19:26 ` Bitterblue Smith
  2025-11-03  0:48   ` Ping-Ke Shih
  2025-11-01 19:27 ` [PATCH rtw-next v4 10/12] wifi: rtw89: 8852c: Accept USB devices and load their MAC address Bitterblue Smith
                   ` (2 subsequent siblings)
  10 siblings, 1 reply; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-01 19:26 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

"hfc" means "hci fc" which is "Host Control Interface Flow Control".
These are some parameters needed for RTL8852CU.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
---
v2:
 - No change, messed up sending v1.

v3:
 - Add Acked-by.

v4:
 - Change WP CH 0-11 pre-cost from 48 to 146, as recommended by the
   experts, to fix one of the two problems causing disconnection.
 - Remove Acked-by.
---
 drivers/net/wireless/realtek/rtw89/rtw8852c.c | 46 ++++++++++++++++++-
 1 file changed, 45 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c.c b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
index 651ef96d143a..10e3963b692c 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852c.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
@@ -51,6 +51,48 @@ static const struct rtw89_hfc_param_ini rtw8852c_hfc_param_ini_pcie[] = {
 	[RTW89_QTA_INVALID] = {NULL},
 };
 
+static const struct rtw89_hfc_ch_cfg rtw8852c_hfc_chcfg_usb[] = {
+	{18, 344, grp_0}, /* ACH 0 */
+	{0, 0, grp_0}, /* ACH 1 */
+	{18, 344, grp_0}, /* ACH 2 */
+	{0, 0, grp_0}, /* ACH 3 */
+	{18, 344, grp_0}, /* ACH 4 */
+	{0, 0, grp_0}, /* ACH 5 */
+	{18, 344, grp_0}, /* ACH 6 */
+	{0, 0, grp_0}, /* ACH 7 */
+	{18, 344, grp_0}, /* B0MGQ */
+	{0, 0, grp_0}, /* B0HIQ */
+	{18, 344, grp_0}, /* B1MGQ */
+	{0, 0, grp_0}, /* B1HIQ */
+	{0, 0, 0} /* FWCMDQ */
+};
+
+static const struct rtw89_hfc_pub_cfg rtw8852c_hfc_pubcfg_usb = {
+	344, /* Group 0 */
+	0, /* Group 1 */
+	344, /* Public Max */
+	0 /* WP threshold */
+};
+
+static const struct rtw89_hfc_prec_cfg rtw8852c_hfc_preccfg_usb = {
+	9, /* CH 0-11 pre-cost */
+	32, /* H2C pre-cost */
+	146, /* WP CH 0-7 pre-cost */
+	146, /* WP CH 8-11 pre-cost */
+	1, /* CH 0-11 full condition */
+	1, /* H2C full condition */
+	1, /* WP CH 0-7 full condition */
+	1, /* WP CH 8-11 full condition */
+};
+
+static const struct rtw89_hfc_param_ini rtw8852c_hfc_param_ini_usb[] = {
+	[RTW89_QTA_SCC] = {rtw8852c_hfc_chcfg_usb, &rtw8852c_hfc_pubcfg_usb,
+			   &rtw8852c_hfc_preccfg_usb, RTW89_HCIFC_STF},
+	[RTW89_QTA_DLFW] = {NULL, NULL,
+			    &rtw8852c_hfc_preccfg_usb, RTW89_HCIFC_STF},
+	[RTW89_QTA_INVALID] = {NULL},
+};
+
 static const struct rtw89_dle_mem rtw8852c_dle_mem_pcie[] = {
 	[RTW89_QTA_SCC] = {RTW89_QTA_SCC, &rtw89_mac_size.wde_size19,
 			   &rtw89_mac_size.ple_size19, &rtw89_mac_size.wde_qt18,
@@ -3051,7 +3093,9 @@ const struct rtw89_chip_info rtw8852c_chip_info = {
 	.max_amsdu_limit	= 8000,
 	.dis_2g_40m_ul_ofdma	= false,
 	.rsvd_ple_ofst		= 0x6f800,
-	.hfc_param_ini		= {rtw8852c_hfc_param_ini_pcie, NULL, NULL},
+	.hfc_param_ini		= {rtw8852c_hfc_param_ini_pcie,
+				   rtw8852c_hfc_param_ini_usb,
+				   NULL},
 	.dle_mem		= {rtw8852c_dle_mem_pcie,
 				   rtw8852c_dle_mem_usb2,
 				   rtw8852c_dle_mem_usb3,
-- 
2.51.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH rtw-next v4 10/12] wifi: rtw89: 8852c: Accept USB devices and load their MAC address
  2025-11-01 19:17 [PATCH rtw-next v4 00/12] wifi: rtw89: Add support for RTL8852CU Bitterblue Smith
                   ` (7 preceding siblings ...)
  2025-11-01 19:26 ` [PATCH rtw-next v4 09/12] wifi: rtw89: Add rtw8852c_hfc_param_ini_usb Bitterblue Smith
@ 2025-11-01 19:27 ` Bitterblue Smith
  2025-11-01 19:27 ` [PATCH rtw-next v4 11/12] wifi: rtw89: Add rtw8852cu.c Bitterblue Smith
  2025-11-01 19:28 ` [PATCH rtw-next v4 12/12] wifi: rtw89: Enable the new rtw89_8852cu module Bitterblue Smith
  10 siblings, 0 replies; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-01 19:27 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

Make rtw8852c_read_efuse() accept USB devices and load the MAC
address from the correct offset.

Also fix the offset of the MAC address because it was wrong.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2:
 - No change, messed up sending v1.

v3:
 - Add Acked-by.

v4:
 - No change.
---
 drivers/net/wireless/realtek/rtw89/rtw8852c.c | 16 +++++++---------
 drivers/net/wireless/realtek/rtw89/rtw8852c.h |  2 +-
 2 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c.c b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
index 10e3963b692c..8550ae3bcb64 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852c.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
@@ -480,14 +480,6 @@ static int rtw8852c_pwr_off_func(struct rtw89_dev *rtwdev)
 	return 0;
 }
 
-static void rtw8852c_e_efuse_parsing(struct rtw89_efuse *efuse,
-				     struct rtw8852c_efuse *map)
-{
-	ether_addr_copy(efuse->addr, map->e.mac_addr);
-	efuse->rfe_type = map->rfe_type;
-	efuse->xtal_cap = map->xtal_k;
-}
-
 static void rtw8852c_efuse_parsing_tssi(struct rtw89_dev *rtwdev,
 					struct rtw8852c_efuse *map)
 {
@@ -596,12 +588,18 @@ static int rtw8852c_read_efuse(struct rtw89_dev *rtwdev, u8 *log_map,
 
 	switch (rtwdev->hci.type) {
 	case RTW89_HCI_TYPE_PCIE:
-		rtw8852c_e_efuse_parsing(efuse, map);
+		ether_addr_copy(efuse->addr, map->e.mac_addr);
+		break;
+	case RTW89_HCI_TYPE_USB:
+		ether_addr_copy(efuse->addr, map->u.mac_addr);
 		break;
 	default:
 		return -ENOTSUPP;
 	}
 
+	efuse->rfe_type = map->rfe_type;
+	efuse->xtal_cap = map->xtal_k;
+
 	rtw89_info(rtwdev, "chip rfe_type is %d\n", efuse->rfe_type);
 
 	return 0;
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c.h b/drivers/net/wireless/realtek/rtw89/rtw8852c.h
index 77b05daedd10..8585921ac6c4 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852c.h
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852c.h
@@ -11,7 +11,7 @@
 #define BB_PATH_NUM_8852C 2
 
 struct rtw8852c_u_efuse {
-	u8 rsvd[0x38];
+	u8 rsvd[0x88];
 	u8 mac_addr[ETH_ALEN];
 };
 
-- 
2.51.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH rtw-next v4 11/12] wifi: rtw89: Add rtw8852cu.c
  2025-11-01 19:17 [PATCH rtw-next v4 00/12] wifi: rtw89: Add support for RTL8852CU Bitterblue Smith
                   ` (8 preceding siblings ...)
  2025-11-01 19:27 ` [PATCH rtw-next v4 10/12] wifi: rtw89: 8852c: Accept USB devices and load their MAC address Bitterblue Smith
@ 2025-11-01 19:27 ` Bitterblue Smith
  2025-11-01 19:28 ` [PATCH rtw-next v4 12/12] wifi: rtw89: Enable the new rtw89_8852cu module Bitterblue Smith
  10 siblings, 0 replies; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-01 19:27 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

This is the entry point for the new rtw89_8852cu module.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2:
 - No change, messed up sending v1.

v3:
 - Add Acked-by.

v4:
 - No change.
---
 .../net/wireless/realtek/rtw89/rtw8852cu.c    | 69 +++++++++++++++++++
 1 file changed, 69 insertions(+)
 create mode 100644 drivers/net/wireless/realtek/rtw89/rtw8852cu.c

diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852cu.c b/drivers/net/wireless/realtek/rtw89/rtw8852cu.c
new file mode 100644
index 000000000000..2708b523ca14
--- /dev/null
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852cu.c
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+/* Copyright(c) 2025  Realtek Corporation
+ */
+
+#include <linux/module.h>
+#include <linux/usb.h>
+#include "rtw8852c.h"
+#include "reg.h"
+#include "usb.h"
+
+static const struct rtw89_usb_info rtw8852c_usb_info = {
+	.usb_host_request_2		= R_AX_USB_HOST_REQUEST_2_V1,
+	.usb_wlan0_1			= R_AX_USB_WLAN0_1_V1,
+	.hci_func_en			= R_AX_HCI_FUNC_EN_V1,
+	.usb3_mac_npi_config_intf_0	= R_AX_USB3_MAC_NPI_CONFIG_INTF_0_V1,
+	.usb_endpoint_0			= R_AX_USB_ENDPOINT_0_V1,
+	.usb_endpoint_2			= R_AX_USB_ENDPOINT_2_V1,
+	.bulkout_id = {
+		[RTW89_DMA_ACH0] = 3,
+		[RTW89_DMA_ACH2] = 5,
+		[RTW89_DMA_ACH4] = 4,
+		[RTW89_DMA_ACH6] = 6,
+		[RTW89_DMA_B0MG] = 0,
+		[RTW89_DMA_B0HI] = 0,
+		[RTW89_DMA_B1MG] = 1,
+		[RTW89_DMA_B1HI] = 1,
+		[RTW89_DMA_H2C] = 2,
+	},
+};
+
+static const struct rtw89_driver_info rtw89_8852cu_info = {
+	.chip = &rtw8852c_chip_info,
+	.variant = NULL,
+	.quirks = NULL,
+	.bus = {
+		.usb = &rtw8852c_usb_info,
+	},
+};
+
+static const struct usb_device_id rtw_8852cu_id_table[] = {
+	{ USB_DEVICE_AND_INTERFACE_INFO(0x0bda, 0xc832, 0xff, 0xff, 0xff),
+	  .driver_info = (kernel_ulong_t)&rtw89_8852cu_info },
+	{ USB_DEVICE_AND_INTERFACE_INFO(0x0bda, 0xc85a, 0xff, 0xff, 0xff),
+	  .driver_info = (kernel_ulong_t)&rtw89_8852cu_info },
+	{ USB_DEVICE_AND_INTERFACE_INFO(0x0bda, 0xc85d, 0xff, 0xff, 0xff),
+	  .driver_info = (kernel_ulong_t)&rtw89_8852cu_info },
+	{ USB_DEVICE_AND_INTERFACE_INFO(0x0db0, 0x991d, 0xff, 0xff, 0xff),
+	  .driver_info = (kernel_ulong_t)&rtw89_8852cu_info },
+	{ USB_DEVICE_AND_INTERFACE_INFO(0x35b2, 0x0502, 0xff, 0xff, 0xff),
+	  .driver_info = (kernel_ulong_t)&rtw89_8852cu_info },
+	{ USB_DEVICE_AND_INTERFACE_INFO(0x35bc, 0x0101, 0xff, 0xff, 0xff),
+	  .driver_info = (kernel_ulong_t)&rtw89_8852cu_info },
+	{ USB_DEVICE_AND_INTERFACE_INFO(0x35bc, 0x0102, 0xff, 0xff, 0xff),
+	  .driver_info = (kernel_ulong_t)&rtw89_8852cu_info },
+	{},
+};
+MODULE_DEVICE_TABLE(usb, rtw_8852cu_id_table);
+
+static struct usb_driver rtw_8852cu_driver = {
+	.name = KBUILD_MODNAME,
+	.id_table = rtw_8852cu_id_table,
+	.probe = rtw89_usb_probe,
+	.disconnect = rtw89_usb_disconnect,
+};
+module_usb_driver(rtw_8852cu_driver);
+
+MODULE_AUTHOR("Bitterblue Smith <rtl8821cerfe2@gmail.com>");
+MODULE_DESCRIPTION("Realtek 802.11ax wireless 8852CU driver");
+MODULE_LICENSE("Dual BSD/GPL");
-- 
2.51.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH rtw-next v4 12/12] wifi: rtw89: Enable the new rtw89_8852cu module
  2025-11-01 19:17 [PATCH rtw-next v4 00/12] wifi: rtw89: Add support for RTL8852CU Bitterblue Smith
                   ` (9 preceding siblings ...)
  2025-11-01 19:27 ` [PATCH rtw-next v4 11/12] wifi: rtw89: Add rtw8852cu.c Bitterblue Smith
@ 2025-11-01 19:28 ` Bitterblue Smith
  10 siblings, 0 replies; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-01 19:28 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

Tested mostly in station mode, and a little bit in AP mode.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2:
 - No change, messed up sending v1.

v3:
 - Add Acked-by.

v4:
 - No change.
---
 drivers/net/wireless/realtek/rtw89/Kconfig  | 11 +++++++++++
 drivers/net/wireless/realtek/rtw89/Makefile |  3 +++
 2 files changed, 14 insertions(+)

diff --git a/drivers/net/wireless/realtek/rtw89/Kconfig b/drivers/net/wireless/realtek/rtw89/Kconfig
index 4288c30b400a..e89f7481475a 100644
--- a/drivers/net/wireless/realtek/rtw89/Kconfig
+++ b/drivers/net/wireless/realtek/rtw89/Kconfig
@@ -121,6 +121,17 @@ config RTW89_8852CE
 
 	  802.11ax PCIe wireless network (Wi-Fi 6E) adapter
 
+config RTW89_8852CU
+	tristate "Realtek 8852CU USB wireless network (Wi-Fi 6E) adapter"
+	depends on USB
+	select RTW89_CORE
+	select RTW89_USB
+	select RTW89_8852C
+	help
+	  Select this option will enable support for 8852CU chipset
+
+	  802.11ax USB wireless network (Wi-Fi 6E) adapter
+
 config RTW89_8922AE
 	tristate "Realtek 8922AE/8922AE-VS PCI wireless network (Wi-Fi 7) adapter"
 	depends on PCI
diff --git a/drivers/net/wireless/realtek/rtw89/Makefile b/drivers/net/wireless/realtek/rtw89/Makefile
index 23e43c444f69..e0d21972e57c 100644
--- a/drivers/net/wireless/realtek/rtw89/Makefile
+++ b/drivers/net/wireless/realtek/rtw89/Makefile
@@ -75,6 +75,9 @@ rtw89_8852c-objs := rtw8852c.o \
 obj-$(CONFIG_RTW89_8852CE) += rtw89_8852ce.o
 rtw89_8852ce-objs := rtw8852ce.o
 
+obj-$(CONFIG_RTW89_8852CU) += rtw89_8852cu.o
+rtw89_8852cu-objs := rtw8852cu.o
+
 obj-$(CONFIG_RTW89_8922A) += rtw89_8922a.o
 rtw89_8922a-objs := rtw8922a.o \
 		    rtw8922a_rfk.o
-- 
2.51.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* RE: [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode
  2025-11-01 19:19 ` [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode Bitterblue Smith
  2025-11-01 19:20   ` [PATCH rtw-next v4 02/12] wifi: rtw89: Add rtw89_core_get_ch_dma_v2() Bitterblue Smith
@ 2025-11-03  0:47   ` Ping-Ke Shih
  2025-11-03 11:24     ` Bitterblue Smith
  2025-11-04  1:53   ` Ping-Ke Shih
  2 siblings, 1 reply; 17+ messages in thread
From: Ping-Ke Shih @ 2025-11-03  0:47 UTC (permalink / raw)
  To: Bitterblue Smith, linux-wireless@vger.kernel.org

Bitterblue Smith <rtl8821cerfe2@gmail.com> wrote:
> From: Ping-Ke Shih <pkshih@realtek.com>
> 
> The TX partial mode in USB devices will cause timeout to wait for payload,
> causing SER 0x999 and disconnection. Turn off this mode according to
> design suggestion.
> 
> rtw89_8852cu 2-4:1.0: FW status = 0xee001108
> rtw89_8852cu 2-4:1.0: FW BADADDR = 0x18605fc8
> rtw89_8852cu 2-4:1.0: FW EPC/RA = 0x0
> rtw89_8852cu 2-4:1.0: FW MISC = 0x1010000
> rtw89_8852cu 2-4:1.0: R_AX_HALT_C2H = 0x999
> rtw89_8852cu 2-4:1.0: R_AX_SER_DBG_INFO = 0x71020010
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f554
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f556
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: --->
> err=0x999
> rtw89_8852cu 2-4:1.0: R_AX_SER_DBG_INFO =0x71020010
> rtw89_8852cu 2-4:1.0: R_AX_SER_DBG_INFO =0x71020010
> rtw89_8852cu 2-4:1.0: DBG Counter 1 (R_AX_DRV_FW_HSK_4)=0x00000000
> rtw89_8852cu 2-4:1.0: DBG Counter 2 (R_AX_DRV_FW_HSK_5)=0x00000000
> rtw89_8852cu 2-4:1.0: R_AX_DMAC_ERR_ISR=0x00000000
> rtw89_8852cu 2-4:1.0: R_AX_DMAC_ERR_IMR=0x00000000
> rtw89_8852cu 2-4:1.0: R_AX_CMAC_ERR_ISR [0]=0x00000000
> rtw89_8852cu 2-4:1.0: R_AX_CMAC_FUNC_EN [0]=0xf000803f
> rtw89_8852cu 2-4:1.0: R_AX_CK_EN [0]=0xffffffff
> rtw89_8852cu 2-4:1.0: R_AX_CMAC_ERR_IMR [0]=0x00000000
> rtw89_8852cu 2-4:1.0: [CMAC] : CMAC1 not enabled
> 
> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>

Though this patch is from me, but I think you did some cosmetic and agree
this patch, so I'd add

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>

Is it okay to you?


^ permalink raw reply	[flat|nested] 17+ messages in thread

* RE: [PATCH rtw-next v4 09/12] wifi: rtw89: Add rtw8852c_hfc_param_ini_usb
  2025-11-01 19:26 ` [PATCH rtw-next v4 09/12] wifi: rtw89: Add rtw8852c_hfc_param_ini_usb Bitterblue Smith
@ 2025-11-03  0:48   ` Ping-Ke Shih
  0 siblings, 0 replies; 17+ messages in thread
From: Ping-Ke Shih @ 2025-11-03  0:48 UTC (permalink / raw)
  To: Bitterblue Smith, linux-wireless@vger.kernel.org

Bitterblue Smith <rtl8821cerfe2@gmail.com> wrote:
> "hfc" means "hci fc" which is "Host Control Interface Flow Control".
> These are some parameters needed for RTL8852CU.
> 
> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>

Acked-by: Ping-Ke Shih <pkshih@realtek.com>



^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode
  2025-11-03  0:47   ` [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode Ping-Ke Shih
@ 2025-11-03 11:24     ` Bitterblue Smith
  0 siblings, 0 replies; 17+ messages in thread
From: Bitterblue Smith @ 2025-11-03 11:24 UTC (permalink / raw)
  To: Ping-Ke Shih, linux-wireless@vger.kernel.org

On 03/11/2025 02:47, Ping-Ke Shih wrote:
> Bitterblue Smith <rtl8821cerfe2@gmail.com> wrote:
>> From: Ping-Ke Shih <pkshih@realtek.com>
>>
>> The TX partial mode in USB devices will cause timeout to wait for payload,
>> causing SER 0x999 and disconnection. Turn off this mode according to
>> design suggestion.
>>
>> rtw89_8852cu 2-4:1.0: FW status = 0xee001108
>> rtw89_8852cu 2-4:1.0: FW BADADDR = 0x18605fc8
>> rtw89_8852cu 2-4:1.0: FW EPC/RA = 0x0
>> rtw89_8852cu 2-4:1.0: FW MISC = 0x1010000
>> rtw89_8852cu 2-4:1.0: R_AX_HALT_C2H = 0x999
>> rtw89_8852cu 2-4:1.0: R_AX_SER_DBG_INFO = 0x71020010
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f554
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f556
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
>> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
>> rtw89_8852cu 2-4:1.0: --->
>> err=0x999
>> rtw89_8852cu 2-4:1.0: R_AX_SER_DBG_INFO =0x71020010
>> rtw89_8852cu 2-4:1.0: R_AX_SER_DBG_INFO =0x71020010
>> rtw89_8852cu 2-4:1.0: DBG Counter 1 (R_AX_DRV_FW_HSK_4)=0x00000000
>> rtw89_8852cu 2-4:1.0: DBG Counter 2 (R_AX_DRV_FW_HSK_5)=0x00000000
>> rtw89_8852cu 2-4:1.0: R_AX_DMAC_ERR_ISR=0x00000000
>> rtw89_8852cu 2-4:1.0: R_AX_DMAC_ERR_IMR=0x00000000
>> rtw89_8852cu 2-4:1.0: R_AX_CMAC_ERR_ISR [0]=0x00000000
>> rtw89_8852cu 2-4:1.0: R_AX_CMAC_FUNC_EN [0]=0xf000803f
>> rtw89_8852cu 2-4:1.0: R_AX_CK_EN [0]=0xffffffff
>> rtw89_8852cu 2-4:1.0: R_AX_CMAC_ERR_IMR [0]=0x00000000
>> rtw89_8852cu 2-4:1.0: [CMAC] : CMAC1 not enabled
>>
>> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
> 
> Though this patch is from me, but I think you did some cosmetic and agree
> this patch, so I'd add
> 
> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
> 
> Is it okay to you?
> 

Yes, it's okay. I only added the output from dmesg.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode
  2025-11-01 19:19 ` [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode Bitterblue Smith
  2025-11-01 19:20   ` [PATCH rtw-next v4 02/12] wifi: rtw89: Add rtw89_core_get_ch_dma_v2() Bitterblue Smith
  2025-11-03  0:47   ` [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode Ping-Ke Shih
@ 2025-11-04  1:53   ` Ping-Ke Shih
  2 siblings, 0 replies; 17+ messages in thread
From: Ping-Ke Shih @ 2025-11-04  1:53 UTC (permalink / raw)
  To: Bitterblue Smith, linux-wireless@vger.kernel.org; +Cc: Ping-Ke Shih

Bitterblue Smith <rtl8821cerfe2@gmail.com> wrote:

> From: Ping-Ke Shih <pkshih@realtek.com>
> 
> The TX partial mode in USB devices will cause timeout to wait for payload,
> causing SER 0x999 and disconnection. Turn off this mode according to
> design suggestion.
> 
> rtw89_8852cu 2-4:1.0: FW status = 0xee001108
> rtw89_8852cu 2-4:1.0: FW BADADDR = 0x18605fc8
> rtw89_8852cu 2-4:1.0: FW EPC/RA = 0x0
> rtw89_8852cu 2-4:1.0: FW MISC = 0x1010000
> rtw89_8852cu 2-4:1.0: R_AX_HALT_C2H = 0x999
> rtw89_8852cu 2-4:1.0: R_AX_SER_DBG_INFO = 0x71020010
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f554
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f556
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55a
> rtw89_8852cu 2-4:1.0: [ERR]fw PC = 0x2013f55e
> rtw89_8852cu 2-4:1.0: --->
> err=0x999
> rtw89_8852cu 2-4:1.0: R_AX_SER_DBG_INFO =0x71020010
> rtw89_8852cu 2-4:1.0: R_AX_SER_DBG_INFO =0x71020010
> rtw89_8852cu 2-4:1.0: DBG Counter 1 (R_AX_DRV_FW_HSK_4)=0x00000000
> rtw89_8852cu 2-4:1.0: DBG Counter 2 (R_AX_DRV_FW_HSK_5)=0x00000000
> rtw89_8852cu 2-4:1.0: R_AX_DMAC_ERR_ISR=0x00000000
> rtw89_8852cu 2-4:1.0: R_AX_DMAC_ERR_IMR=0x00000000
> rtw89_8852cu 2-4:1.0: R_AX_CMAC_ERR_ISR [0]=0x00000000
> rtw89_8852cu 2-4:1.0: R_AX_CMAC_FUNC_EN [0]=0xf000803f
> rtw89_8852cu 2-4:1.0: R_AX_CK_EN [0]=0xffffffff
> rtw89_8852cu 2-4:1.0: R_AX_CMAC_ERR_IMR [0]=0x00000000
> rtw89_8852cu 2-4:1.0: [CMAC] : CMAC1 not enabled
> 
> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>

12 patch(es) applied to rtw-next branch of rtw.git, thanks.

030b8d5878e8 wifi: rtw89: 8832cu: turn off TX partial mode
89acd6c49322 wifi: rtw89: Add rtw89_core_get_ch_dma_v2()
994944aa58f8 wifi: rtw89: usb: Move bulk out map to new struct rtw89_usb_info
7697701d6c03 wifi: rtw89: usb: Prepare rtw89_usb_ops_mac_pre_init() for RTL8852CU
199afd3af12c wifi: rtw89: usb: Prepare rtw89_usb_ops_mac_post_init() for RTL8852CU
32e0381e8603 wifi: rtw89: Fix rtw89_mac_dmac_func_pre_en_ax() for USB/SDIO
97259766b18e wifi: rtw89: 8852c: Fix rtw8852c_pwr_{on,off}_func() for USB
a86589908460 wifi: rtw89: Add rtw8852c_dle_mem_usb{2,3}
19faad8c729d wifi: rtw89: Add rtw8852c_hfc_param_ini_usb
6bc2711085a5 wifi: rtw89: 8852c: Accept USB devices and load their MAC address
406849000df4 wifi: rtw89: Add rtw8852cu.c
0d971ffdae58 wifi: rtw89: Enable the new rtw89_8852cu module

---
https://github.com/pkshih/rtw.git


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2025-11-04  1:53 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-01 19:17 [PATCH rtw-next v4 00/12] wifi: rtw89: Add support for RTL8852CU Bitterblue Smith
2025-11-01 19:19 ` [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode Bitterblue Smith
2025-11-01 19:20   ` [PATCH rtw-next v4 02/12] wifi: rtw89: Add rtw89_core_get_ch_dma_v2() Bitterblue Smith
2025-11-03  0:47   ` [PATCH rtw-next v4 01/12] wifi: rtw89: 8832cu: turn off TX partial mode Ping-Ke Shih
2025-11-03 11:24     ` Bitterblue Smith
2025-11-04  1:53   ` Ping-Ke Shih
2025-11-01 19:22 ` [PATCH rtw-next v4 03/12] wifi: rtw89: usb: Move bulk out map to new struct rtw89_usb_info Bitterblue Smith
2025-11-01 19:22 ` [PATCH rtw-next v4 04/12] wifi: rtw89: usb: Prepare rtw89_usb_ops_mac_pre_init() for RTL8852CU Bitterblue Smith
2025-11-01 19:23 ` [PATCH rtw-next v4 05/12] wifi: rtw89: usb: Prepare rtw89_usb_ops_mac_post_init() " Bitterblue Smith
2025-11-01 19:24 ` [PATCH rtw-next v4 06/12] wifi: rtw89: Fix rtw89_mac_dmac_func_pre_en_ax() for USB/SDIO Bitterblue Smith
2025-11-01 19:24 ` [PATCH rtw-next v4 07/12] wifi: rtw89: 8852c: Fix rtw8852c_pwr_{on,off}_func() for USB Bitterblue Smith
2025-11-01 19:25 ` [PATCH rtw-next v4 08/12] wifi: rtw89: Add rtw8852c_dle_mem_usb{2,3} Bitterblue Smith
2025-11-01 19:26 ` [PATCH rtw-next v4 09/12] wifi: rtw89: Add rtw8852c_hfc_param_ini_usb Bitterblue Smith
2025-11-03  0:48   ` Ping-Ke Shih
2025-11-01 19:27 ` [PATCH rtw-next v4 10/12] wifi: rtw89: 8852c: Accept USB devices and load their MAC address Bitterblue Smith
2025-11-01 19:27 ` [PATCH rtw-next v4 11/12] wifi: rtw89: Add rtw8852cu.c Bitterblue Smith
2025-11-01 19:28 ` [PATCH rtw-next v4 12/12] wifi: rtw89: Enable the new rtw89_8852cu module Bitterblue Smith

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).