Currently WED v3 tx wdma ring, ring reset happens in a separate code block unconditionally. Moreover, v3 has double the size of wdma_desc and has different init values. mtk_wed_ring_reset doens't deal with that and would corrupt the wdma_desc. Fix this by skipping mtk_wed_ring_reset in mtk_wdma_tx_ring_setup for WED v3. Fixes: e2f64db13aa1 ("net: ethernet: mtk_wed: introduce WED support for MT7988") Signed-off-by: Zhi-Jun You --- Changes in v4: - no change - Link to v3: https://lore.kernel.org/all/20260724172040.1653-1-hujy652@gmail.com/ Changes in v3: - new patch addressing WED v3 ring reset issue raised by Sashiko - Link to the review: https://lore.kernel.org/netdev/20260630144831.1109-1-hujy652@gmail.com/ --- drivers/net/ethernet/mediatek/mtk_wed.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c index 53d3b7e00e1c..d55042ccaff1 100644 --- a/drivers/net/ethernet/mediatek/mtk_wed.c +++ b/drivers/net/ethernet/mediatek/mtk_wed.c @@ -1938,7 +1938,7 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size, 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) + if (!mtk_wed_is_v3_or_greater(dev->hw) && reset) mtk_wed_ring_reset(wdma, MTK_WED_WDMA_RING_SIZE, true); if (!idx) { -- 2.47.3