752-31-v6.18-net-mediatek-wed-Introduce-MT7992-WED-support-to-MT7.patch 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. From: Lorenzo Bianconi <[email protected]>
  2. Date: Tue, 12 Aug 2025 06:57:23 +0200
  3. Subject: [PATCH] net: mediatek: wed: Introduce MT7992 WED support to MT7988
  4. SoC
  5. Introduce the second WDMA RX ring in WED driver for MT7988 SoC since the
  6. Mediatek MT7992 WiFi chipset supports two separated WDMA rings.
  7. Add missing MT7988 configurations to properly support WED for MT7992 in
  8. MT76 driver.
  9. Co-developed-by: Rex Lu <[email protected]>
  10. Signed-off-by: Rex Lu <[email protected]>
  11. Signed-off-by: Lorenzo Bianconi <[email protected]>
  12. Link: https://patch.msgid.link/[email protected]
  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. @@ -59,7 +59,9 @@ struct mtk_wed_flow_block_priv {
  18. static const struct mtk_wed_soc_data mt7622_data = {
  19. .regmap = {
  20. .tx_bm_tkid = 0x088,
  21. - .wpdma_rx_ring0 = 0x770,
  22. + .wpdma_rx_ring = {
  23. + 0x770,
  24. + },
  25. .reset_idx_tx_mask = GENMASK(3, 0),
  26. .reset_idx_rx_mask = GENMASK(17, 16),
  27. },
  28. @@ -70,7 +72,9 @@ static const struct mtk_wed_soc_data mt7
  29. static const struct mtk_wed_soc_data mt7986_data = {
  30. .regmap = {
  31. .tx_bm_tkid = 0x0c8,
  32. - .wpdma_rx_ring0 = 0x770,
  33. + .wpdma_rx_ring = {
  34. + 0x770,
  35. + },
  36. .reset_idx_tx_mask = GENMASK(1, 0),
  37. .reset_idx_rx_mask = GENMASK(7, 6),
  38. },
  39. @@ -81,7 +85,10 @@ static const struct mtk_wed_soc_data mt7
  40. static const struct mtk_wed_soc_data mt7988_data = {
  41. .regmap = {
  42. .tx_bm_tkid = 0x0c8,
  43. - .wpdma_rx_ring0 = 0x7d0,
  44. + .wpdma_rx_ring = {
  45. + 0x7d0,
  46. + 0x7d8,
  47. + },
  48. .reset_idx_tx_mask = GENMASK(1, 0),
  49. .reset_idx_rx_mask = GENMASK(7, 6),
  50. },
  51. @@ -621,8 +628,8 @@ mtk_wed_amsdu_init(struct mtk_wed_device
  52. return ret;
  53. }
  54. - /* eagle E1 PCIE1 tx ring 22 flow control issue */
  55. - if (dev->wlan.id == 0x7991)
  56. + /* Kite and Eagle E1 PCIE1 tx ring 22 flow control issue */
  57. + if (dev->wlan.id == 0x7991 || dev->wlan.id == 0x7992)
  58. wed_clr(dev, MTK_WED_AMSDU_FIFO, MTK_WED_AMSDU_IS_PRIOR0_RING);
  59. wed_set(dev, MTK_WED_CTRL, MTK_WED_CTRL_TX_AMSDU_EN);
  60. @@ -1239,7 +1246,11 @@ mtk_wed_set_wpdma(struct mtk_wed_device
  61. return;
  62. wed_w32(dev, MTK_WED_WPDMA_RX_GLO_CFG, dev->wlan.wpdma_rx_glo);
  63. - wed_w32(dev, dev->hw->soc->regmap.wpdma_rx_ring0, dev->wlan.wpdma_rx);
  64. + wed_w32(dev, dev->hw->soc->regmap.wpdma_rx_ring[0],
  65. + dev->wlan.wpdma_rx[0]);
  66. + if (mtk_wed_is_v3_or_greater(dev->hw))
  67. + wed_w32(dev, dev->hw->soc->regmap.wpdma_rx_ring[1],
  68. + dev->wlan.wpdma_rx[1]);
  69. if (!dev->wlan.hw_rro)
  70. return;
  71. @@ -2335,6 +2346,16 @@ mtk_wed_start(struct mtk_wed_device *dev
  72. if (!dev->rx_wdma[i].desc)
  73. mtk_wed_wdma_rx_ring_setup(dev, i, 16, false);
  74. + if (dev->wlan.hw_rro) {
  75. + for (i = 0; i < MTK_WED_RX_PAGE_QUEUES; i++) {
  76. + u32 addr = MTK_WED_RRO_MSDU_PG_CTRL0(i) +
  77. + MTK_WED_RING_OFS_COUNT;
  78. +
  79. + if (!wed_r32(dev, addr))
  80. + wed_w32(dev, addr, 1);
  81. + }
  82. + }
  83. +
  84. mtk_wed_hw_init(dev);
  85. mtk_wed_configure_irq(dev, irq_mask);
  86. --- a/drivers/net/ethernet/mediatek/mtk_wed.h
  87. +++ b/drivers/net/ethernet/mediatek/mtk_wed.h
  88. @@ -17,7 +17,7 @@ struct mtk_wed_wo;
  89. struct mtk_wed_soc_data {
  90. struct {
  91. u32 tx_bm_tkid;
  92. - u32 wpdma_rx_ring0;
  93. + u32 wpdma_rx_ring[MTK_WED_RX_QUEUES];
  94. u32 reset_idx_tx_mask;
  95. u32 reset_idx_rx_mask;
  96. } regmap;
  97. --- a/include/linux/soc/mediatek/mtk_wed.h
  98. +++ b/include/linux/soc/mediatek/mtk_wed.h
  99. @@ -147,7 +147,7 @@ struct mtk_wed_device {
  100. u32 wpdma_tx;
  101. u32 wpdma_txfree;
  102. u32 wpdma_rx_glo;
  103. - u32 wpdma_rx;
  104. + u32 wpdma_rx[MTK_WED_RX_QUEUES];
  105. u32 wpdma_rx_rro[MTK_WED_RX_QUEUES];
  106. u32 wpdma_rx_pg;