Reorder and update existing patches
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit 6407ef8d2b)
[rmilecki: rebase & fix mt76 compilation]
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
		
	
		
			
				
	
	
		
			107 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From: Lorenzo Bianconi <lorenzo@kernel.org>
 | 
						|
Date: Mon, 5 Dec 2022 12:34:42 +0100
 | 
						|
Subject: [PATCH] net: ethernet: mtk_wed: add reset to rx_ring_setup callback
 | 
						|
 | 
						|
This patch adds reset parameter to mtk_wed_rx_ring_setup signature
 | 
						|
in order to align rx_ring_setup callback to tx_ring_setup one introduced
 | 
						|
in 'commit 23dca7a90017 ("net: ethernet: mtk_wed: add reset to
 | 
						|
tx_ring_setup callback")'
 | 
						|
 | 
						|
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>
 | 
						|
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
 | 
						|
Link: https://lore.kernel.org/r/29c6e7a5469e784406cf3e2920351d1207713d05.1670239984.git.lorenzo@kernel.org
 | 
						|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
 | 
						|
---
 | 
						|
 | 
						|
--- a/drivers/net/ethernet/mediatek/mtk_wed.c
 | 
						|
+++ b/drivers/net/ethernet/mediatek/mtk_wed.c
 | 
						|
@@ -1252,7 +1252,8 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_we
 | 
						|
 }
 | 
						|
 
 | 
						|
 static int
 | 
						|
-mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
 | 
						|
+mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
 | 
						|
+			   bool reset)
 | 
						|
 {
 | 
						|
 	u32 desc_size = sizeof(struct mtk_wdma_desc) * dev->hw->version;
 | 
						|
 	struct mtk_wed_ring *wdma;
 | 
						|
@@ -1261,8 +1262,8 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_we
 | 
						|
 		return -EINVAL;
 | 
						|
 
 | 
						|
 	wdma = &dev->tx_wdma[idx];
 | 
						|
-	if (mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE, desc_size,
 | 
						|
-			       true))
 | 
						|
+	if (!reset && mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE,
 | 
						|
+					 desc_size, true))
 | 
						|
 		return -ENOMEM;
 | 
						|
 
 | 
						|
 	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
 | 
						|
@@ -1272,6 +1273,9 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_we
 | 
						|
 	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_CPU_IDX, 0);
 | 
						|
 	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_DMA_IDX, 0);
 | 
						|
 
 | 
						|
+	if (reset)
 | 
						|
+		mtk_wed_ring_reset(wdma, MTK_WED_WDMA_RING_SIZE, true);
 | 
						|
+
 | 
						|
 	if (!idx)  {
 | 
						|
 		wed_w32(dev, MTK_WED_WDMA_RING_TX + MTK_WED_RING_OFS_BASE,
 | 
						|
 			wdma->desc_phys);
 | 
						|
@@ -1611,18 +1615,20 @@ mtk_wed_txfree_ring_setup(struct mtk_wed
 | 
						|
 }
 | 
						|
 
 | 
						|
 static int
 | 
						|
-mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs)
 | 
						|
+mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs,
 | 
						|
+		      bool reset)
 | 
						|
 {
 | 
						|
 	struct mtk_wed_ring *ring = &dev->rx_ring[idx];
 | 
						|
 
 | 
						|
 	if (WARN_ON(idx >= ARRAY_SIZE(dev->rx_ring)))
 | 
						|
 		return -EINVAL;
 | 
						|
 
 | 
						|
-	if (mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
 | 
						|
-			       sizeof(*ring->desc), false))
 | 
						|
+	if (!reset && mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
 | 
						|
+					 sizeof(*ring->desc), false))
 | 
						|
 		return -ENOMEM;
 | 
						|
 
 | 
						|
-	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE))
 | 
						|
+	if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE,
 | 
						|
+				       reset))
 | 
						|
 		return -ENOMEM;
 | 
						|
 
 | 
						|
 	ring->reg_base = MTK_WED_RING_RX_DATA(idx);
 | 
						|
--- a/include/linux/soc/mediatek/mtk_wed.h
 | 
						|
+++ b/include/linux/soc/mediatek/mtk_wed.h
 | 
						|
@@ -162,7 +162,7 @@ struct mtk_wed_ops {
 | 
						|
 	int (*tx_ring_setup)(struct mtk_wed_device *dev, int ring,
 | 
						|
 			     void __iomem *regs, bool reset);
 | 
						|
 	int (*rx_ring_setup)(struct mtk_wed_device *dev, int ring,
 | 
						|
-			     void __iomem *regs);
 | 
						|
+			     void __iomem *regs, bool reset);
 | 
						|
 	int (*txfree_ring_setup)(struct mtk_wed_device *dev,
 | 
						|
 				 void __iomem *regs);
 | 
						|
 	int (*msg_update)(struct mtk_wed_device *dev, int cmd_id,
 | 
						|
@@ -230,8 +230,8 @@ mtk_wed_get_rx_capa(struct mtk_wed_devic
 | 
						|
 	(_dev)->ops->irq_get(_dev, _mask)
 | 
						|
 #define mtk_wed_device_irq_set_mask(_dev, _mask) \
 | 
						|
 	(_dev)->ops->irq_set_mask(_dev, _mask)
 | 
						|
-#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) \
 | 
						|
-	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs)
 | 
						|
+#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) \
 | 
						|
+	(_dev)->ops->rx_ring_setup(_dev, _ring, _regs, _reset)
 | 
						|
 #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash) \
 | 
						|
 	(_dev)->ops->ppe_check(_dev, _skb, _reason, _hash)
 | 
						|
 #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) \
 | 
						|
@@ -251,7 +251,7 @@ static inline bool mtk_wed_device_active
 | 
						|
 #define mtk_wed_device_reg_write(_dev, _reg, _val) do {} while (0)
 | 
						|
 #define mtk_wed_device_irq_get(_dev, _mask) 0
 | 
						|
 #define mtk_wed_device_irq_set_mask(_dev, _mask) do {} while (0)
 | 
						|
-#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) -ENODEV
 | 
						|
+#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) -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)
 |