729-23-v6.3-net-ethernet-mtk_wed-add-reset-to-rx_ring_setup-call.patch 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. From: Lorenzo Bianconi <[email protected]>
  2. Date: Mon, 5 Dec 2022 12:34:42 +0100
  3. Subject: [PATCH] net: ethernet: mtk_wed: add reset to rx_ring_setup callback
  4. This patch adds reset parameter to mtk_wed_rx_ring_setup signature
  5. in order to align rx_ring_setup callback to tx_ring_setup one introduced
  6. in 'commit 23dca7a90017 ("net: ethernet: mtk_wed: add reset to
  7. tx_ring_setup callback")'
  8. Co-developed-by: Sujuan Chen <[email protected]>
  9. Signed-off-by: Sujuan Chen <[email protected]>
  10. Signed-off-by: Lorenzo Bianconi <[email protected]>
  11. Reviewed-by: Leon Romanovsky <[email protected]>
  12. Link: https://lore.kernel.org/r/29c6e7a5469e784406cf3e2920351d1207713d05.1670239984.git.lorenzo@kernel.org
  13. Signed-off-by: Jakub Kicinski <[email protected]>
  14. ---
  15. --- a/drivers/net/ethernet/mediatek/mtk_wed.c
  16. +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
  17. @@ -1259,7 +1259,8 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_we
  18. }
  19. static int
  20. -mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
  21. +mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
  22. + bool reset)
  23. {
  24. u32 desc_size = sizeof(struct mtk_wdma_desc) * dev->hw->version;
  25. struct mtk_wed_ring *wdma;
  26. @@ -1268,8 +1269,8 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_we
  27. return -EINVAL;
  28. wdma = &dev->tx_wdma[idx];
  29. - if (mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE, desc_size,
  30. - true))
  31. + if (!reset && mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE,
  32. + desc_size, true))
  33. return -ENOMEM;
  34. wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
  35. @@ -1279,6 +1280,9 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_we
  36. wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_CPU_IDX, 0);
  37. wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_DMA_IDX, 0);
  38. + if (reset)
  39. + mtk_wed_ring_reset(wdma, MTK_WED_WDMA_RING_SIZE, true);
  40. +
  41. if (!idx) {
  42. wed_w32(dev, MTK_WED_WDMA_RING_TX + MTK_WED_RING_OFS_BASE,
  43. wdma->desc_phys);
  44. @@ -1618,18 +1622,20 @@ mtk_wed_txfree_ring_setup(struct mtk_wed
  45. }
  46. static int
  47. -mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs)
  48. +mtk_wed_rx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs,
  49. + bool reset)
  50. {
  51. struct mtk_wed_ring *ring = &dev->rx_ring[idx];
  52. if (WARN_ON(idx >= ARRAY_SIZE(dev->rx_ring)))
  53. return -EINVAL;
  54. - if (mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
  55. - sizeof(*ring->desc), false))
  56. + if (!reset && mtk_wed_ring_alloc(dev, ring, MTK_WED_RX_RING_SIZE,
  57. + sizeof(*ring->desc), false))
  58. return -ENOMEM;
  59. - if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE))
  60. + if (mtk_wed_wdma_tx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE,
  61. + reset))
  62. return -ENOMEM;
  63. ring->reg_base = MTK_WED_RING_RX_DATA(idx);
  64. --- a/include/linux/soc/mediatek/mtk_wed.h
  65. +++ b/include/linux/soc/mediatek/mtk_wed.h
  66. @@ -162,7 +162,7 @@ struct mtk_wed_ops {
  67. int (*tx_ring_setup)(struct mtk_wed_device *dev, int ring,
  68. void __iomem *regs, bool reset);
  69. int (*rx_ring_setup)(struct mtk_wed_device *dev, int ring,
  70. - void __iomem *regs);
  71. + void __iomem *regs, bool reset);
  72. int (*txfree_ring_setup)(struct mtk_wed_device *dev,
  73. void __iomem *regs);
  74. int (*msg_update)(struct mtk_wed_device *dev, int cmd_id,
  75. @@ -230,8 +230,8 @@ mtk_wed_get_rx_capa(struct mtk_wed_devic
  76. (_dev)->ops->irq_get(_dev, _mask)
  77. #define mtk_wed_device_irq_set_mask(_dev, _mask) \
  78. (_dev)->ops->irq_set_mask(_dev, _mask)
  79. -#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) \
  80. - (_dev)->ops->rx_ring_setup(_dev, _ring, _regs)
  81. +#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) \
  82. + (_dev)->ops->rx_ring_setup(_dev, _ring, _regs, _reset)
  83. #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash) \
  84. (_dev)->ops->ppe_check(_dev, _skb, _reason, _hash)
  85. #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) \
  86. @@ -251,7 +251,7 @@ static inline bool mtk_wed_device_active
  87. #define mtk_wed_device_reg_write(_dev, _reg, _val) do {} while (0)
  88. #define mtk_wed_device_irq_get(_dev, _mask) 0
  89. #define mtk_wed_device_irq_set_mask(_dev, _mask) do {} while (0)
  90. -#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs) -ENODEV
  91. +#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) -ENODEV
  92. #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash) do {} while (0)
  93. #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) -ENODEV
  94. #define mtk_wed_device_stop(_dev) do {} while (0)