blob: f2e75f8bf6cebc4e90b02d1d62fb305cf437f41a [file] [log] [blame]
developer07b5baf2024-01-10 04:38:47 +08001From e38f980034dbfe7b9345347035e6e4042c5deadd Mon Sep 17 00:00:00 2001
developer5f4e6c32023-12-20 06:12:53 +08002From: "sujuan.chen" <sujuan.chen@mediatek.com>
3Date: Fri, 8 Sep 2023 11:57:39 +0800
developer07b5baf2024-01-10 04:38:47 +08004Subject: [PATCH 2014/2028] mtk: wifi: mt76: mt7996: wed: add wed support for
developer5f4e6c32023-12-20 06:12:53 +08005 mt7992
6
7Signed-off-by: sujuan.chen <sujuan.chen@mediatek.com>
8
9Fix incomplete WED initialization for Kite band-1 RX ring.
10
11Signed-off-by: Benjamin Lin <benjamin-jw.lin@mediatek.com>
12---
13 mt7996/dma.c | 91 +++++++++++++++++++++++++++++++++----------------
14 mt7996/init.c | 12 +++++++
15 mt7996/mac.c | 4 +++
16 mt7996/mmio.c | 49 ++++++++++++++++++--------
17 mt7996/mt7996.h | 10 +++++-
18 mt7996/pci.c | 10 ++++--
19 mt7996/regs.h | 14 +++++++-
20 7 files changed, 142 insertions(+), 48 deletions(-)
21
22diff --git a/mt7996/dma.c b/mt7996/dma.c
23index 773bab71..4c92f13b 100644
24--- a/mt7996/dma.c
25+++ b/mt7996/dma.c
26@@ -77,18 +77,23 @@ static void mt7996_dma_config(struct mt7996_dev *dev)
27 MT7996_RXQ_RRO_BAND0);
28 RXQ_CONFIG(MT_RXQ_MSDU_PAGE_BAND0, WFDMA0, MT_INT_RX_DONE_MSDU_PG_BAND0,
29 MT7996_RXQ_MSDU_PG_BAND0);
30- RXQ_CONFIG(MT_RXQ_TXFREE_BAND0, WFDMA0, MT_INT_RX_TXFREE_MAIN,
31- MT7996_RXQ_TXFREE0);
32- /* band1 */
33- RXQ_CONFIG(MT_RXQ_MSDU_PAGE_BAND1, WFDMA0, MT_INT_RX_DONE_MSDU_PG_BAND1,
34- MT7996_RXQ_MSDU_PG_BAND1);
35- /* band2 */
36- RXQ_CONFIG(MT_RXQ_RRO_BAND2, WFDMA0, MT_INT_RX_DONE_RRO_BAND2,
37- MT7996_RXQ_RRO_BAND2);
38- RXQ_CONFIG(MT_RXQ_MSDU_PAGE_BAND2, WFDMA0, MT_INT_RX_DONE_MSDU_PG_BAND2,
39- MT7996_RXQ_MSDU_PG_BAND2);
40- RXQ_CONFIG(MT_RXQ_TXFREE_BAND2, WFDMA0, MT_INT_RX_TXFREE_TRI,
41- MT7996_RXQ_TXFREE2);
42+ if (is_mt7996(&dev->mt76)) {
43+ RXQ_CONFIG(MT_RXQ_TXFREE_BAND0, WFDMA0, MT_INT_RX_TXFREE_MAIN,
44+ MT7996_RXQ_TXFREE0);
45+ /* band1 */
46+ RXQ_CONFIG(MT_RXQ_MSDU_PAGE_BAND1, WFDMA0, MT_INT_RX_DONE_MSDU_PG_BAND1,
47+ MT7996_RXQ_MSDU_PG_BAND1);
48+ /* band2 */
49+ RXQ_CONFIG(MT_RXQ_RRO_BAND2, WFDMA0, MT_INT_RX_DONE_RRO_BAND2,
50+ MT7996_RXQ_RRO_BAND2);
51+ RXQ_CONFIG(MT_RXQ_MSDU_PAGE_BAND2, WFDMA0, MT_INT_RX_DONE_MSDU_PG_BAND2,
52+ MT7996_RXQ_MSDU_PG_BAND2);
53+ RXQ_CONFIG(MT_RXQ_TXFREE_BAND2, WFDMA0, MT_INT_RX_TXFREE_TRI,
54+ MT7996_RXQ_TXFREE2);
55+ } else {
56+ RXQ_CONFIG(MT_RXQ_RRO_BAND1, WFDMA0, MT_INT_RX_DONE_RRO_BAND1,
57+ MT7996_RXQ_RRO_BAND1);
58+ }
59
60 RXQ_CONFIG(MT_RXQ_RRO_IND, WFDMA0, MT_INT_RX_DONE_RRO_IND,
61 MT7996_RXQ_RRO_IND);
62@@ -146,8 +151,13 @@ static void __mt7996_dma_prefetch(struct mt7996_dev *dev, u32 ofs)
63 if (dev->has_rro) {
64 mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_RRO_BAND0) + ofs,
65 PREFETCH(0x10));
66- mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_RRO_BAND2) + ofs,
67- PREFETCH(0x10));
68+ if (is_mt7996(&dev->mt76))
69+ mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_RRO_BAND2) + ofs,
70+ PREFETCH(0x10));
71+ else
72+ mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_RRO_BAND1) + ofs,
73+ PREFETCH(0x10));
74+
75 mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MSDU_PAGE_BAND0) + ofs,
76 PREFETCH(0x4));
77 mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MSDU_PAGE_BAND1) + ofs,
78@@ -360,12 +370,16 @@ static void mt7996_dma_enable(struct mt7996_dev *dev, bool reset)
79 * so, redirect pcie0 rx ring3 interrupt to pcie1
80 */
81 if (mtk_wed_device_active(&dev->mt76.mmio.wed) &&
82- dev->has_rro)
83+ dev->has_rro) {
84+ u32 intr = is_mt7996(&dev->mt76) ?
85+ MT_WFDMA0_RX_INT_SEL_RING6 :
86+ MT_WFDMA0_RX_INT_SEL_RING9;
87 mt76_set(dev, MT_WFDMA0_RX_INT_PCIE_SEL + hif1_ofs,
88- MT_WFDMA0_RX_INT_SEL_RING6);
89- else
90+ intr);
91+ } else {
92 mt76_set(dev, MT_WFDMA0_RX_INT_PCIE_SEL,
93 MT_WFDMA0_RX_INT_SEL_RING3);
94+ }
95 }
96
97 mt7996_dma_start(dev, reset, true);
98@@ -400,7 +414,7 @@ int mt7996_dma_rro_init(struct mt7996_dev *dev)
99 if (ret)
100 return ret;
101
102- if (mt7996_band_valid(dev, MT_BAND1)) {
103+ if (mt7996_band_valid(dev, MT_BAND1) && is_mt7996(&dev->mt76)) {
104 /* rx msdu page queue for band1 */
105 mdev->q_rx[MT_RXQ_MSDU_PAGE_BAND1].flags =
106 MT_WED_RRO_Q_MSDU_PG(1) | MT_QFLAG_WED_RRO_EN;
107@@ -521,7 +535,9 @@ int mt7996_dma_init(struct mt7996_dev *dev)
108 return ret;
109
110 /* tx free notify event from WA for band0 */
111- if (mtk_wed_device_active(wed) && !dev->has_rro) {
112+ if (mtk_wed_device_active(wed) &&
113+ ((is_mt7996(&dev->mt76) && !dev->has_rro) ||
114+ (is_mt7992(&dev->mt76)))) {
115 dev->mt76.q_rx[MT_RXQ_MAIN_WA].flags = MT_WED_Q_TXFREE;
116 dev->mt76.q_rx[MT_RXQ_MAIN_WA].wed = wed;
117 }
118@@ -567,6 +583,11 @@ int mt7996_dma_init(struct mt7996_dev *dev)
119 } else if (mt7996_band_valid(dev, MT_BAND1)) {
120 /* rx data queue for mt7992 band1 */
121 rx_base = MT_RXQ_RING_BASE(MT_RXQ_BAND1) + hif1_ofs;
122+ if (mtk_wed_device_active(wed) && mtk_wed_get_rx_capa(wed)) {
123+ dev->mt76.q_rx[MT_RXQ_BAND1].flags = MT_WED_Q_RX(1);
124+ dev->mt76.q_rx[MT_RXQ_BAND1].wed = wed;
125+ }
126+
127 ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_BAND1],
128 MT_RXQ_ID(MT_RXQ_BAND1),
129 MT7996_RX_RING_SIZE,
130@@ -600,17 +621,29 @@ int mt7996_dma_init(struct mt7996_dev *dev)
131 if (ret)
132 return ret;
133
134- /* tx free notify event from WA for band0 */
135- dev->mt76.q_rx[MT_RXQ_TXFREE_BAND0].flags = MT_WED_Q_TXFREE;
136- dev->mt76.q_rx[MT_RXQ_TXFREE_BAND0].wed = wed;
137+ if (is_mt7992(&dev->mt76)) {
138+ dev->mt76.q_rx[MT_RXQ_RRO_BAND1].flags =
139+ MT_WED_RRO_Q_DATA(1) | MT_QFLAG_WED_RRO_EN;
140+ dev->mt76.q_rx[MT_RXQ_RRO_BAND1].wed = wed;
141+ ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_RRO_BAND1],
142+ MT_RXQ_ID(MT_RXQ_RRO_BAND1),
143+ MT7996_RX_RING_SIZE,
144+ MT7996_RX_BUF_SIZE,
145+ MT_RXQ_RING_BASE(MT_RXQ_RRO_BAND1));
146+ if (ret)
147+ return ret;
148+ } else {
149+ dev->mt76.q_rx[MT_RXQ_TXFREE_BAND0].flags = MT_WED_Q_TXFREE;
150+ dev->mt76.q_rx[MT_RXQ_TXFREE_BAND0].wed = wed;
151
152- ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_TXFREE_BAND0],
153- MT_RXQ_ID(MT_RXQ_TXFREE_BAND0),
154- MT7996_RX_MCU_RING_SIZE,
155- MT7996_RX_BUF_SIZE,
156- MT_RXQ_RING_BASE(MT_RXQ_TXFREE_BAND0));
157- if (ret)
158- return ret;
159+ ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_TXFREE_BAND0],
160+ MT_RXQ_ID(MT_RXQ_TXFREE_BAND0),
161+ MT7996_RX_MCU_RING_SIZE,
162+ MT7996_RX_BUF_SIZE,
163+ MT_RXQ_RING_BASE(MT_RXQ_TXFREE_BAND0));
164+ if (ret)
165+ return ret;
166+ }
167
168 if (mt7996_band_valid(dev, MT_BAND2)) {
169 /* rx rro data queue for band2 */
170diff --git a/mt7996/init.c b/mt7996/init.c
developer07b5baf2024-01-10 04:38:47 +0800171index 32f2db33..12682c9b 100644
developer5f4e6c32023-12-20 06:12:53 +0800172--- a/mt7996/init.c
173+++ b/mt7996/init.c
developer07b5baf2024-01-10 04:38:47 +0800174@@ -802,6 +802,7 @@ void mt7996_rro_hw_init(struct mt7996_dev *dev)
developer5f4e6c32023-12-20 06:12:53 +0800175 /* interrupt enable */
176 mt76_wr(dev, MT_RRO_HOST_INT_ENA,
177 MT_RRO_HOST_INT_ENA_HOST_RRO_DONE_ENA);
178+
179 #endif
180 }
181
developer07b5baf2024-01-10 04:38:47 +0800182@@ -854,6 +855,17 @@ static int mt7996_wed_rro_init(struct mt7996_dev *dev)
developer5f4e6c32023-12-20 06:12:53 +0800183 dev->wed_rro.addr_elem[i].phy_addr;
184 }
185
186+ for (i = 0; i < MT7996_RRO_MSDU_PG_CR_CNT; i++) {
187+ ptr = dmam_alloc_coherent(dev->mt76.dma_dev, MT7996_RRO_MSDU_PG_SIZE_PER_CR,
188+ &dev->wed_rro.msdu_pg[i].phy_addr,
189+ GFP_KERNEL);
190+ if (!ptr)
191+ return -ENOMEM;
192+ dev->wed_rro.msdu_pg[i].ptr = ptr;
193+
194+ memset(dev->wed_rro.msdu_pg[i].ptr, 0, MT7996_RRO_MSDU_PG_SIZE_PER_CR);
195+ }
196+
197 ptr = dmam_alloc_coherent(dev->mt76.dma_dev,
198 MT7996_RRO_WINDOW_MAX_LEN * sizeof(*addr),
199 &dev->wed_rro.session.phy_addr,
200diff --git a/mt7996/mac.c b/mt7996/mac.c
201index 8171a43d..751a960a 100644
202--- a/mt7996/mac.c
203+++ b/mt7996/mac.c
204@@ -1998,6 +1998,10 @@ void mt7996_mac_reset_work(struct work_struct *work)
205
206 mt76_wr(dev, MT_INT_MASK_CSR, wed_irq_mask);
207
208+ if (is_mt7992(&dev->mt76) && dev->has_rro)
209+ mt76_wr(dev, MT_RRO_3_0_EMU_CONF,
210+ MT_RRO_3_0_EMU_CONF_EN_MASK);
211+
212 mtk_wed_device_start_hwrro(&dev->mt76.mmio.wed, wed_irq_mask,
213 true);
214 mt7996_irq_enable(dev, wed_irq_mask);
215diff --git a/mt7996/mmio.c b/mt7996/mmio.c
216index 69d16dad..b5b97dcb 100644
217--- a/mt7996/mmio.c
218+++ b/mt7996/mmio.c
219@@ -318,7 +318,8 @@ int mt7996_mmio_wed_init(struct mt7996_dev *dev, void *pdev_ptr,
220
221 dev->has_rro = true;
222
223- hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
224+ if (dev->hif2)
225+ hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
226
227 if (hif2)
228 wed = &dev->mt76.mmio.wed_hif2;
229@@ -353,8 +354,8 @@ int mt7996_mmio_wed_init(struct mt7996_dev *dev, void *pdev_ptr,
230
231 wed->wlan.wpdma_rx_glo = wed->wlan.phy_base + hif1_ofs + MT_WFDMA0_GLO_CFG;
232 wed->wlan.wpdma_rx[0] = wed->wlan.phy_base + hif1_ofs +
233- MT_RXQ_RING_BASE(MT7996_RXQ_BAND0) +
234- MT7996_RXQ_BAND0 * MT_RING_SIZE;
235+ MT_RXQ_RING_BASE(MT7996_RXQ_BAND2) +
236+ MT7996_RXQ_BAND2 * MT_RING_SIZE;
237
238 wed->wlan.chip_id = 0x7991;
239 wed->wlan.tx_tbit[0] = ffs(MT_INT_TX_DONE_BAND2) - 1;
240@@ -374,9 +375,19 @@ int mt7996_mmio_wed_init(struct mt7996_dev *dev, void *pdev_ptr,
241 wed->wlan.wpdma_rx_rro[0] = wed->wlan.phy_base +
242 MT_RXQ_RING_BASE(MT7996_RXQ_RRO_BAND0) +
243 MT7996_RXQ_RRO_BAND0 * MT_RING_SIZE;
244- wed->wlan.wpdma_rx_rro[1] = wed->wlan.phy_base + hif1_ofs +
245- MT_RXQ_RING_BASE(MT7996_RXQ_RRO_BAND2) +
246- MT7996_RXQ_RRO_BAND2 * MT_RING_SIZE;
247+ if (is_mt7996(&dev->mt76)) {
248+ wed->wlan.wpdma_rx_rro[1] = wed->wlan.phy_base + hif1_ofs +
249+ MT_RXQ_RING_BASE(MT7996_RXQ_RRO_BAND2) +
250+ MT7996_RXQ_RRO_BAND2 * MT_RING_SIZE;
251+ } else {
252+ wed->wlan.wpdma_rx_rro[1] = wed->wlan.phy_base +
253+ MT_RXQ_RING_BASE(MT7996_RXQ_RRO_BAND1) +
254+ MT7996_RXQ_RRO_BAND1 * MT_RING_SIZE;
255+ wed->wlan.wpdma_rx[1] = wed->wlan.phy_base +
256+ MT_RXQ_RING_BASE(MT7996_RXQ_BAND1) +
257+ MT7996_RXQ_BAND1 * MT_RING_SIZE;
258+ }
259+
260 wed->wlan.wpdma_rx_pg = wed->wlan.phy_base +
261 MT_RXQ_RING_BASE(MT7996_RXQ_MSDU_PG_BAND0) +
262 MT7996_RXQ_MSDU_PG_BAND0 * MT_RING_SIZE;
263@@ -386,10 +397,14 @@ int mt7996_mmio_wed_init(struct mt7996_dev *dev, void *pdev_ptr,
264 wed->wlan.rx_size = SKB_WITH_OVERHEAD(MT_RX_BUF_SIZE);
265
266 wed->wlan.rx_tbit[0] = ffs(MT_INT_RX_DONE_BAND0) - 1;
267- wed->wlan.rx_tbit[1] = ffs(MT_INT_RX_DONE_BAND2) - 1;
268-
269 wed->wlan.rro_rx_tbit[0] = ffs(MT_INT_RX_DONE_RRO_BAND0) - 1;
270- wed->wlan.rro_rx_tbit[1] = ffs(MT_INT_RX_DONE_RRO_BAND2) - 1;
271+ if (is_mt7996(&dev->mt76)) {
272+ wed->wlan.rx_tbit[1] = ffs(MT_INT_RX_DONE_BAND2) - 1;
273+ wed->wlan.rro_rx_tbit[1] = ffs(MT_INT_RX_DONE_RRO_BAND2) - 1;
274+ } else {
275+ wed->wlan.rx_tbit[1] = ffs(MT_INT_RX_DONE_BAND1) - 1;
276+ wed->wlan.rro_rx_tbit[1] = ffs(MT_INT_RX_DONE_RRO_BAND1) - 1;
277+ }
278
279 wed->wlan.rx_pg_tbit[0] = ffs(MT_INT_RX_DONE_MSDU_PG_BAND0) - 1;
280 wed->wlan.rx_pg_tbit[1] = ffs(MT_INT_RX_DONE_MSDU_PG_BAND1) - 1;
281@@ -397,14 +412,20 @@ int mt7996_mmio_wed_init(struct mt7996_dev *dev, void *pdev_ptr,
282
283 wed->wlan.tx_tbit[0] = ffs(MT_INT_TX_DONE_BAND0) - 1;
284 wed->wlan.tx_tbit[1] = ffs(MT_INT_TX_DONE_BAND1) - 1;
285- if (dev->has_rro) {
286- wed->wlan.wpdma_txfree = wed->wlan.phy_base + MT_RXQ_RING_BASE(0) +
287- MT7996_RXQ_TXFREE0 * MT_RING_SIZE;
288- wed->wlan.txfree_tbit = ffs(MT_INT_RX_TXFREE_MAIN) - 1;
289+ if (is_mt7996(&dev->mt76)) {
290+ if (dev->has_rro) {
291+ wed->wlan.wpdma_txfree = wed->wlan.phy_base + MT_RXQ_RING_BASE(0) +
292+ MT7996_RXQ_TXFREE0 * MT_RING_SIZE;
293+ wed->wlan.txfree_tbit = ffs(MT_INT_RX_TXFREE_MAIN) - 1;
294+ } else {
295+ wed->wlan.txfree_tbit = ffs(MT_INT_RX_DONE_WA_MAIN) - 1;
296+ wed->wlan.wpdma_txfree = wed->wlan.phy_base + MT_RXQ_RING_BASE(0) +
297+ MT7996_RXQ_MCU_WA_MAIN * MT_RING_SIZE;
298+ }
299 } else {
300 wed->wlan.txfree_tbit = ffs(MT_INT_RX_DONE_WA_MAIN) - 1;
301 wed->wlan.wpdma_txfree = wed->wlan.phy_base + MT_RXQ_RING_BASE(0) +
302- MT7996_RXQ_MCU_WA_MAIN * MT_RING_SIZE;
303+ MT7996_RXQ_MCU_WA_MAIN * MT_RING_SIZE;
304 }
305 dev->mt76.rx_token_size = MT7996_TOKEN_SIZE + wed->wlan.rx_npkt;
306 }
307diff --git a/mt7996/mt7996.h b/mt7996/mt7996.h
developer07b5baf2024-01-10 04:38:47 +0800308index 3ba40c3a..d1d35e56 100644
developer5f4e6c32023-12-20 06:12:53 +0800309--- a/mt7996/mt7996.h
310+++ b/mt7996/mt7996.h
311@@ -122,6 +122,10 @@
312 #define MT7996_DRR_STA_AC2_QNTM_MASK GENMASK(18, 16)
313 #define MT7996_DRR_STA_AC3_QNTM_MASK GENMASK(22, 20)
314
315+/* RRO 3.1 */
316+#define MT7996_RRO_MSDU_PG_CR_CNT 8
317+#define MT7996_RRO_MSDU_PG_SIZE_PER_CR 0x10000
318+
319 struct mt7996_vif;
320 struct mt7996_sta;
321 struct mt7996_dfs_pulse;
322@@ -181,7 +185,7 @@ enum mt7996_rxq_id {
323 MT7996_RXQ_BAND1 = 5, /* for mt7992 */
324 MT7996_RXQ_BAND2 = 5,
325 MT7996_RXQ_RRO_BAND0 = 8,
326- MT7996_RXQ_RRO_BAND1 = 8,/* unused */
327+ MT7996_RXQ_RRO_BAND1 = 9,
328 MT7996_RXQ_RRO_BAND2 = 6,
329 MT7996_RXQ_MSDU_PG_BAND0 = 10,
330 MT7996_RXQ_MSDU_PG_BAND1 = 11,
developer07b5baf2024-01-10 04:38:47 +0800331@@ -541,6 +545,10 @@ struct mt7996_dev {
developer5f4e6c32023-12-20 06:12:53 +0800332 void *ptr;
333 dma_addr_t phy_addr;
334 } session;
335+ struct {
336+ void *ptr;
337+ dma_addr_t phy_addr;
338+ } msdu_pg[MT7996_RRO_MSDU_PG_CR_CNT];
339
340 struct work_struct work;
341 struct list_head poll_list;
342diff --git a/mt7996/pci.c b/mt7996/pci.c
343index 4e957771..f0d3f199 100644
344--- a/mt7996/pci.c
345+++ b/mt7996/pci.c
346@@ -107,7 +107,7 @@ static int mt7996_pci_probe(struct pci_dev *pdev,
347 struct pci_dev *hif2_dev;
348 struct mt7996_hif *hif2;
349 struct mt7996_dev *dev;
350- int irq, hif2_irq, ret;
351+ int irq, ret;
352 struct mt76_dev *mdev;
353
354 hif2_enable |= (id->device == 0x7990 || id->device == 0x7991);
355@@ -143,6 +143,8 @@ static int mt7996_pci_probe(struct pci_dev *pdev,
356 mdev = &dev->mt76;
357 mt7996_wfsys_reset(dev);
358 hif2 = mt7996_pci_init_hif2(pdev);
359+ if (hif2)
360+ dev->hif2 = hif2;
361
362 ret = mt7996_mmio_wed_init(dev, pdev, false, &irq);
363 if (ret < 0)
364@@ -167,9 +169,11 @@ static int mt7996_pci_probe(struct pci_dev *pdev,
365
366 if (hif2) {
367 hif2_dev = container_of(hif2->dev, struct pci_dev, dev);
368- dev->hif2 = hif2;
369+ ret = 0;
370+
371+ if (is_mt7996(&dev->mt76))
372+ ret = mt7996_mmio_wed_init(dev, hif2_dev, true, &irq);
373
374- ret = mt7996_mmio_wed_init(dev, hif2_dev, true, &hif2_irq);
375 if (ret < 0)
376 goto free_wed_or_irq_vector;
377
378diff --git a/mt7996/regs.h b/mt7996/regs.h
379index 8d1462a7..352d1b29 100644
380--- a/mt7996/regs.h
381+++ b/mt7996/regs.h
382@@ -77,6 +77,8 @@ enum offs_rev {
383 #define MT_RRO_BA_BITMAP_BASE1 MT_RRO_TOP(0xC)
384 #define WF_RRO_AXI_MST_CFG MT_RRO_TOP(0xB8)
385 #define WF_RRO_AXI_MST_CFG_DIDX_OK BIT(12)
386+
387+#define MT_RRO_ADDR_ARRAY_BASE0 MT_RRO_TOP(0x30)
388 #define MT_RRO_ADDR_ARRAY_BASE1 MT_RRO_TOP(0x34)
389 #define MT_RRO_ADDR_ARRAY_ELEM_ADDR_SEG_MODE BIT(31)
390
391@@ -97,6 +99,14 @@ enum offs_rev {
392
393 #define MT_RRO_ADDR_ELEM_SEG_ADDR0 MT_RRO_TOP(0x400)
394
395+#define MT_RRO_3_0_EMU_CONF MT_RRO_TOP(0x600)
396+#define MT_RRO_3_0_EMU_CONF_EN_MASK BIT(11)
397+
398+#define MT_RRO_3_1_GLOBAL_CONFIG MT_RRO_TOP(0x604)
399+#define MT_RRO_3_1_GLOBAL_CONFIG_INTERLEAVE_EN BIT(0)
400+
401+#define MT_RRO_MSDU_PG_SEG_ADDR0 MT_RRO_TOP(0x620)
402+
403 #define MT_RRO_ACK_SN_CTRL MT_RRO_TOP(0x50)
404 #define MT_RRO_ACK_SN_CTRL_SN_MASK GENMASK(27, 16)
405 #define MT_RRO_ACK_SN_CTRL_SESSION_MASK GENMASK(11, 0)
406@@ -402,6 +412,7 @@ enum offs_rev {
407 #define MT_WFDMA0_RX_INT_PCIE_SEL MT_WFDMA0(0x154)
408 #define MT_WFDMA0_RX_INT_SEL_RING3 BIT(3)
409 #define MT_WFDMA0_RX_INT_SEL_RING6 BIT(6)
410+#define MT_WFDMA0_RX_INT_SEL_RING9 BIT(9)
411
412 #define MT_WFDMA0_MCU_HOST_INT_ENA MT_WFDMA0(0x1f4)
413
414@@ -503,13 +514,14 @@ enum offs_rev {
415 #define MT_INT_RX_DONE_WA_EXT BIT(3) /* for mt7992 */
416 #define MT_INT_RX_DONE_WA_TRI BIT(3)
417 #define MT_INT_RX_TXFREE_MAIN BIT(17)
418+#define MT_INT_RX_TXFREE_BAND1 BIT(15)
419 #define MT_INT_RX_TXFREE_TRI BIT(15)
420 #define MT_INT_RX_DONE_BAND2_EXT BIT(23)
421 #define MT_INT_RX_TXFREE_EXT BIT(26)
422 #define MT_INT_MCU_CMD BIT(29)
423
424 #define MT_INT_RX_DONE_RRO_BAND0 BIT(16)
425-#define MT_INT_RX_DONE_RRO_BAND1 BIT(16)
426+#define MT_INT_RX_DONE_RRO_BAND1 BIT(17)
427 #define MT_INT_RX_DONE_RRO_BAND2 BIT(14)
428 #define MT_INT_RX_DONE_RRO_IND BIT(11)
429 #define MT_INT_RX_DONE_MSDU_PG_BAND0 BIT(18)
430--
4312.18.0
432