generic: copy backport, hack, pending patch and config from 5.15 to 6.1
[openwrt/openwrt.git] / target / linux / generic / backport-6.1 / 729-12-v6.2-net-ethernet-mtk_wed-update-mtk_wed_stop.patch
diff --git a/target/linux/generic/backport-6.1/729-12-v6.2-net-ethernet-mtk_wed-update-mtk_wed_stop.patch b/target/linux/generic/backport-6.1/729-12-v6.2-net-ethernet-mtk_wed-update-mtk_wed_stop.patch
new file mode 100644 (file)
index 0000000..dfc0f8c
--- /dev/null
@@ -0,0 +1,98 @@
+From: Lorenzo Bianconi <lorenzo@kernel.org>
+Date: Thu, 24 Nov 2022 16:22:53 +0100
+Subject: [PATCH] net: ethernet: mtk_wed: update mtk_wed_stop
+
+Update mtk_wed_stop routine and rename old mtk_wed_stop() to
+mtk_wed_deinit(). This is a preliminary patch to add Wireless Ethernet
+Dispatcher reset support.
+
+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: Paolo Abeni <pabeni@redhat.com>
+---
+
+--- a/drivers/net/ethernet/mediatek/mtk_wed.c
++++ b/drivers/net/ethernet/mediatek/mtk_wed.c
+@@ -539,14 +539,8 @@ mtk_wed_dma_disable(struct mtk_wed_devic
+ static void
+ mtk_wed_stop(struct mtk_wed_device *dev)
+ {
+-      mtk_wed_dma_disable(dev);
+       mtk_wed_set_ext_int(dev, false);
+-      wed_clr(dev, MTK_WED_CTRL,
+-              MTK_WED_CTRL_WDMA_INT_AGENT_EN |
+-              MTK_WED_CTRL_WPDMA_INT_AGENT_EN |
+-              MTK_WED_CTRL_WED_TX_BM_EN |
+-              MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
+       wed_w32(dev, MTK_WED_WPDMA_INT_TRIGGER, 0);
+       wed_w32(dev, MTK_WED_WDMA_INT_TRIGGER, 0);
+       wdma_w32(dev, MTK_WDMA_INT_MASK, 0);
+@@ -558,7 +552,27 @@ mtk_wed_stop(struct mtk_wed_device *dev)
+       wed_w32(dev, MTK_WED_EXT_INT_MASK1, 0);
+       wed_w32(dev, MTK_WED_EXT_INT_MASK2, 0);
+-      wed_clr(dev, MTK_WED_CTRL, MTK_WED_CTRL_WED_RX_BM_EN);
++}
++
++static void
++mtk_wed_deinit(struct mtk_wed_device *dev)
++{
++      mtk_wed_stop(dev);
++      mtk_wed_dma_disable(dev);
++
++      wed_clr(dev, MTK_WED_CTRL,
++              MTK_WED_CTRL_WDMA_INT_AGENT_EN |
++              MTK_WED_CTRL_WPDMA_INT_AGENT_EN |
++              MTK_WED_CTRL_WED_TX_BM_EN |
++              MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
++
++      if (dev->hw->version == 1)
++              return;
++
++      wed_clr(dev, MTK_WED_CTRL,
++              MTK_WED_CTRL_RX_ROUTE_QM_EN |
++              MTK_WED_CTRL_WED_RX_BM_EN |
++              MTK_WED_CTRL_RX_RRO_QM_EN);
+ }
+ static void
+@@ -568,7 +582,7 @@ mtk_wed_detach(struct mtk_wed_device *de
+       mutex_lock(&hw_lock);
+-      mtk_wed_stop(dev);
++      mtk_wed_deinit(dev);
+       mtk_wdma_rx_reset(dev);
+       mtk_wed_reset(dev, MTK_WED_RESET_WED);
+@@ -677,7 +691,7 @@ mtk_wed_hw_init_early(struct mtk_wed_dev
+ {
+       u32 mask, set;
+-      mtk_wed_stop(dev);
++      mtk_wed_deinit(dev);
+       mtk_wed_reset(dev, MTK_WED_RESET_WED);
+       mtk_wed_set_wpdma(dev);
+--- a/include/linux/soc/mediatek/mtk_wed.h
++++ b/include/linux/soc/mediatek/mtk_wed.h
+@@ -234,6 +234,8 @@ mtk_wed_get_rx_capa(struct mtk_wed_devic
+       (_dev)->ops->ppe_check(_dev, _skb, _reason, _hash)
+ #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) \
+       (_dev)->ops->msg_update(_dev, _id, _msg, _len)
++#define mtk_wed_device_stop(_dev) (_dev)->ops->stop(_dev)
++#define mtk_wed_device_dma_reset(_dev) (_dev)->ops->reset_dma(_dev)
+ #else
+ static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
+ {
+@@ -250,6 +252,8 @@ static inline bool mtk_wed_device_active
+ #define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) -ENODEV
+ #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash)  do {} while (0)
+ #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) -ENODEV
++#define mtk_wed_device_stop(_dev) do {} while (0)
++#define mtk_wed_device_dma_reset(_dev) do {} while (0)
+ #endif
+ #endif