blob: d8c1c8ce8219f85db56809a0eae26ea5b1d654c8 [file] [log] [blame]
From 7c68ae1b991064bc0904313c56b83d2f3e03ccd7 Mon Sep 17 00:00:00 2001
From: Sujuan Chen <sujuan.chen@mediatek.com>
Date: Mon, 18 Sep 2023 11:03:33 +0800
Subject: [PATCH 07/24] add-wed-tx-wds-support-for-netsys2
---
drivers/net/ethernet/mediatek/mtk_wed.c | 6 ++++--
drivers/net/ethernet/mediatek/mtk_wed_regs.h | 1 +
include/linux/soc/mediatek/mtk_wed.h | 3 +++
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
index 02e06a8..ea8b2db 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
@@ -813,7 +813,7 @@ mtk_wed_start(struct mtk_wed_device *dev, u32 irq_mask)
val |= BIT(0) | (BIT(1) * !!dev->hw->index);
regmap_write(dev->hw->mirror, dev->hw->index * 4, val);
} else {
- mtk_wed_set_512_support(dev, true);
+ mtk_wed_set_512_support(dev, dev->wlan.wcid_512);
}
mtk_wed_dma_enable(dev);
@@ -869,9 +869,11 @@ mtk_wed_attach(struct mtk_wed_device *dev)
mtk_wed_hw_init_early(dev);
- if (hw->hifsys)
+ if (hw->version == 1)
regmap_update_bits(hw->hifsys, HIFSYS_DMA_AG_MAP,
BIT(hw->index), 0);
+ else
+ dev->rev_id = wed_r32(dev, MTK_WED_REV_ID);
out:
mutex_unlock(&hw_lock);
diff --git a/drivers/net/ethernet/mediatek/mtk_wed_regs.h b/drivers/net/ethernet/mediatek/mtk_wed_regs.h
index e66acda..e797e9d 100644
--- a/drivers/net/ethernet/mediatek/mtk_wed_regs.h
+++ b/drivers/net/ethernet/mediatek/mtk_wed_regs.h
@@ -26,6 +26,7 @@ struct mtk_wdma_desc {
#define MTK_WED_REV_ID 0x000
#define MTK_WED_REV_ID_MAJOR GENMASK(7, 0)
#endif
+#define MTK_WED_REV_ID_MINOR GENMASK(27, 16)
#define MTK_WED_RESET 0x008
#define MTK_WED_RESET_TX_BM BIT(0)
diff --git a/include/linux/soc/mediatek/mtk_wed.h b/include/linux/soc/mediatek/mtk_wed.h
index 4db70b0..00036f9 100644
--- a/include/linux/soc/mediatek/mtk_wed.h
+++ b/include/linux/soc/mediatek/mtk_wed.h
@@ -35,6 +35,7 @@ struct mtk_wed_device {
bool init_done, running;
int wdma_idx;
int irq;
+ u32 rev_id;
struct mtk_wed_ring tx_ring[MTK_WED_TX_QUEUES];
struct mtk_wed_ring txfree_ring;
@@ -68,6 +69,8 @@ struct mtk_wed_device {
u16 token_start;
unsigned int nbuf;
+ bool wcid_512;
+
u32 (*init_buf)(void *ptr, dma_addr_t phys, int token_id);
int (*offload_enable)(struct mtk_wed_device *wed);
void (*offload_disable)(struct mtk_wed_device *wed);
--
2.18.0