wifi: mt76: mt7915: enable wed for mt7986 chipset
authorLorenzo Bianconi <lorenzo@kernel.org>
Wed, 28 Sep 2022 09:19:42 +0000 (11:19 +0200)
committerFelix Fietkau <nbd@nbd.name>
Thu, 1 Dec 2022 16:29:12 +0000 (17:29 +0100)
Introduce wed tx support for MT7986 chipset

Tested-by: Daniel Golle <daniel@makrotopia.org>
Co-developed-by: Bo Jiao <Bo.Jiao@mediatek.com>
Signed-off-by: Bo Jiao <Bo.Jiao@mediatek.com>
Co-developed-by: Sujuan Chen <sujuan.chen@mediatek.com>
Signed-off-by: Sujuan Chen <sujuan.chen@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7915/dma.c
drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
drivers/net/wireless/mediatek/mt76/mt7915/regs.h

index 00aafc2422f3bff5f3cdd27bc97aeefb4e9ab62c..90a89cf493a9d1cb03f001c90714b95614952324 100644 (file)
@@ -324,6 +324,7 @@ static int mt7915_dma_enable(struct mt7915_dev *dev)
 
                wed_irq_mask |= MT_INT_TX_DONE_BAND0 | MT_INT_TX_DONE_BAND1;
                mt76_wr(dev, MT_INT_WED_MASK_CSR, wed_irq_mask);
+               mt76_wr(dev, MT_INT_MASK_CSR, wed_irq_mask);
                mtk_wed_device_start(&dev->mt76.mmio.wed, wed_irq_mask);
        }
 
index e75f2229b6a1e67dac2c83327776134c4adcab9c..5676d62933ad50cf6c773660bcd984947354f5fa 100644 (file)
@@ -541,7 +541,18 @@ int mt7915_mmio_wed_init(struct mt7915_dev *dev, struct pci_dev *pdev,
        wed->wlan.pci_dev = pdev;
        wed->wlan.wpdma_phys = pci_resource_start(pdev, 0) +
                               MT_WFDMA_EXT_CSR_BASE;
+       wed->wlan.wpdma_int = pci_resource_start(pdev, 0) +
+                             MT_INT_WED_SOURCE_CSR;
+       wed->wlan.wpdma_mask = pci_resource_start(pdev, 0) +
+                              MT_INT_WED_MASK_CSR;
+       wed->wlan.wpdma_tx = pci_resource_start(pdev, 0) +
+                            MT_TXQ_WED_RING_BASE;
+       wed->wlan.wpdma_txfree = pci_resource_start(pdev, 0) +
+                                MT_RXQ_WED_RING_BASE;
        wed->wlan.nbuf = 4096;
+       wed->wlan.tx_tbit[0] = MT_WED_TX_DONE_BAND0;
+       wed->wlan.tx_tbit[1] = MT_WED_TX_DONE_BAND1;
+       wed->wlan.txfree_tbit = MT_WED_TX_FREE_DONE;
        wed->wlan.token_start = MT7915_TOKEN_SIZE - wed->wlan.nbuf;
        wed->wlan.init_buf = mt7915_wed_init_buf;
        wed->wlan.offload_enable = mt7915_mmio_wed_offload_enable;
index 5920e705835a7b4ba0b9d399adf31518ffdec5e1..d9642c5817e9905893e8428d523a72162fb3b922 100644 (file)
@@ -596,6 +596,7 @@ enum offs_rev {
 #define MT_PCIE_RECOG_ID_MASK          GENMASK(30, 0)
 #define MT_PCIE_RECOG_ID_SEM           BIT(31)
 
+#define MT_INT_WED_SOURCE_CSR          MT_WFDMA_EXT_CSR(0x200)
 #define MT_INT_WED_MASK_CSR            MT_WFDMA_EXT_CSR(0x204)
 
 #define MT_WED_TX_RING_BASE            MT_WFDMA_EXT_CSR(0x300)
@@ -642,6 +643,13 @@ enum offs_rev {
 #define MT_TXQ_EXT_CTRL(q)             (MT_Q_BASE(__TXQ(q)) + 0x600 +  \
                                         MT_TXQ_ID(q)* 0x4)
 
+#define MT_TXQ_WED_RING_BASE           0xd7300
+#define MT_RXQ_WED_RING_BASE           0xd7410
+
+#define MT_WED_TX_DONE_BAND0           4
+#define MT_WED_TX_DONE_BAND1           5
+#define MT_WED_TX_FREE_DONE            1
+
 #define MT_INT_SOURCE_CSR              __REG(INT_SOURCE_CSR)
 #define MT_INT_MASK_CSR                        __REG(INT_MASK_CSR)