generic: copy backport, hack, pending patch and config from 5.15 to 6.1
[openwrt/openwrt.git] / target / linux / generic / backport-6.1 / 729-09-v6.2-net-ethernet-mtk_wed-add-wcid-overwritten-support-fo.patch
diff --git a/target/linux/generic/backport-6.1/729-09-v6.2-net-ethernet-mtk_wed-add-wcid-overwritten-support-fo.patch b/target/linux/generic/backport-6.1/729-09-v6.2-net-ethernet-mtk_wed-add-wcid-overwritten-support-fo.patch
new file mode 100644 (file)
index 0000000..d91d829
--- /dev/null
@@ -0,0 +1,80 @@
+From: Sujuan Chen <sujuan.chen@mediatek.com>
+Date: Thu, 24 Nov 2022 11:18:14 +0800
+Subject: [PATCH] net: ethernet: mtk_wed: add wcid overwritten support for wed
+ v1
+
+All wed versions should enable the wcid overwritten feature,
+since the wcid size is controlled by the wlan driver.
+
+Tested-by: Sujuan Chen <sujuan.chen@mediatek.com>
+Co-developed-by: Bo Jiao <bo.jiao@mediatek.com>
+Signed-off-by: Bo Jiao <bo.jiao@mediatek.com>
+Signed-off-by: Sujuan Chen <sujuan.chen@mediatek.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+
+--- a/drivers/net/ethernet/mediatek/mtk_wed.c
++++ b/drivers/net/ethernet/mediatek/mtk_wed.c
+@@ -526,9 +526,9 @@ mtk_wed_dma_disable(struct mtk_wed_devic
+                       MTK_WED_WPDMA_RX_D_RX_DRV_EN);
+               wed_clr(dev, MTK_WED_WDMA_GLO_CFG,
+                       MTK_WED_WDMA_GLO_CFG_TX_DDONE_CHK);
+-
+-              mtk_wed_set_512_support(dev, false);
+       }
++
++      mtk_wed_set_512_support(dev, false);
+ }
+ static void
+@@ -1297,9 +1297,10 @@ mtk_wed_start(struct mtk_wed_device *dev
+               if (mtk_wed_rro_cfg(dev))
+                       return;
+-              mtk_wed_set_512_support(dev, dev->wlan.wcid_512);
+       }
++      mtk_wed_set_512_support(dev, dev->wlan.wcid_512);
++
+       mtk_wed_dma_enable(dev);
+       dev->running = true;
+ }
+@@ -1365,11 +1366,13 @@ mtk_wed_attach(struct mtk_wed_device *de
+       }
+       mtk_wed_hw_init_early(dev);
+-      if (hw->version == 1)
++      if (hw->version == 1) {
+               regmap_update_bits(hw->hifsys, HIFSYS_DMA_AG_MAP,
+                                  BIT(hw->index), 0);
+-      else
++      } else {
++              dev->rev_id = wed_r32(dev, MTK_WED_REV_ID);
+               ret = mtk_wed_wo_init(hw);
++      }
+ out:
+       if (ret)
+               mtk_wed_detach(dev);
+--- a/drivers/net/ethernet/mediatek/mtk_wed_regs.h
++++ b/drivers/net/ethernet/mediatek/mtk_wed_regs.h
+@@ -20,6 +20,8 @@ struct mtk_wdma_desc {
+       __le32 info;
+ } __packed __aligned(4);
++#define MTK_WED_REV_ID                                        0x004
++
+ #define MTK_WED_RESET                                 0x008
+ #define MTK_WED_RESET_TX_BM                           BIT(0)
+ #define MTK_WED_RESET_TX_FREE_AGENT                   BIT(4)
+--- a/include/linux/soc/mediatek/mtk_wed.h
++++ b/include/linux/soc/mediatek/mtk_wed.h
+@@ -85,6 +85,9 @@ struct mtk_wed_device {
+       int irq;
+       u8 version;
++      /* used by wlan driver */
++      u32 rev_id;
++
+       struct mtk_wed_ring tx_ring[MTK_WED_TX_QUEUES];
+       struct mtk_wed_ring rx_ring[MTK_WED_RX_QUEUES];
+       struct mtk_wed_ring txfree_ring;