729-14-v6.2-net-ethernet-mtk_wed-add-reset-to-tx_ring_setup-call.patch 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. From: Lorenzo Bianconi <[email protected]>
  2. Date: Thu, 24 Nov 2022 16:22:55 +0100
  3. Subject: [PATCH] net: ethernet: mtk_wed: add reset to tx_ring_setup callback
  4. Introduce reset parameter to mtk_wed_tx_ring_setup signature.
  5. This is a preliminary patch to add Wireless Ethernet Dispatcher reset
  6. support.
  7. Co-developed-by: Sujuan Chen <[email protected]>
  8. Signed-off-by: Sujuan Chen <[email protected]>
  9. Signed-off-by: Lorenzo Bianconi <[email protected]>
  10. Signed-off-by: Paolo Abeni <[email protected]>
  11. ---
  12. --- a/drivers/net/ethernet/mediatek/mtk_wed.c
  13. +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
  14. @@ -1181,7 +1181,8 @@ mtk_wed_ring_alloc(struct mtk_wed_device
  15. }
  16. static int
  17. -mtk_wed_wdma_rx_ring_setup(struct mtk_wed_device *dev, int idx, int size)
  18. +mtk_wed_wdma_rx_ring_setup(struct mtk_wed_device *dev, int idx, int size,
  19. + bool reset)
  20. {
  21. u32 desc_size = sizeof(struct mtk_wdma_desc) * dev->hw->version;
  22. struct mtk_wed_ring *wdma;
  23. @@ -1190,8 +1191,8 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_we
  24. return -EINVAL;
  25. wdma = &dev->rx_wdma[idx];
  26. - if (mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE, desc_size,
  27. - true))
  28. + if (!reset && mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE,
  29. + desc_size, true))
  30. return -ENOMEM;
  31. wdma_w32(dev, MTK_WDMA_RING_RX(idx) + MTK_WED_RING_OFS_BASE,
  32. @@ -1389,7 +1390,7 @@ mtk_wed_start(struct mtk_wed_device *dev
  33. for (i = 0; i < ARRAY_SIZE(dev->rx_wdma); i++)
  34. if (!dev->rx_wdma[i].desc)
  35. - mtk_wed_wdma_rx_ring_setup(dev, i, 16);
  36. + mtk_wed_wdma_rx_ring_setup(dev, i, 16, false);
  37. mtk_wed_hw_init(dev);
  38. mtk_wed_configure_irq(dev, irq_mask);
  39. @@ -1498,7 +1499,8 @@ unlock:
  40. }
  41. static int
  42. -mtk_wed_tx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs)
  43. +mtk_wed_tx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs,
  44. + bool reset)
  45. {
  46. struct mtk_wed_ring *ring = &dev->tx_ring[idx];
  47. @@ -1517,11 +1519,12 @@ mtk_wed_tx_ring_setup(struct mtk_wed_dev
  48. if (WARN_ON(idx >= ARRAY_SIZE(dev->tx_ring)))
  49. return -EINVAL;
  50. - if (mtk_wed_ring_alloc(dev, ring, MTK_WED_TX_RING_SIZE,
  51. - sizeof(*ring->desc), true))
  52. + if (!reset && mtk_wed_ring_alloc(dev, ring, MTK_WED_TX_RING_SIZE,
  53. + sizeof(*ring->desc), true))
  54. return -ENOMEM;
  55. - if (mtk_wed_wdma_rx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE))
  56. + if (mtk_wed_wdma_rx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE,
  57. + reset))
  58. return -ENOMEM;
  59. ring->reg_base = MTK_WED_RING_TX(idx);
  60. --- a/include/linux/soc/mediatek/mtk_wed.h
  61. +++ b/include/linux/soc/mediatek/mtk_wed.h
  62. @@ -158,7 +158,7 @@ struct mtk_wed_device {
  63. struct mtk_wed_ops {
  64. int (*attach)(struct mtk_wed_device *dev);
  65. int (*tx_ring_setup)(struct mtk_wed_device *dev, int ring,
  66. - void __iomem *regs);
  67. + void __iomem *regs, bool reset);
  68. int (*rx_ring_setup)(struct mtk_wed_device *dev, int ring,
  69. void __iomem *regs);
  70. int (*txfree_ring_setup)(struct mtk_wed_device *dev,
  71. @@ -216,8 +216,8 @@ mtk_wed_get_rx_capa(struct mtk_wed_devic
  72. #define mtk_wed_device_active(_dev) !!(_dev)->ops
  73. #define mtk_wed_device_detach(_dev) (_dev)->ops->detach(_dev)
  74. #define mtk_wed_device_start(_dev, _mask) (_dev)->ops->start(_dev, _mask)
  75. -#define mtk_wed_device_tx_ring_setup(_dev, _ring, _regs) \
  76. - (_dev)->ops->tx_ring_setup(_dev, _ring, _regs)
  77. +#define mtk_wed_device_tx_ring_setup(_dev, _ring, _regs, _reset) \
  78. + (_dev)->ops->tx_ring_setup(_dev, _ring, _regs, _reset)
  79. #define mtk_wed_device_txfree_ring_setup(_dev, _regs) \
  80. (_dev)->ops->txfree_ring_setup(_dev, _regs)
  81. #define mtk_wed_device_reg_read(_dev, _reg) \
  82. @@ -243,7 +243,7 @@ static inline bool mtk_wed_device_active
  83. }
  84. #define mtk_wed_device_detach(_dev) do {} while (0)
  85. #define mtk_wed_device_start(_dev, _mask) do {} while (0)
  86. -#define mtk_wed_device_tx_ring_setup(_dev, _ring, _regs) -ENODEV
  87. +#define mtk_wed_device_tx_ring_setup(_dev, _ring, _regs, _reset) -ENODEV
  88. #define mtk_wed_device_txfree_ring_setup(_dev, _ring, _regs) -ENODEV
  89. #define mtk_wed_device_reg_read(_dev, _reg) 0
  90. #define mtk_wed_device_reg_write(_dev, _reg, _val) do {} while (0)