737-01-net-ethernet-mtk_eth_soc-add-MTK_NETSYS_V1-capabilit.patch 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. From 663fa1b7e0cb2c929008482014a70c6625caad75 Mon Sep 17 00:00:00 2001
  2. From: Lorenzo Bianconi <[email protected]>
  3. Date: Tue, 7 Mar 2023 15:55:13 +0000
  4. Subject: [PATCH 1/7] net: ethernet: mtk_eth_soc: add MTK_NETSYS_V1 capability
  5. bit
  6. Introduce MTK_NETSYS_V1 bit in the device capabilities for
  7. MT7621/MT7622/MT7623/MT7628/MT7629 SoCs.
  8. Use !MTK_NETSYS_V1 instead of MTK_NETSYS_V2 in the driver codebase.
  9. This is a preliminary patch to introduce support for MT7988 SoC.
  10. Signed-off-by: Lorenzo Bianconi <[email protected]>
  11. Signed-off-by: Daniel Golle <[email protected]>
  12. ---
  13. drivers/net/ethernet/mediatek/mtk_eth_soc.c | 30 +++++++-------
  14. drivers/net/ethernet/mediatek/mtk_eth_soc.h | 45 ++++++++++++---------
  15. 2 files changed, 41 insertions(+), 34 deletions(-)
  16. --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
  17. +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
  18. @@ -597,7 +597,7 @@ static void mtk_set_queue_speed(struct m
  19. FIELD_PREP(MTK_QTX_SCH_MIN_RATE_MAN, 1) |
  20. FIELD_PREP(MTK_QTX_SCH_MIN_RATE_EXP, 4) |
  21. MTK_QTX_SCH_LEAKY_BUCKET_SIZE;
  22. - if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
  23. + if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1))
  24. val |= MTK_QTX_SCH_LEAKY_BUCKET_EN;
  25. if (IS_ENABLED(CONFIG_SOC_MT7621)) {
  26. @@ -974,7 +974,7 @@ static bool mtk_rx_get_desc(struct mtk_e
  27. rxd->rxd1 = READ_ONCE(dma_rxd->rxd1);
  28. rxd->rxd3 = READ_ONCE(dma_rxd->rxd3);
  29. rxd->rxd4 = READ_ONCE(dma_rxd->rxd4);
  30. - if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
  31. + if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1)) {
  32. rxd->rxd5 = READ_ONCE(dma_rxd->rxd5);
  33. rxd->rxd6 = READ_ONCE(dma_rxd->rxd6);
  34. }
  35. @@ -1032,7 +1032,7 @@ static int mtk_init_fq_dma(struct mtk_et
  36. txd->txd3 = TX_DMA_PLEN0(MTK_QDMA_PAGE_SIZE);
  37. txd->txd4 = 0;
  38. - if (MTK_HAS_CAPS(soc->caps, MTK_NETSYS_V2)) {
  39. + if (!MTK_HAS_CAPS(soc->caps, MTK_NETSYS_V1)) {
  40. txd->txd5 = 0;
  41. txd->txd6 = 0;
  42. txd->txd7 = 0;
  43. @@ -1221,7 +1221,7 @@ static void mtk_tx_set_dma_desc(struct n
  44. struct mtk_mac *mac = netdev_priv(dev);
  45. struct mtk_eth *eth = mac->hw;
  46. - if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
  47. + if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1))
  48. mtk_tx_set_dma_desc_v2(dev, txd, info);
  49. else
  50. mtk_tx_set_dma_desc_v1(dev, txd, info);
  51. @@ -1902,7 +1902,7 @@ static int mtk_poll_rx(struct napi_struc
  52. break;
  53. /* find out which mac the packet come from. values start at 1 */
  54. - if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
  55. + if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1))
  56. mac = RX_DMA_GET_SPORT_V2(trxd.rxd5) - 1;
  57. else if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628) &&
  58. !(trxd.rxd4 & RX_DMA_SPECIAL_TAG))
  59. @@ -1998,7 +1998,7 @@ static int mtk_poll_rx(struct napi_struc
  60. skb->dev = netdev;
  61. bytes += skb->len;
  62. - if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
  63. + if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1)) {
  64. reason = FIELD_GET(MTK_RXD5_PPE_CPU_REASON, trxd.rxd5);
  65. hash = trxd.rxd5 & MTK_RXD5_FOE_ENTRY;
  66. if (hash != MTK_RXD5_FOE_ENTRY)
  67. @@ -2023,7 +2023,7 @@ static int mtk_poll_rx(struct napi_struc
  68. /* When using VLAN untagging in combination with DSA, the
  69. * hardware treats the MTK special tag as a VLAN and untags it.
  70. */
  71. - if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) &&
  72. + if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1) &&
  73. (trxd.rxd2 & RX_DMA_VTAG) && netdev_uses_dsa(netdev)) {
  74. unsigned int port = RX_DMA_VPID(trxd.rxd3) & GENMASK(2, 0);
  75. @@ -2328,7 +2328,7 @@ static int mtk_tx_alloc(struct mtk_eth *
  76. txd->txd2 = next_ptr;
  77. txd->txd3 = TX_DMA_LS0 | TX_DMA_OWNER_CPU;
  78. txd->txd4 = 0;
  79. - if (MTK_HAS_CAPS(soc->caps, MTK_NETSYS_V2)) {
  80. + if (!MTK_HAS_CAPS(soc->caps, MTK_NETSYS_V1)) {
  81. txd->txd5 = 0;
  82. txd->txd6 = 0;
  83. txd->txd7 = 0;
  84. @@ -2381,7 +2381,7 @@ static int mtk_tx_alloc(struct mtk_eth *
  85. FIELD_PREP(MTK_QTX_SCH_MIN_RATE_MAN, 1) |
  86. FIELD_PREP(MTK_QTX_SCH_MIN_RATE_EXP, 4) |
  87. MTK_QTX_SCH_LEAKY_BUCKET_SIZE;
  88. - if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
  89. + if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1))
  90. val |= MTK_QTX_SCH_LEAKY_BUCKET_EN;
  91. mtk_w32(eth, val, soc->reg_map->qdma.qtx_sch + ofs);
  92. ofs += MTK_QTX_OFFSET;
  93. @@ -2515,7 +2515,7 @@ static int mtk_rx_alloc(struct mtk_eth *
  94. rxd->rxd3 = 0;
  95. rxd->rxd4 = 0;
  96. - if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
  97. + if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1)) {
  98. rxd->rxd5 = 0;
  99. rxd->rxd6 = 0;
  100. rxd->rxd7 = 0;
  101. @@ -3063,7 +3063,7 @@ static int mtk_start_dma(struct mtk_eth
  102. MTK_TX_BT_32DWORDS | MTK_NDP_CO_PRO |
  103. MTK_RX_2B_OFFSET | MTK_TX_WB_DDONE;
  104. - if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
  105. + if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1))
  106. val |= MTK_MUTLI_CNT | MTK_RESV_BUF |
  107. MTK_WCOMP_EN | MTK_DMAD_WR_WDONE |
  108. MTK_CHK_DDONE_EN | MTK_LEAKY_BUCKET_EN;
  109. @@ -3475,7 +3475,7 @@ static void mtk_hw_reset(struct mtk_eth
  110. {
  111. u32 val;
  112. - if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
  113. + if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1)) {
  114. regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN, 0);
  115. val = RSTCTRL_PPE0_V2;
  116. } else {
  117. @@ -3487,7 +3487,7 @@ static void mtk_hw_reset(struct mtk_eth
  118. ethsys_reset(eth, RSTCTRL_ETH | RSTCTRL_FE | val);
  119. - if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2))
  120. + if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1))
  121. regmap_write(eth->ethsys, ETHSYS_FE_RST_CHK_IDLE_EN,
  122. 0x3ffffff);
  123. }
  124. @@ -3683,7 +3683,7 @@ static int mtk_hw_init(struct mtk_eth *e
  125. else
  126. mtk_hw_reset(eth);
  127. - if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
  128. + if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1)) {
  129. /* Set FE to PDMAv2 if necessary */
  130. val = mtk_r32(eth, MTK_FE_GLO_MISC);
  131. mtk_w32(eth, val | BIT(4), MTK_FE_GLO_MISC);
  132. @@ -3720,7 +3720,7 @@ static int mtk_hw_init(struct mtk_eth *e
  133. */
  134. val = mtk_r32(eth, MTK_CDMQ_IG_CTRL);
  135. mtk_w32(eth, val | MTK_CDMQ_STAG_EN, MTK_CDMQ_IG_CTRL);
  136. - if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
  137. + if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V1)) {
  138. val = mtk_r32(eth, MTK_CDMP_IG_CTRL);
  139. mtk_w32(eth, val | MTK_CDMP_STAG_EN, MTK_CDMP_IG_CTRL);
  140. --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
  141. +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
  142. @@ -816,6 +816,7 @@ enum mkt_eth_capabilities {
  143. MTK_SHARED_INT_BIT,
  144. MTK_TRGMII_MT7621_CLK_BIT,
  145. MTK_QDMA_BIT,
  146. + MTK_NETSYS_V1_BIT,
  147. MTK_NETSYS_V2_BIT,
  148. MTK_SOC_MT7628_BIT,
  149. MTK_RSTCTRL_PPE1_BIT,
  150. @@ -851,6 +852,7 @@ enum mkt_eth_capabilities {
  151. #define MTK_SHARED_INT BIT(MTK_SHARED_INT_BIT)
  152. #define MTK_TRGMII_MT7621_CLK BIT(MTK_TRGMII_MT7621_CLK_BIT)
  153. #define MTK_QDMA BIT(MTK_QDMA_BIT)
  154. +#define MTK_NETSYS_V1 BIT(MTK_NETSYS_V1_BIT)
  155. #define MTK_NETSYS_V2 BIT(MTK_NETSYS_V2_BIT)
  156. #define MTK_SOC_MT7628 BIT(MTK_SOC_MT7628_BIT)
  157. #define MTK_RSTCTRL_PPE1 BIT(MTK_RSTCTRL_PPE1_BIT)
  158. @@ -913,25 +915,30 @@ enum mkt_eth_capabilities {
  159. #define MTK_HAS_CAPS(caps, _x) (((caps) & (_x) & ~(MTK_CAP_MASK)) == (_x))
  160. -#define MT7621_CAPS (MTK_GMAC1_RGMII | MTK_GMAC1_TRGMII | \
  161. - MTK_GMAC2_RGMII | MTK_SHARED_INT | \
  162. - MTK_TRGMII_MT7621_CLK | MTK_QDMA)
  163. -
  164. -#define MT7622_CAPS (MTK_GMAC1_RGMII | MTK_GMAC1_SGMII | MTK_GMAC2_RGMII | \
  165. - MTK_GMAC2_SGMII | MTK_GDM1_ESW | \
  166. - MTK_MUX_GDM1_TO_GMAC1_ESW | \
  167. - MTK_MUX_GMAC1_GMAC2_TO_SGMII_RGMII | MTK_QDMA)
  168. -
  169. -#define MT7623_CAPS (MTK_GMAC1_RGMII | MTK_GMAC1_TRGMII | MTK_GMAC2_RGMII | \
  170. - MTK_QDMA)
  171. -
  172. -#define MT7628_CAPS (MTK_SHARED_INT | MTK_SOC_MT7628)
  173. -
  174. -#define MT7629_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | MTK_GMAC2_GEPHY | \
  175. - MTK_GDM1_ESW | MTK_MUX_GDM1_TO_GMAC1_ESW | \
  176. - MTK_MUX_GMAC2_GMAC0_TO_GEPHY | \
  177. - MTK_MUX_U3_GMAC2_TO_QPHY | \
  178. - MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA)
  179. +#define MT7621_CAPS (MTK_GMAC1_RGMII | MTK_GMAC1_TRGMII | \
  180. + MTK_GMAC2_RGMII | MTK_SHARED_INT | \
  181. + MTK_TRGMII_MT7621_CLK | MTK_QDMA | \
  182. + MTK_NETSYS_V1)
  183. +
  184. +#define MT7622_CAPS (MTK_GMAC1_RGMII | MTK_GMAC1_SGMII | \
  185. + MTK_GMAC2_RGMII | MTK_GMAC2_SGMII | \
  186. + MTK_GDM1_ESW | MTK_MUX_GDM1_TO_GMAC1_ESW |\
  187. + MTK_MUX_GMAC1_GMAC2_TO_SGMII_RGMII | \
  188. + MTK_QDMA | MTK_NETSYS_V1)
  189. +
  190. +#define MT7623_CAPS (MTK_GMAC1_RGMII | MTK_GMAC1_TRGMII | \
  191. + MTK_GMAC2_RGMII | MTK_QDMA | \
  192. + MTK_NETSYS_V1)
  193. +
  194. +#define MT7628_CAPS (MTK_SHARED_INT | MTK_SOC_MT7628 | \
  195. + MTK_NETSYS_V1)
  196. +
  197. +#define MT7629_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
  198. + MTK_GMAC2_GEPHY | MTK_GDM1_ESW | \
  199. + MTK_MUX_GMAC2_GMAC0_TO_GEPHY | MTK_QDMA | \
  200. + MTK_MUX_U3_GMAC2_TO_QPHY | MTK_NETSYS_V1 |\
  201. + MTK_MUX_GDM1_TO_GMAC1_ESW | \
  202. + MTK_MUX_GMAC12_TO_GEPHY_SGMII)
  203. #define MT7981_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | MTK_GMAC2_GEPHY | \
  204. MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \