0001
0002
0003
0004 #include "mt7915.h"
0005 #include "../dma.h"
0006 #include "mac.h"
0007
0008 static int
0009 mt7915_init_tx_queues(struct mt7915_phy *phy, int idx, int n_desc, int ring_base)
0010 {
0011 struct mt7915_dev *dev = phy->dev;
0012
0013 if (mtk_wed_device_active(&phy->dev->mt76.mmio.wed)) {
0014 ring_base = MT_WED_TX_RING_BASE;
0015 idx -= MT_TXQ_ID(0);
0016 }
0017
0018 return mt76_connac_init_tx_queues(phy->mt76, idx, n_desc, ring_base,
0019 MT_WED_Q_TX(idx));
0020 }
0021
0022 static int mt7915_poll_tx(struct napi_struct *napi, int budget)
0023 {
0024 struct mt7915_dev *dev;
0025
0026 dev = container_of(napi, struct mt7915_dev, mt76.tx_napi);
0027
0028 mt76_connac_tx_cleanup(&dev->mt76);
0029 if (napi_complete_done(napi, 0))
0030 mt7915_irq_enable(dev, MT_INT_TX_DONE_MCU);
0031
0032 return 0;
0033 }
0034
0035 static void mt7915_dma_config(struct mt7915_dev *dev)
0036 {
0037 #define Q_CONFIG(q, wfdma, int, id) do { \
0038 if (wfdma) \
0039 dev->wfdma_mask |= (1 << (q)); \
0040 dev->q_int_mask[(q)] = int; \
0041 dev->q_id[(q)] = id; \
0042 } while (0)
0043
0044 #define MCUQ_CONFIG(q, wfdma, int, id) Q_CONFIG(q, (wfdma), (int), (id))
0045 #define RXQ_CONFIG(q, wfdma, int, id) Q_CONFIG(__RXQ(q), (wfdma), (int), (id))
0046 #define TXQ_CONFIG(q, wfdma, int, id) Q_CONFIG(__TXQ(q), (wfdma), (int), (id))
0047
0048 if (is_mt7915(&dev->mt76)) {
0049 RXQ_CONFIG(MT_RXQ_MAIN, WFDMA0, MT_INT_RX_DONE_BAND0, MT7915_RXQ_BAND0);
0050 RXQ_CONFIG(MT_RXQ_MCU, WFDMA1, MT_INT_RX_DONE_WM, MT7915_RXQ_MCU_WM);
0051 RXQ_CONFIG(MT_RXQ_MCU_WA, WFDMA1, MT_INT_RX_DONE_WA, MT7915_RXQ_MCU_WA);
0052 RXQ_CONFIG(MT_RXQ_BAND1, WFDMA0, MT_INT_RX_DONE_BAND1, MT7915_RXQ_BAND1);
0053 RXQ_CONFIG(MT_RXQ_BAND1_WA, WFDMA1, MT_INT_RX_DONE_WA_EXT, MT7915_RXQ_MCU_WA_EXT);
0054 RXQ_CONFIG(MT_RXQ_MAIN_WA, WFDMA1, MT_INT_RX_DONE_WA_MAIN, MT7915_RXQ_MCU_WA);
0055 TXQ_CONFIG(0, WFDMA1, MT_INT_TX_DONE_BAND0, MT7915_TXQ_BAND0);
0056 TXQ_CONFIG(1, WFDMA1, MT_INT_TX_DONE_BAND1, MT7915_TXQ_BAND1);
0057 MCUQ_CONFIG(MT_MCUQ_WM, WFDMA1, MT_INT_TX_DONE_MCU_WM, MT7915_TXQ_MCU_WM);
0058 MCUQ_CONFIG(MT_MCUQ_WA, WFDMA1, MT_INT_TX_DONE_MCU_WA, MT7915_TXQ_MCU_WA);
0059 MCUQ_CONFIG(MT_MCUQ_FWDL, WFDMA1, MT_INT_TX_DONE_FWDL, MT7915_TXQ_FWDL);
0060 } else {
0061 RXQ_CONFIG(MT_RXQ_MAIN, WFDMA0, MT_INT_RX_DONE_BAND0_MT7916, MT7916_RXQ_BAND0);
0062 RXQ_CONFIG(MT_RXQ_MCU, WFDMA0, MT_INT_RX_DONE_WM, MT7916_RXQ_MCU_WM);
0063 RXQ_CONFIG(MT_RXQ_MCU_WA, WFDMA0, MT_INT_RX_DONE_WA, MT7916_RXQ_MCU_WA);
0064 RXQ_CONFIG(MT_RXQ_BAND1, WFDMA0, MT_INT_RX_DONE_BAND1_MT7916, MT7916_RXQ_BAND1);
0065 RXQ_CONFIG(MT_RXQ_BAND1_WA, WFDMA0, MT_INT_RX_DONE_WA_EXT_MT7916, MT7916_RXQ_MCU_WA_EXT);
0066 RXQ_CONFIG(MT_RXQ_MAIN_WA, WFDMA0, MT_INT_RX_DONE_WA_MAIN_MT7916, MT7916_RXQ_MCU_WA_MAIN);
0067 TXQ_CONFIG(0, WFDMA0, MT_INT_TX_DONE_BAND0, MT7915_TXQ_BAND0);
0068 TXQ_CONFIG(1, WFDMA0, MT_INT_TX_DONE_BAND1, MT7915_TXQ_BAND1);
0069 MCUQ_CONFIG(MT_MCUQ_WM, WFDMA0, MT_INT_TX_DONE_MCU_WM, MT7915_TXQ_MCU_WM);
0070 MCUQ_CONFIG(MT_MCUQ_WA, WFDMA0, MT_INT_TX_DONE_MCU_WA_MT7916, MT7915_TXQ_MCU_WA);
0071 MCUQ_CONFIG(MT_MCUQ_FWDL, WFDMA0, MT_INT_TX_DONE_FWDL, MT7915_TXQ_FWDL);
0072 }
0073 }
0074
0075 static void __mt7915_dma_prefetch(struct mt7915_dev *dev, u32 ofs)
0076 {
0077 #define PREFETCH(_base, _depth) ((_base) << 16 | (_depth))
0078 u32 base = 0;
0079
0080
0081 mt76_wr(dev, MT_MCUQ_EXT_CTRL(MT_MCUQ_FWDL) + ofs, PREFETCH(0x0, 0x4));
0082 mt76_wr(dev, MT_MCUQ_EXT_CTRL(MT_MCUQ_WM) + ofs, PREFETCH(0x40, 0x4));
0083 mt76_wr(dev, MT_TXQ_EXT_CTRL(0) + ofs, PREFETCH(0x80, 0x4));
0084 mt76_wr(dev, MT_TXQ_EXT_CTRL(1) + ofs, PREFETCH(0xc0, 0x4));
0085 mt76_wr(dev, MT_MCUQ_EXT_CTRL(MT_MCUQ_WA) + ofs, PREFETCH(0x100, 0x4));
0086
0087 mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MCU) + ofs,
0088 PREFETCH(0x140, 0x4));
0089 mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MCU_WA) + ofs,
0090 PREFETCH(0x180, 0x4));
0091 if (!is_mt7915(&dev->mt76)) {
0092 mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MAIN_WA) + ofs,
0093 PREFETCH(0x1c0, 0x4));
0094 base = 0x40;
0095 }
0096 mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_BAND1_WA) + ofs,
0097 PREFETCH(0x1c0 + base, 0x4));
0098 mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MAIN) + ofs,
0099 PREFETCH(0x200 + base, 0x4));
0100 mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_BAND1) + ofs,
0101 PREFETCH(0x240 + base, 0x4));
0102
0103
0104
0105
0106 if (is_mt7915(&dev->mt76)) {
0107 ofs += 0x4;
0108 mt76_wr(dev, MT_MCUQ_EXT_CTRL(MT_MCUQ_WA) + ofs,
0109 PREFETCH(0x140, 0x0));
0110 mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_BAND1_WA) + ofs,
0111 PREFETCH(0x200 + base, 0x0));
0112 mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_BAND1) + ofs,
0113 PREFETCH(0x280 + base, 0x0));
0114 }
0115 }
0116
0117 void mt7915_dma_prefetch(struct mt7915_dev *dev)
0118 {
0119 __mt7915_dma_prefetch(dev, 0);
0120 if (dev->hif2)
0121 __mt7915_dma_prefetch(dev, MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0));
0122 }
0123
0124 static void mt7915_dma_disable(struct mt7915_dev *dev, bool rst)
0125 {
0126 struct mt76_dev *mdev = &dev->mt76;
0127 u32 hif1_ofs = 0;
0128
0129 if (dev->hif2)
0130 hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
0131
0132
0133 if (rst) {
0134 mt76_clear(dev, MT_WFDMA0_RST,
0135 MT_WFDMA0_RST_DMASHDL_ALL_RST |
0136 MT_WFDMA0_RST_LOGIC_RST);
0137
0138 mt76_set(dev, MT_WFDMA0_RST,
0139 MT_WFDMA0_RST_DMASHDL_ALL_RST |
0140 MT_WFDMA0_RST_LOGIC_RST);
0141
0142 if (is_mt7915(mdev)) {
0143 mt76_clear(dev, MT_WFDMA1_RST,
0144 MT_WFDMA1_RST_DMASHDL_ALL_RST |
0145 MT_WFDMA1_RST_LOGIC_RST);
0146
0147 mt76_set(dev, MT_WFDMA1_RST,
0148 MT_WFDMA1_RST_DMASHDL_ALL_RST |
0149 MT_WFDMA1_RST_LOGIC_RST);
0150 }
0151
0152 if (dev->hif2) {
0153 mt76_clear(dev, MT_WFDMA0_RST + hif1_ofs,
0154 MT_WFDMA0_RST_DMASHDL_ALL_RST |
0155 MT_WFDMA0_RST_LOGIC_RST);
0156
0157 mt76_set(dev, MT_WFDMA0_RST + hif1_ofs,
0158 MT_WFDMA0_RST_DMASHDL_ALL_RST |
0159 MT_WFDMA0_RST_LOGIC_RST);
0160
0161 if (is_mt7915(mdev)) {
0162 mt76_clear(dev, MT_WFDMA1_RST + hif1_ofs,
0163 MT_WFDMA1_RST_DMASHDL_ALL_RST |
0164 MT_WFDMA1_RST_LOGIC_RST);
0165
0166 mt76_set(dev, MT_WFDMA1_RST + hif1_ofs,
0167 MT_WFDMA1_RST_DMASHDL_ALL_RST |
0168 MT_WFDMA1_RST_LOGIC_RST);
0169 }
0170 }
0171 }
0172
0173
0174 mt76_clear(dev, MT_WFDMA0_GLO_CFG,
0175 MT_WFDMA0_GLO_CFG_TX_DMA_EN |
0176 MT_WFDMA0_GLO_CFG_RX_DMA_EN |
0177 MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
0178 MT_WFDMA0_GLO_CFG_OMIT_RX_INFO |
0179 MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
0180
0181 if (is_mt7915(mdev))
0182 mt76_clear(dev, MT_WFDMA1_GLO_CFG,
0183 MT_WFDMA1_GLO_CFG_TX_DMA_EN |
0184 MT_WFDMA1_GLO_CFG_RX_DMA_EN |
0185 MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
0186 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO |
0187 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO_PFET2);
0188
0189 if (dev->hif2) {
0190 mt76_clear(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
0191 MT_WFDMA0_GLO_CFG_TX_DMA_EN |
0192 MT_WFDMA0_GLO_CFG_RX_DMA_EN |
0193 MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
0194 MT_WFDMA0_GLO_CFG_OMIT_RX_INFO |
0195 MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
0196
0197 if (is_mt7915(mdev))
0198 mt76_clear(dev, MT_WFDMA1_GLO_CFG + hif1_ofs,
0199 MT_WFDMA1_GLO_CFG_TX_DMA_EN |
0200 MT_WFDMA1_GLO_CFG_RX_DMA_EN |
0201 MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
0202 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO |
0203 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO_PFET2);
0204 }
0205 }
0206
0207 static int mt7915_dma_enable(struct mt7915_dev *dev)
0208 {
0209 struct mt76_dev *mdev = &dev->mt76;
0210 u32 hif1_ofs = 0;
0211 u32 irq_mask;
0212
0213 if (dev->hif2)
0214 hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
0215
0216
0217 mt76_wr(dev, MT_WFDMA0_RST_DTX_PTR, ~0);
0218 if (is_mt7915(mdev))
0219 mt76_wr(dev, MT_WFDMA1_RST_DTX_PTR, ~0);
0220 if (dev->hif2) {
0221 mt76_wr(dev, MT_WFDMA0_RST_DTX_PTR + hif1_ofs, ~0);
0222 if (is_mt7915(mdev))
0223 mt76_wr(dev, MT_WFDMA1_RST_DTX_PTR + hif1_ofs, ~0);
0224 }
0225
0226
0227 mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG0, 0);
0228 if (is_mt7915(mdev)) {
0229 mt76_wr(dev, MT_WFDMA1_PRI_DLY_INT_CFG0, 0);
0230 } else {
0231 mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG1, 0);
0232 mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG2, 0);
0233 }
0234
0235 if (dev->hif2) {
0236 mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG0 + hif1_ofs, 0);
0237 if (is_mt7915(mdev)) {
0238 mt76_wr(dev, MT_WFDMA1_PRI_DLY_INT_CFG0 +
0239 hif1_ofs, 0);
0240 } else {
0241 mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG1 +
0242 hif1_ofs, 0);
0243 mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG2 +
0244 hif1_ofs, 0);
0245 }
0246 }
0247
0248
0249 mt7915_dma_prefetch(dev);
0250
0251
0252 mt76_set(dev, MT_WFDMA0_BUSY_ENA,
0253 MT_WFDMA0_BUSY_ENA_TX_FIFO0 |
0254 MT_WFDMA0_BUSY_ENA_TX_FIFO1 |
0255 MT_WFDMA0_BUSY_ENA_RX_FIFO);
0256
0257 if (is_mt7915(mdev))
0258 mt76_set(dev, MT_WFDMA1_BUSY_ENA,
0259 MT_WFDMA1_BUSY_ENA_TX_FIFO0 |
0260 MT_WFDMA1_BUSY_ENA_TX_FIFO1 |
0261 MT_WFDMA1_BUSY_ENA_RX_FIFO);
0262
0263 if (dev->hif2) {
0264 mt76_set(dev, MT_WFDMA0_BUSY_ENA + hif1_ofs,
0265 MT_WFDMA0_PCIE1_BUSY_ENA_TX_FIFO0 |
0266 MT_WFDMA0_PCIE1_BUSY_ENA_TX_FIFO1 |
0267 MT_WFDMA0_PCIE1_BUSY_ENA_RX_FIFO);
0268
0269 if (is_mt7915(mdev))
0270 mt76_set(dev, MT_WFDMA1_BUSY_ENA + hif1_ofs,
0271 MT_WFDMA1_PCIE1_BUSY_ENA_TX_FIFO0 |
0272 MT_WFDMA1_PCIE1_BUSY_ENA_TX_FIFO1 |
0273 MT_WFDMA1_PCIE1_BUSY_ENA_RX_FIFO);
0274 }
0275
0276 mt76_poll(dev, MT_WFDMA_EXT_CSR_HIF_MISC,
0277 MT_WFDMA_EXT_CSR_HIF_MISC_BUSY, 0, 1000);
0278
0279
0280 mt76_set(dev, MT_WFDMA0_GLO_CFG,
0281 MT_WFDMA0_GLO_CFG_TX_DMA_EN |
0282 MT_WFDMA0_GLO_CFG_RX_DMA_EN |
0283 MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
0284 MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
0285
0286 if (is_mt7915(mdev))
0287 mt76_set(dev, MT_WFDMA1_GLO_CFG,
0288 MT_WFDMA1_GLO_CFG_TX_DMA_EN |
0289 MT_WFDMA1_GLO_CFG_RX_DMA_EN |
0290 MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
0291 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO);
0292
0293 if (dev->hif2) {
0294 mt76_set(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
0295 MT_WFDMA0_GLO_CFG_TX_DMA_EN |
0296 MT_WFDMA0_GLO_CFG_RX_DMA_EN |
0297 MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
0298 MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
0299
0300 if (is_mt7915(mdev))
0301 mt76_set(dev, MT_WFDMA1_GLO_CFG + hif1_ofs,
0302 MT_WFDMA1_GLO_CFG_TX_DMA_EN |
0303 MT_WFDMA1_GLO_CFG_RX_DMA_EN |
0304 MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
0305 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO);
0306
0307 mt76_set(dev, MT_WFDMA_HOST_CONFIG,
0308 MT_WFDMA_HOST_CONFIG_PDMA_BAND);
0309 }
0310
0311
0312 irq_mask = MT_INT_RX_DONE_MCU |
0313 MT_INT_TX_DONE_MCU |
0314 MT_INT_MCU_CMD;
0315
0316 if (!dev->phy.band_idx)
0317 irq_mask |= MT_INT_BAND0_RX_DONE;
0318
0319 if (dev->dbdc_support || dev->phy.band_idx)
0320 irq_mask |= MT_INT_BAND1_RX_DONE;
0321
0322 if (mtk_wed_device_active(&dev->mt76.mmio.wed)) {
0323 u32 wed_irq_mask = irq_mask;
0324
0325 wed_irq_mask |= MT_INT_TX_DONE_BAND0 | MT_INT_TX_DONE_BAND1;
0326 mt76_wr(dev, MT_INT_WED_MASK_CSR, wed_irq_mask);
0327 mtk_wed_device_start(&dev->mt76.mmio.wed, wed_irq_mask);
0328 }
0329
0330 mt7915_irq_enable(dev, irq_mask);
0331
0332 return 0;
0333 }
0334
0335 int mt7915_dma_init(struct mt7915_dev *dev, struct mt7915_phy *phy2)
0336 {
0337 struct mt76_dev *mdev = &dev->mt76;
0338 u32 wa_rx_base, wa_rx_idx;
0339 u32 hif1_ofs = 0;
0340 int ret;
0341
0342 mt7915_dma_config(dev);
0343
0344 mt76_dma_attach(&dev->mt76);
0345
0346 if (dev->hif2)
0347 hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
0348
0349 mt7915_dma_disable(dev, true);
0350
0351 if (mtk_wed_device_active(&dev->mt76.mmio.wed)) {
0352 mt76_set(dev, MT_WFDMA_HOST_CONFIG, MT_WFDMA_HOST_CONFIG_WED);
0353
0354 mt76_wr(dev, MT_WFDMA_WED_RING_CONTROL,
0355 FIELD_PREP(MT_WFDMA_WED_RING_CONTROL_TX0, 18) |
0356 FIELD_PREP(MT_WFDMA_WED_RING_CONTROL_TX1, 19) |
0357 FIELD_PREP(MT_WFDMA_WED_RING_CONTROL_RX1, 1));
0358 } else {
0359 mt76_clear(dev, MT_WFDMA_HOST_CONFIG, MT_WFDMA_HOST_CONFIG_WED);
0360 }
0361
0362
0363 ret = mt7915_init_tx_queues(&dev->phy,
0364 MT_TXQ_ID(dev->phy.band_idx),
0365 MT7915_TX_RING_SIZE,
0366 MT_TXQ_RING_BASE(0));
0367 if (ret)
0368 return ret;
0369
0370 if (phy2) {
0371 ret = mt7915_init_tx_queues(phy2,
0372 MT_TXQ_ID(phy2->band_idx),
0373 MT7915_TX_RING_SIZE,
0374 MT_TXQ_RING_BASE(1));
0375 if (ret)
0376 return ret;
0377 }
0378
0379
0380 ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WM,
0381 MT_MCUQ_ID(MT_MCUQ_WM),
0382 MT7915_TX_MCU_RING_SIZE,
0383 MT_MCUQ_RING_BASE(MT_MCUQ_WM));
0384 if (ret)
0385 return ret;
0386
0387
0388 ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WA,
0389 MT_MCUQ_ID(MT_MCUQ_WA),
0390 MT7915_TX_MCU_RING_SIZE,
0391 MT_MCUQ_RING_BASE(MT_MCUQ_WA));
0392 if (ret)
0393 return ret;
0394
0395
0396 ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_FWDL,
0397 MT_MCUQ_ID(MT_MCUQ_FWDL),
0398 MT7915_TX_FWDL_RING_SIZE,
0399 MT_MCUQ_RING_BASE(MT_MCUQ_FWDL));
0400 if (ret)
0401 return ret;
0402
0403
0404 ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU],
0405 MT_RXQ_ID(MT_RXQ_MCU),
0406 MT7915_RX_MCU_RING_SIZE,
0407 MT_RX_BUF_SIZE,
0408 MT_RXQ_RING_BASE(MT_RXQ_MCU));
0409 if (ret)
0410 return ret;
0411
0412
0413 if (mtk_wed_device_active(&dev->mt76.mmio.wed)) {
0414 wa_rx_base = MT_WED_RX_RING_BASE;
0415 wa_rx_idx = MT7915_RXQ_MCU_WA;
0416 dev->mt76.q_rx[MT_RXQ_MCU_WA].flags = MT_WED_Q_TXFREE;
0417 } else {
0418 wa_rx_base = MT_RXQ_RING_BASE(MT_RXQ_MCU_WA);
0419 wa_rx_idx = MT_RXQ_ID(MT_RXQ_MCU_WA);
0420 }
0421 ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU_WA],
0422 wa_rx_idx, MT7915_RX_MCU_RING_SIZE,
0423 MT_RX_BUF_SIZE, wa_rx_base);
0424 if (ret)
0425 return ret;
0426
0427
0428 if (!dev->phy.band_idx) {
0429 ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN],
0430 MT_RXQ_ID(MT_RXQ_MAIN),
0431 MT7915_RX_RING_SIZE,
0432 MT_RX_BUF_SIZE,
0433 MT_RXQ_RING_BASE(MT_RXQ_MAIN));
0434 if (ret)
0435 return ret;
0436 }
0437
0438
0439 if (!is_mt7915(mdev)) {
0440 ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN_WA],
0441 MT_RXQ_ID(MT_RXQ_MAIN_WA),
0442 MT7915_RX_MCU_RING_SIZE,
0443 MT_RX_BUF_SIZE,
0444 MT_RXQ_RING_BASE(MT_RXQ_MAIN_WA));
0445 if (ret)
0446 return ret;
0447 }
0448
0449 if (dev->dbdc_support || dev->phy.band_idx) {
0450
0451 ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_BAND1],
0452 MT_RXQ_ID(MT_RXQ_BAND1),
0453 MT7915_RX_RING_SIZE,
0454 MT_RX_BUF_SIZE,
0455 MT_RXQ_RING_BASE(MT_RXQ_BAND1) + hif1_ofs);
0456 if (ret)
0457 return ret;
0458
0459
0460 ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_BAND1_WA],
0461 MT_RXQ_ID(MT_RXQ_BAND1_WA),
0462 MT7915_RX_MCU_RING_SIZE,
0463 MT_RX_BUF_SIZE,
0464 MT_RXQ_RING_BASE(MT_RXQ_BAND1_WA) + hif1_ofs);
0465 if (ret)
0466 return ret;
0467 }
0468
0469 ret = mt76_init_queues(dev, mt76_dma_rx_poll);
0470 if (ret < 0)
0471 return ret;
0472
0473 netif_napi_add_tx(&dev->mt76.tx_napi_dev, &dev->mt76.tx_napi,
0474 mt7915_poll_tx);
0475 napi_enable(&dev->mt76.tx_napi);
0476
0477 mt7915_dma_enable(dev);
0478
0479 return 0;
0480 }
0481
0482 void mt7915_dma_cleanup(struct mt7915_dev *dev)
0483 {
0484 mt7915_dma_disable(dev, true);
0485
0486 mt76_dma_cleanup(&dev->mt76);
0487 }