752-06-v6.7-net-ethernet-mtk_wed-introduce-versioning-utility-ro.patch 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. From: Lorenzo Bianconi <[email protected]>
  2. Date: Mon, 18 Sep 2023 12:29:05 +0200
  3. Subject: [PATCH] net: ethernet: mtk_wed: introduce versioning utility routines
  4. Similar to mtk_eth_soc, introduce the following wed versioning
  5. utility routines:
  6. - mtk_wed_is_v1
  7. - mtk_wed_is_v2
  8. This is a preliminary patch to introduce WED support for MT7988 SoC
  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. @@ -278,7 +278,7 @@ mtk_wed_assign(struct mtk_wed_device *de
  15. if (!hw->wed_dev)
  16. goto out;
  17. - if (hw->version == 1)
  18. + if (mtk_wed_is_v1(hw))
  19. return NULL;
  20. /* MT7986 WED devices do not have any pcie slot restrictions */
  21. @@ -359,7 +359,7 @@ mtk_wed_tx_buffer_alloc(struct mtk_wed_d
  22. desc->buf0 = cpu_to_le32(buf_phys);
  23. desc->buf1 = cpu_to_le32(buf_phys + txd_size);
  24. - if (dev->hw->version == 1)
  25. + if (mtk_wed_is_v1(dev->hw))
  26. ctrl = FIELD_PREP(MTK_WDMA_DESC_CTRL_LEN0, txd_size) |
  27. FIELD_PREP(MTK_WDMA_DESC_CTRL_LEN1,
  28. MTK_WED_BUF_SIZE - txd_size) |
  29. @@ -498,7 +498,7 @@ mtk_wed_set_ext_int(struct mtk_wed_devic
  30. {
  31. u32 mask = MTK_WED_EXT_INT_STATUS_ERROR_MASK;
  32. - if (dev->hw->version == 1)
  33. + if (mtk_wed_is_v1(dev->hw))
  34. mask |= MTK_WED_EXT_INT_STATUS_TX_DRV_R_RESP_ERR;
  35. else
  36. mask |= MTK_WED_EXT_INT_STATUS_RX_FBUF_LO_TH |
  37. @@ -577,7 +577,7 @@ mtk_wed_dma_disable(struct mtk_wed_devic
  38. MTK_WDMA_GLO_CFG_RX_INFO1_PRERES |
  39. MTK_WDMA_GLO_CFG_RX_INFO2_PRERES);
  40. - if (dev->hw->version == 1) {
  41. + if (mtk_wed_is_v1(dev->hw)) {
  42. regmap_write(dev->hw->mirror, dev->hw->index * 4, 0);
  43. wdma_clr(dev, MTK_WDMA_GLO_CFG,
  44. MTK_WDMA_GLO_CFG_RX_INFO3_PRERES);
  45. @@ -606,7 +606,7 @@ mtk_wed_stop(struct mtk_wed_device *dev)
  46. wdma_w32(dev, MTK_WDMA_INT_MASK, 0);
  47. wdma_w32(dev, MTK_WDMA_INT_GRP2, 0);
  48. - if (dev->hw->version == 1)
  49. + if (mtk_wed_is_v1(dev->hw))
  50. return;
  51. wed_w32(dev, MTK_WED_EXT_INT_MASK1, 0);
  52. @@ -624,7 +624,7 @@ mtk_wed_deinit(struct mtk_wed_device *de
  53. MTK_WED_CTRL_WED_TX_BM_EN |
  54. MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
  55. - if (dev->hw->version == 1)
  56. + if (mtk_wed_is_v1(dev->hw))
  57. return;
  58. wed_clr(dev, MTK_WED_CTRL,
  59. @@ -730,7 +730,7 @@ mtk_wed_bus_init(struct mtk_wed_device *
  60. static void
  61. mtk_wed_set_wpdma(struct mtk_wed_device *dev)
  62. {
  63. - if (dev->hw->version == 1) {
  64. + if (mtk_wed_is_v1(dev->hw)) {
  65. wed_w32(dev, MTK_WED_WPDMA_CFG_BASE, dev->wlan.wpdma_phys);
  66. } else {
  67. mtk_wed_bus_init(dev);
  68. @@ -761,7 +761,7 @@ mtk_wed_hw_init_early(struct mtk_wed_dev
  69. MTK_WED_WDMA_GLO_CFG_IDLE_DMAD_SUPPLY;
  70. wed_m32(dev, MTK_WED_WDMA_GLO_CFG, mask, set);
  71. - if (dev->hw->version == 1) {
  72. + if (mtk_wed_is_v1(dev->hw)) {
  73. u32 offset = dev->hw->index ? 0x04000400 : 0;
  74. wdma_set(dev, MTK_WDMA_GLO_CFG,
  75. @@ -934,7 +934,7 @@ mtk_wed_hw_init(struct mtk_wed_device *d
  76. wed_w32(dev, MTK_WED_TX_BM_BUF_LEN, MTK_WED_PKT_SIZE);
  77. - if (dev->hw->version == 1) {
  78. + if (mtk_wed_is_v1(dev->hw)) {
  79. wed_w32(dev, MTK_WED_TX_BM_TKID,
  80. FIELD_PREP(MTK_WED_TX_BM_TKID_START,
  81. dev->wlan.token_start) |
  82. @@ -967,7 +967,7 @@ mtk_wed_hw_init(struct mtk_wed_device *d
  83. mtk_wed_reset(dev, MTK_WED_RESET_TX_BM);
  84. - if (dev->hw->version == 1) {
  85. + if (mtk_wed_is_v1(dev->hw)) {
  86. wed_set(dev, MTK_WED_CTRL,
  87. MTK_WED_CTRL_WED_TX_BM_EN |
  88. MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
  89. @@ -1217,7 +1217,7 @@ mtk_wed_reset_dma(struct mtk_wed_device
  90. }
  91. dev->init_done = false;
  92. - if (dev->hw->version == 1)
  93. + if (mtk_wed_is_v1(dev->hw))
  94. return;
  95. if (!busy) {
  96. @@ -1343,7 +1343,7 @@ mtk_wed_configure_irq(struct mtk_wed_dev
  97. MTK_WED_CTRL_WED_TX_BM_EN |
  98. MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
  99. - if (dev->hw->version == 1) {
  100. + if (mtk_wed_is_v1(dev->hw)) {
  101. wed_w32(dev, MTK_WED_PCIE_INT_TRIGGER,
  102. MTK_WED_PCIE_INT_TRIGGER_STATUS);
  103. @@ -1416,7 +1416,7 @@ mtk_wed_dma_enable(struct mtk_wed_device
  104. MTK_WDMA_GLO_CFG_RX_INFO1_PRERES |
  105. MTK_WDMA_GLO_CFG_RX_INFO2_PRERES);
  106. - if (dev->hw->version == 1) {
  107. + if (mtk_wed_is_v1(dev->hw)) {
  108. wdma_set(dev, MTK_WDMA_GLO_CFG,
  109. MTK_WDMA_GLO_CFG_RX_INFO3_PRERES);
  110. } else {
  111. @@ -1465,7 +1465,7 @@ mtk_wed_start(struct mtk_wed_device *dev
  112. mtk_wed_set_ext_int(dev, true);
  113. - if (dev->hw->version == 1) {
  114. + if (mtk_wed_is_v1(dev->hw)) {
  115. u32 val = dev->wlan.wpdma_phys | MTK_PCIE_MIRROR_MAP_EN |
  116. FIELD_PREP(MTK_PCIE_MIRROR_MAP_WED_ID,
  117. dev->hw->index);
  118. @@ -1550,7 +1550,7 @@ mtk_wed_attach(struct mtk_wed_device *de
  119. }
  120. mtk_wed_hw_init_early(dev);
  121. - if (hw->version == 1) {
  122. + if (mtk_wed_is_v1(hw)) {
  123. regmap_update_bits(hw->hifsys, HIFSYS_DMA_AG_MAP,
  124. BIT(hw->index), 0);
  125. } else {
  126. @@ -1618,7 +1618,7 @@ static int
  127. mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
  128. {
  129. struct mtk_wed_ring *ring = &dev->txfree_ring;
  130. - int i, index = dev->hw->version == 1;
  131. + int i, index = mtk_wed_is_v1(dev->hw);
  132. /*
  133. * For txfree event handling, the same DMA ring is shared between WED
  134. @@ -1676,7 +1676,7 @@ mtk_wed_irq_get(struct mtk_wed_device *d
  135. {
  136. u32 val, ext_mask = MTK_WED_EXT_INT_STATUS_ERROR_MASK;
  137. - if (dev->hw->version == 1)
  138. + if (mtk_wed_is_v1(dev->hw))
  139. ext_mask |= MTK_WED_EXT_INT_STATUS_TX_DRV_R_RESP_ERR;
  140. else
  141. ext_mask |= MTK_WED_EXT_INT_STATUS_RX_FBUF_LO_TH |
  142. @@ -1840,7 +1840,7 @@ mtk_wed_setup_tc(struct mtk_wed_device *
  143. {
  144. struct mtk_wed_hw *hw = wed->hw;
  145. - if (hw->version < 2)
  146. + if (mtk_wed_is_v1(hw))
  147. return -EOPNOTSUPP;
  148. switch (type) {
  149. @@ -1914,9 +1914,9 @@ void mtk_wed_add_hw(struct device_node *
  150. hw->wdma = wdma;
  151. hw->index = index;
  152. hw->irq = irq;
  153. - hw->version = mtk_is_netsys_v1(eth) ? 1 : 2;
  154. + hw->version = eth->soc->version;
  155. - if (hw->version == 1) {
  156. + if (mtk_wed_is_v1(hw)) {
  157. hw->mirror = syscon_regmap_lookup_by_phandle(eth_np,
  158. "mediatek,pcie-mirror");
  159. hw->hifsys = syscon_regmap_lookup_by_phandle(eth_np,
  160. --- a/drivers/net/ethernet/mediatek/mtk_wed.h
  161. +++ b/drivers/net/ethernet/mediatek/mtk_wed.h
  162. @@ -40,6 +40,16 @@ struct mtk_wdma_info {
  163. };
  164. #ifdef CONFIG_NET_MEDIATEK_SOC_WED
  165. +static inline bool mtk_wed_is_v1(struct mtk_wed_hw *hw)
  166. +{
  167. + return hw->version == 1;
  168. +}
  169. +
  170. +static inline bool mtk_wed_is_v2(struct mtk_wed_hw *hw)
  171. +{
  172. + return hw->version == 2;
  173. +}
  174. +
  175. static inline void
  176. wed_w32(struct mtk_wed_device *dev, u32 reg, u32 val)
  177. {
  178. --- a/drivers/net/ethernet/mediatek/mtk_wed_debugfs.c
  179. +++ b/drivers/net/ethernet/mediatek/mtk_wed_debugfs.c
  180. @@ -261,7 +261,7 @@ void mtk_wed_hw_add_debugfs(struct mtk_w
  181. debugfs_create_u32("regidx", 0600, dir, &hw->debugfs_reg);
  182. debugfs_create_file_unsafe("regval", 0600, dir, hw, &fops_regval);
  183. debugfs_create_file_unsafe("txinfo", 0400, dir, hw, &wed_txinfo_fops);
  184. - if (hw->version != 1)
  185. + if (!mtk_wed_is_v1(hw))
  186. debugfs_create_file_unsafe("rxinfo", 0400, dir, hw,
  187. &wed_rxinfo_fops);
  188. }
  189. --- a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
  190. +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
  191. @@ -207,7 +207,7 @@ int mtk_wed_mcu_msg_update(struct mtk_we
  192. {
  193. struct mtk_wed_wo *wo = dev->hw->wed_wo;
  194. - if (dev->hw->version == 1)
  195. + if (mtk_wed_is_v1(dev->hw))
  196. return 0;
  197. if (WARN_ON(!wo))