blob: d62d58aec7822f7e3dab122999c1ad59501c0cd2 [file] [log] [blame]
From 3ad0a83922b0778c06201d453f42b25e60c32fef Mon Sep 17 00:00:00 2001
From: "sujuan.chen" <sujuan.chen@mediatek.com>
Date: Thu, 6 Apr 2023 17:50:52 +0800
Subject: [PATCH 3011/3012] wifi: mt76: mt7915: add ctxd support for mt7916
Signed-off-by: sujuan.chen <sujuan.chen@mediatek.com>
---
mt7915/dma.c | 20 ++++++++++++++++++++
mt7915/regs.h | 15 +++++++++++++++
2 files changed, 35 insertions(+)
diff --git a/mt7915/dma.c b/mt7915/dma.c
index 3784b7b..daa01fd 100644
--- a/mt7915/dma.c
+++ b/mt7915/dma.c
@@ -433,6 +433,26 @@ int mt7915_dma_init(struct mt7915_dev *dev, struct mt7915_phy *phy2)
if (is_mt7915(mdev))
mt76_rmw(dev, MT_WFDMA0_EXT0_CFG, MT_WFDMA0_EXT0_RXWB_KEEP,
MT_WFDMA0_EXT0_RXWB_KEEP);
+ else {
+ if (mt76_rr(dev, MT_CBTOP_RESV) & 0xff == 2) {
+ mt76_set(dev, MT_WFDMA0_GLO_CFG, MT_WFDMA0_GLO_CFG_DUMMY_REG);
+ mt76_set(dev, MT_WFDMA0_CTXD_CFG, FIELD_PREP(MT_WFDMA0_CTXD_TIMEOUT, 0xa));
+ } else {
+ mt76_set(dev, MT_WFDMA0_CTXD_CFG, FIELD_PREP(MT_WFDMA0_CTXD_TIMEOUT, 0xff));
+
+ /*Delay tick set to 0xFFFF, which is about 3449us*/
+ mt76_wr(dev, MT_WFDMA_WED_DLY_INT_TICK, 0xffff);
+ }
+
+ mt76_clear(dev, MT_WFDMA0_CTXD_CFG, MT_WFDMA0_CTXD_CASCADE_NUM);
+
+ mt76_set(dev, MT_WFDMA0_CTXD_CFG,
+ FIELD_PREP(MT_WFDMA0_BAND0_CTXD_RING_IDX, 18) |
+ FIELD_PREP(MT_WFDMA0_BAND1_CTXD_RING_IDX, 19) |
+ MT_WFDMA0_BAND0_CTXD_EN | MT_WFDMA0_BAND1_CTXD_EN);
+
+ mt76_set(dev, MT_WFDMA0_CFG_EXT, MT_WFDMA0_EXT_TX_FCTRL_MODE);
+ }
}
} else {
mt76_clear(dev, MT_WFDMA_HOST_CONFIG, MT_WFDMA_HOST_CONFIG_WED);
diff --git a/mt7915/regs.h b/mt7915/regs.h
index 7955d01..2f32a00 100644
--- a/mt7915/regs.h
+++ b/mt7915/regs.h
@@ -603,6 +603,7 @@ enum offs_rev {
#define MT_WFDMA0_GLO_CFG MT_WFDMA0(0x208)
#define MT_WFDMA0_GLO_CFG_TX_DMA_EN BIT(0)
#define MT_WFDMA0_GLO_CFG_RX_DMA_EN BIT(2)
+#define MT_WFDMA0_GLO_CFG_DUMMY_REG BIT(10)
#define MT_WFDMA0_GLO_CFG_OMIT_TX_INFO BIT(28)
#define MT_WFDMA0_GLO_CFG_OMIT_RX_INFO BIT(27)
#define MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2 BIT(21)
@@ -612,6 +613,17 @@ enum offs_rev {
#define MT_WFDMA0_EXT0_CFG MT_WFDMA0(0x2b0)
#define MT_WFDMA0_EXT0_RXWB_KEEP BIT(10)
+#define MT_WFDMA0_CFG_EXT MT_WFDMA0(0x2b4)
+#define MT_WFDMA0_EXT_TX_FCTRL_MODE BIT(28)
+
+#define MT_WFDMA0_CTXD_CFG MT_WFDMA0(0x2bc)
+#define MT_WFDMA0_BAND0_CTXD_EN BIT(0)
+#define MT_WFDMA0_BAND0_CTXD_RING_IDX GENMASK(5, 1)
+#define MT_WFDMA0_BAND1_CTXD_EN BIT(6)
+#define MT_WFDMA0_BAND1_CTXD_RING_IDX GENMASK(11, 7)
+#define MT_WFDMA0_CTXD_CASCADE_NUM GENMASK(15, 12)
+#define MT_WFDMA0_CTXD_TIMEOUT GENMASK(23, 16)
+
#define MT_WFDMA0_PRI_DLY_INT_CFG0 MT_WFDMA0(0x2f0)
#define MT_WFDMA0_PRI_DLY_INT_CFG1 MT_WFDMA0(0x2f4)
#define MT_WFDMA0_PRI_DLY_INT_CFG2 MT_WFDMA0(0x2f8)
@@ -655,6 +667,8 @@ enum offs_rev {
#define MT_WFDMA_WED_RING_CONTROL_TX1 GENMASK(12, 8)
#define MT_WFDMA_WED_RING_CONTROL_RX1 GENMASK(20, 16)
+#define MT_WFDMA_WED_DLY_INT_TICK MT_WFDMA_EXT_CSR_PHYS(0x38)
+
#define MT_WFDMA_EXT_CSR_HIF_MISC MT_WFDMA_EXT_CSR_PHYS(0x44)
#define MT_WFDMA_EXT_CSR_HIF_MISC_BUSY BIT(0)
@@ -1183,6 +1197,7 @@ enum offs_rev {
#define MT_HW_BOUND 0x70010020
#define MT_HW_REV 0x70010204
+#define MT_CBTOP_RESV 0x70010210
#define MT_WF_SUBSYS_RST 0x70002600
/* PCIE MAC */
--
2.18.0