blob: 27977ac3c5d712cc3ddd352e63a09a651da3f41e [file] [log] [blame]
developere0cbe332022-09-10 17:36:02 +08001From 3bddc232ca043699e893d279a3ec1f72ff6b9fae Mon Sep 17 00:00:00 2001
2From: Sujuan Chen <sujuan.chen@mediatek.com>
3Date: Sat, 10 Sep 2022 15:42:32 +0800
4Subject: [PATCH] 9996-add-wed-tx-wds-support-on-panther
5
6Signed-off-by: Sujuan Chen <sujuan.chen@mediatek.com>
7---
8 drivers/net/ethernet/mediatek/mtk_wed.c | 6 ++++++
9 drivers/net/ethernet/mediatek/mtk_wed_regs.h | 1 +
10 include/linux/soc/mediatek/mtk_wed.h | 1 +
11 3 files changed, 8 insertions(+)
12
13diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
14index 48b0353..2700176 100644
15--- a/drivers/net/ethernet/mediatek/mtk_wed.c
16+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
17@@ -809,6 +809,7 @@ mtk_wed_attach(struct mtk_wed_device *dev)
18 __releases(RCU)
19 {
20 struct mtk_wed_hw *hw;
21+ u16 ver;
22 int ret = 0;
23
24 RCU_LOCKDEP_WARN(!rcu_read_lock_held(),
25@@ -839,6 +840,11 @@ mtk_wed_attach(struct mtk_wed_device *dev)
26
27 dev->ver = FIELD_GET(MTK_WED_REV_ID_MAJOR,
28 wed_r32(dev, MTK_WED_REV_ID));
29+ if (dev->ver > MTK_WED_V1)
30+ ver = FIELD_GET(MTK_WED_REV_ID_MINOR,
31+ wed_r32(dev, MTK_WED_REV_ID));
32+
33+ dev->rev_id = ((dev->ver << 28) | ver << 16);
34
35 ret = mtk_wed_buffer_alloc(dev);
36 if (ret) {
37diff --git a/drivers/net/ethernet/mediatek/mtk_wed_regs.h b/drivers/net/ethernet/mediatek/mtk_wed_regs.h
38index e107de7..b189761 100644
39--- a/drivers/net/ethernet/mediatek/mtk_wed_regs.h
40+++ b/drivers/net/ethernet/mediatek/mtk_wed_regs.h
41@@ -31,6 +31,7 @@ struct mtk_wdma_desc {
42 #define MTK_WED_REV_ID 0x000
43 #define MTK_WED_REV_ID_MAJOR GENMASK(7, 0)
44 #endif
45+#define MTK_WED_REV_ID_MINOR GENMASK(27, 16)
46
47 #define MTK_WED_RESET 0x008
48 #define MTK_WED_RESET_TX_BM BIT(0)
49diff --git a/include/linux/soc/mediatek/mtk_wed.h b/include/linux/soc/mediatek/mtk_wed.h
50index ffd547a..631360b 100644
51--- a/include/linux/soc/mediatek/mtk_wed.h
52+++ b/include/linux/soc/mediatek/mtk_wed.h
53@@ -42,6 +42,7 @@ struct mtk_wed_device {
54 int wdma_idx;
55 int irq;
56 u8 ver;
57+ u32 rev_id;
58
59 struct mtk_wed_ring tx_ring[MTK_WED_TX_QUEUES];
60 struct mtk_wed_ring txfree_ring;
61--
622.18.0
63