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