737-06-net-ethernet-mtk_eth_soc-add-support-for-MT7988-SoC.patch 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495
  1. From 661bacf4363ca68939c15e20056b5f72fbd034e7 Mon Sep 17 00:00:00 2001
  2. From: Lorenzo Bianconi <[email protected]>
  3. Date: Sat, 25 Feb 2023 00:08:24 +0100
  4. Subject: [PATCH 6/7] net: ethernet: mtk_eth_soc: add support for MT7988 SoC
  5. Introduce support for ethernet chip available in MT7988 SoC to
  6. mtk_eth_soc driver.
  7. ---
  8. drivers/net/ethernet/mediatek/mtk_eth_soc.c | 153 ++++++++++++++--
  9. drivers/net/ethernet/mediatek/mtk_eth_soc.h | 193 ++++++++++++++------
  10. 2 files changed, 279 insertions(+), 67 deletions(-)
  11. --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
  12. +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
  13. @@ -152,6 +152,54 @@ static const struct mtk_reg_map mt7986_r
  14. .pse_oq_sta = 0x01a0,
  15. };
  16. +static const struct mtk_reg_map mt7988_reg_map = {
  17. + .tx_irq_mask = 0x461c,
  18. + .tx_irq_status = 0x4618,
  19. + .pdma = {
  20. + .rx_ptr = 0x6900,
  21. + .rx_cnt_cfg = 0x6904,
  22. + .pcrx_ptr = 0x6908,
  23. + .glo_cfg = 0x6a04,
  24. + .rst_idx = 0x6a08,
  25. + .delay_irq = 0x6a0c,
  26. + .irq_status = 0x6a20,
  27. + .irq_mask = 0x6a28,
  28. + .adma_rx_dbg0 = 0x6a38,
  29. + .int_grp = 0x6a50,
  30. + },
  31. + .qdma = {
  32. + .qtx_cfg = 0x4400,
  33. + .qtx_sch = 0x4404,
  34. + .rx_ptr = 0x4500,
  35. + .rx_cnt_cfg = 0x4504,
  36. + .qcrx_ptr = 0x4508,
  37. + .glo_cfg = 0x4604,
  38. + .rst_idx = 0x4608,
  39. + .delay_irq = 0x460c,
  40. + .fc_th = 0x4610,
  41. + .int_grp = 0x4620,
  42. + .hred = 0x4644,
  43. + .ctx_ptr = 0x4700,
  44. + .dtx_ptr = 0x4704,
  45. + .crx_ptr = 0x4710,
  46. + .drx_ptr = 0x4714,
  47. + .fq_head = 0x4720,
  48. + .fq_tail = 0x4724,
  49. + .fq_count = 0x4728,
  50. + .fq_blen = 0x472c,
  51. + .tx_sch_rate = 0x4798,
  52. + },
  53. + .gdm1_cnt = 0x1c00,
  54. + .gdma_to_ppe = 0x3333,
  55. + .ppe_base = 0x2200,
  56. + .wdma_base = {
  57. + [0] = 0x4800,
  58. + [1] = 0x4c00,
  59. + },
  60. + .pse_iq_sta = 0x0180,
  61. + .pse_oq_sta = 0x01a0,
  62. +};
  63. +
  64. /* strings used by ethtool */
  65. static const struct mtk_ethtool_stats {
  66. char str[ETH_GSTRING_LEN];
  67. @@ -179,10 +227,54 @@ static const struct mtk_ethtool_stats {
  68. };
  69. static const char * const mtk_clks_source_name[] = {
  70. - "ethif", "sgmiitop", "esw", "gp0", "gp1", "gp2", "fe", "trgpll",
  71. - "sgmii_tx250m", "sgmii_rx250m", "sgmii_cdr_ref", "sgmii_cdr_fb",
  72. - "sgmii2_tx250m", "sgmii2_rx250m", "sgmii2_cdr_ref", "sgmii2_cdr_fb",
  73. - "sgmii_ck", "eth2pll", "wocpu0", "wocpu1", "netsys0", "netsys1"
  74. + "ethif",
  75. + "sgmiitop",
  76. + "esw",
  77. + "gp0",
  78. + "gp1",
  79. + "gp2",
  80. + "gp3",
  81. + "xgp1",
  82. + "xgp2",
  83. + "xgp3",
  84. + "crypto",
  85. + "fe",
  86. + "trgpll",
  87. + "sgmii_tx250m",
  88. + "sgmii_rx250m",
  89. + "sgmii_cdr_ref",
  90. + "sgmii_cdr_fb",
  91. + "sgmii2_tx250m",
  92. + "sgmii2_rx250m",
  93. + "sgmii2_cdr_ref",
  94. + "sgmii2_cdr_fb",
  95. + "sgmii_ck",
  96. + "eth2pll",
  97. + "wocpu0",
  98. + "wocpu1",
  99. + "netsys0",
  100. + "netsys1",
  101. + "ethwarp_wocpu2",
  102. + "ethwarp_wocpu1",
  103. + "ethwarp_wocpu0",
  104. + "top_usxgmii0_sel",
  105. + "top_usxgmii1_sel",
  106. + "top_sgm0_sel",
  107. + "top_sgm1_sel",
  108. + "top_xfi_phy0_xtal_sel",
  109. + "top_xfi_phy1_xtal_sel",
  110. + "top_eth_gmii_sel",
  111. + "top_eth_refck_50m_sel",
  112. + "top_eth_sys_200m_sel",
  113. + "top_eth_sys_sel",
  114. + "top_eth_xgmii_sel",
  115. + "top_eth_mii_sel",
  116. + "top_netsys_sel",
  117. + "top_netsys_500m_sel",
  118. + "top_netsys_pao_2x_sel",
  119. + "top_netsys_sync_250m_sel",
  120. + "top_netsys_ppefb_250m_sel",
  121. + "top_netsys_warp_sel",
  122. };
  123. void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg)
  124. @@ -1253,10 +1345,19 @@ static void mtk_tx_set_dma_desc_v2(struc
  125. data |= TX_DMA_LS0;
  126. WRITE_ONCE(desc->txd3, data);
  127. - if (mac->id == MTK_GMAC3_ID)
  128. - data = PSE_GDM3_PORT;
  129. - else
  130. - data = (mac->id + 1) << TX_DMA_FPORT_SHIFT_V2; /* forward port */
  131. + /* set forward port */
  132. + switch (mac->id) {
  133. + case MTK_GMAC1_ID:
  134. + data = PSE_GDM1_PORT << TX_DMA_FPORT_SHIFT_V2;
  135. + break;
  136. + case MTK_GMAC2_ID:
  137. + data = PSE_GDM2_PORT << TX_DMA_FPORT_SHIFT_V2;
  138. + break;
  139. + case MTK_GMAC3_ID:
  140. + data = PSE_GDM3_PORT << TX_DMA_FPORT_SHIFT_V2;
  141. + break;
  142. + }
  143. +
  144. data |= TX_DMA_SWC_V2 | QID_BITS_V2(info->qid);
  145. WRITE_ONCE(desc->txd4, data);
  146. @@ -5010,6 +5111,25 @@ static const struct mtk_soc_data mt7986_
  147. },
  148. };
  149. +static const struct mtk_soc_data mt7988_data = {
  150. + .reg_map = &mt7988_reg_map,
  151. + .ana_rgc3 = 0x128,
  152. + .caps = MT7988_CAPS,
  153. + .hw_features = MTK_HW_FEATURES,
  154. + .required_clks = MT7988_CLKS_BITMAP,
  155. + .required_pctl = false,
  156. + .num_devs = 3,
  157. + .txrx = {
  158. + .txd_size = sizeof(struct mtk_tx_dma_v2),
  159. + .rxd_size = sizeof(struct mtk_rx_dma_v2),
  160. + .rx_irq_done_mask = MTK_RX_DONE_INT_V2,
  161. + .rx_dma_l4_valid = RX_DMA_L4_VALID_V2,
  162. + .dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
  163. + .dma_len_offset = 8,
  164. + },
  165. +};
  166. +
  167. +
  168. static const struct mtk_soc_data rt5350_data = {
  169. .reg_map = &mt7628_reg_map,
  170. .caps = MT7628_CAPS,
  171. @@ -5028,14 +5148,15 @@ static const struct mtk_soc_data rt5350_
  172. };
  173. const struct of_device_id of_mtk_match[] = {
  174. - { .compatible = "mediatek,mt2701-eth", .data = &mt2701_data},
  175. - { .compatible = "mediatek,mt7621-eth", .data = &mt7621_data},
  176. - { .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
  177. - { .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
  178. - { .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},
  179. - { .compatible = "mediatek,mt7981-eth", .data = &mt7981_data},
  180. - { .compatible = "mediatek,mt7986-eth", .data = &mt7986_data},
  181. - { .compatible = "ralink,rt5350-eth", .data = &rt5350_data},
  182. + { .compatible = "mediatek,mt2701-eth", .data = &mt2701_data },
  183. + { .compatible = "mediatek,mt7621-eth", .data = &mt7621_data },
  184. + { .compatible = "mediatek,mt7622-eth", .data = &mt7622_data },
  185. + { .compatible = "mediatek,mt7623-eth", .data = &mt7623_data },
  186. + { .compatible = "mediatek,mt7629-eth", .data = &mt7629_data },
  187. + { .compatible = "mediatek,mt7981-eth", .data = &mt7981_data },
  188. + { .compatible = "mediatek,mt7986-eth", .data = &mt7986_data },
  189. + { .compatible = "mediatek,mt7988-eth", .data = &mt7988_data },
  190. + { .compatible = "ralink,rt5350-eth", .data = &rt5350_data },
  191. {},
  192. };
  193. MODULE_DEVICE_TABLE(of, of_mtk_match);
  194. --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
  195. +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
  196. @@ -116,7 +116,8 @@
  197. #define MTK_CDMP_EG_CTRL 0x404
  198. /* GDM Exgress Control Register */
  199. -#define MTK_GDMA_FWD_CFG(x) (0x500 + (x * 0x1000))
  200. +#define MTK_GDMA_FWD_CFG(x) ((x == MTK_GMAC3_ID) ? \
  201. + 0x540 : 0x500 + (x * 0x1000))
  202. #define MTK_GDMA_SPECIAL_TAG BIT(24)
  203. #define MTK_GDMA_ICS_EN BIT(22)
  204. #define MTK_GDMA_TCS_EN BIT(21)
  205. @@ -653,6 +654,11 @@ enum mtk_clks_map {
  206. MTK_CLK_GP0,
  207. MTK_CLK_GP1,
  208. MTK_CLK_GP2,
  209. + MTK_CLK_GP3,
  210. + MTK_CLK_XGP1,
  211. + MTK_CLK_XGP2,
  212. + MTK_CLK_XGP3,
  213. + MTK_CLK_CRYPTO,
  214. MTK_CLK_FE,
  215. MTK_CLK_TRGPLL,
  216. MTK_CLK_SGMII_TX_250M,
  217. @@ -669,57 +675,108 @@ enum mtk_clks_map {
  218. MTK_CLK_WOCPU1,
  219. MTK_CLK_NETSYS0,
  220. MTK_CLK_NETSYS1,
  221. + MTK_CLK_ETHWARP_WOCPU2,
  222. + MTK_CLK_ETHWARP_WOCPU1,
  223. + MTK_CLK_ETHWARP_WOCPU0,
  224. + MTK_CLK_TOP_USXGMII_SBUS_0_SEL,
  225. + MTK_CLK_TOP_USXGMII_SBUS_1_SEL,
  226. + MTK_CLK_TOP_SGM_0_SEL,
  227. + MTK_CLK_TOP_SGM_1_SEL,
  228. + MTK_CLK_TOP_XFI_PHY_0_XTAL_SEL,
  229. + MTK_CLK_TOP_XFI_PHY_1_XTAL_SEL,
  230. + MTK_CLK_TOP_ETH_GMII_SEL,
  231. + MTK_CLK_TOP_ETH_REFCK_50M_SEL,
  232. + MTK_CLK_TOP_ETH_SYS_200M_SEL,
  233. + MTK_CLK_TOP_ETH_SYS_SEL,
  234. + MTK_CLK_TOP_ETH_XGMII_SEL,
  235. + MTK_CLK_TOP_ETH_MII_SEL,
  236. + MTK_CLK_TOP_NETSYS_SEL,
  237. + MTK_CLK_TOP_NETSYS_500M_SEL,
  238. + MTK_CLK_TOP_NETSYS_PAO_2X_SEL,
  239. + MTK_CLK_TOP_NETSYS_SYNC_250M_SEL,
  240. + MTK_CLK_TOP_NETSYS_PPEFB_250M_SEL,
  241. + MTK_CLK_TOP_NETSYS_WARP_SEL,
  242. MTK_CLK_MAX
  243. };
  244. -#define MT7623_CLKS_BITMAP (BIT(MTK_CLK_ETHIF) | BIT(MTK_CLK_ESW) | \
  245. - BIT(MTK_CLK_GP1) | BIT(MTK_CLK_GP2) | \
  246. - BIT(MTK_CLK_TRGPLL))
  247. -#define MT7622_CLKS_BITMAP (BIT(MTK_CLK_ETHIF) | BIT(MTK_CLK_ESW) | \
  248. - BIT(MTK_CLK_GP0) | BIT(MTK_CLK_GP1) | \
  249. - BIT(MTK_CLK_GP2) | \
  250. - BIT(MTK_CLK_SGMII_TX_250M) | \
  251. - BIT(MTK_CLK_SGMII_RX_250M) | \
  252. - BIT(MTK_CLK_SGMII_CDR_REF) | \
  253. - BIT(MTK_CLK_SGMII_CDR_FB) | \
  254. - BIT(MTK_CLK_SGMII_CK) | \
  255. - BIT(MTK_CLK_ETH2PLL))
  256. +#define MT7623_CLKS_BITMAP (BIT_ULL(MTK_CLK_ETHIF) | BIT_ULL(MTK_CLK_ESW) | \
  257. + BIT_ULL(MTK_CLK_GP1) | BIT_ULL(MTK_CLK_GP2) | \
  258. + BIT_ULL(MTK_CLK_TRGPLL))
  259. +#define MT7622_CLKS_BITMAP (BIT_ULL(MTK_CLK_ETHIF) | BIT_ULL(MTK_CLK_ESW) | \
  260. + BIT_ULL(MTK_CLK_GP0) | BIT_ULL(MTK_CLK_GP1) | \
  261. + BIT_ULL(MTK_CLK_GP2) | \
  262. + BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
  263. + BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
  264. + BIT_ULL(MTK_CLK_SGMII_CDR_REF) | \
  265. + BIT_ULL(MTK_CLK_SGMII_CDR_FB) | \
  266. + BIT_ULL(MTK_CLK_SGMII_CK) | \
  267. + BIT_ULL(MTK_CLK_ETH2PLL))
  268. #define MT7621_CLKS_BITMAP (0)
  269. #define MT7628_CLKS_BITMAP (0)
  270. -#define MT7629_CLKS_BITMAP (BIT(MTK_CLK_ETHIF) | BIT(MTK_CLK_ESW) | \
  271. - BIT(MTK_CLK_GP0) | BIT(MTK_CLK_GP1) | \
  272. - BIT(MTK_CLK_GP2) | BIT(MTK_CLK_FE) | \
  273. - BIT(MTK_CLK_SGMII_TX_250M) | \
  274. - BIT(MTK_CLK_SGMII_RX_250M) | \
  275. - BIT(MTK_CLK_SGMII_CDR_REF) | \
  276. - BIT(MTK_CLK_SGMII_CDR_FB) | \
  277. - BIT(MTK_CLK_SGMII2_TX_250M) | \
  278. - BIT(MTK_CLK_SGMII2_RX_250M) | \
  279. - BIT(MTK_CLK_SGMII2_CDR_REF) | \
  280. - BIT(MTK_CLK_SGMII2_CDR_FB) | \
  281. - BIT(MTK_CLK_SGMII_CK) | \
  282. - BIT(MTK_CLK_ETH2PLL) | BIT(MTK_CLK_SGMIITOP))
  283. -#define MT7981_CLKS_BITMAP (BIT(MTK_CLK_FE) | BIT(MTK_CLK_GP2) | BIT(MTK_CLK_GP1) | \
  284. - BIT(MTK_CLK_WOCPU0) | \
  285. - BIT(MTK_CLK_SGMII_TX_250M) | \
  286. - BIT(MTK_CLK_SGMII_RX_250M) | \
  287. - BIT(MTK_CLK_SGMII_CDR_REF) | \
  288. - BIT(MTK_CLK_SGMII_CDR_FB) | \
  289. - BIT(MTK_CLK_SGMII2_TX_250M) | \
  290. - BIT(MTK_CLK_SGMII2_RX_250M) | \
  291. - BIT(MTK_CLK_SGMII2_CDR_REF) | \
  292. - BIT(MTK_CLK_SGMII2_CDR_FB) | \
  293. - BIT(MTK_CLK_SGMII_CK))
  294. -#define MT7986_CLKS_BITMAP (BIT(MTK_CLK_FE) | BIT(MTK_CLK_GP2) | BIT(MTK_CLK_GP1) | \
  295. - BIT(MTK_CLK_WOCPU1) | BIT(MTK_CLK_WOCPU0) | \
  296. - BIT(MTK_CLK_SGMII_TX_250M) | \
  297. - BIT(MTK_CLK_SGMII_RX_250M) | \
  298. - BIT(MTK_CLK_SGMII_CDR_REF) | \
  299. - BIT(MTK_CLK_SGMII_CDR_FB) | \
  300. - BIT(MTK_CLK_SGMII2_TX_250M) | \
  301. - BIT(MTK_CLK_SGMII2_RX_250M) | \
  302. - BIT(MTK_CLK_SGMII2_CDR_REF) | \
  303. - BIT(MTK_CLK_SGMII2_CDR_FB))
  304. +#define MT7629_CLKS_BITMAP (BIT_ULL(MTK_CLK_ETHIF) | BIT_ULL(MTK_CLK_ESW) | \
  305. + BIT_ULL(MTK_CLK_GP0) | BIT_ULL(MTK_CLK_GP1) | \
  306. + BIT_ULL(MTK_CLK_GP2) | BIT_ULL(MTK_CLK_FE) | \
  307. + BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
  308. + BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
  309. + BIT_ULL(MTK_CLK_SGMII_CDR_REF) | \
  310. + BIT_ULL(MTK_CLK_SGMII_CDR_FB) | \
  311. + BIT_ULL(MTK_CLK_SGMII2_TX_250M) | \
  312. + BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
  313. + BIT_ULL(MTK_CLK_SGMII2_CDR_REF) | \
  314. + BIT_ULL(MTK_CLK_SGMII2_CDR_FB) | \
  315. + BIT_ULL(MTK_CLK_SGMII_CK) | \
  316. + BIT_ULL(MTK_CLK_ETH2PLL) | BIT_ULL(MTK_CLK_SGMIITOP))
  317. +#define MT7981_CLKS_BITMAP (BIT_ULL(MTK_CLK_FE) | BIT_ULL(MTK_CLK_GP2) | BIT_ULL(MTK_CLK_GP1) | \
  318. + BIT_ULL(MTK_CLK_WOCPU0) | \
  319. + BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
  320. + BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
  321. + BIT_ULL(MTK_CLK_SGMII_CDR_REF) | \
  322. + BIT_ULL(MTK_CLK_SGMII_CDR_FB) | \
  323. + BIT_ULL(MTK_CLK_SGMII2_TX_250M) | \
  324. + BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
  325. + BIT_ULL(MTK_CLK_SGMII2_CDR_REF) | \
  326. + BIT_ULL(MTK_CLK_SGMII2_CDR_FB) | \
  327. + BIT_ULL(MTK_CLK_SGMII_CK))
  328. +#define MT7986_CLKS_BITMAP (BIT_ULL(MTK_CLK_FE) | BIT_ULL(MTK_CLK_GP2) | BIT_ULL(MTK_CLK_GP1) | \
  329. + BIT_ULL(MTK_CLK_WOCPU1) | BIT_ULL(MTK_CLK_WOCPU0) | \
  330. + BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
  331. + BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
  332. + BIT_ULL(MTK_CLK_SGMII_CDR_REF) | \
  333. + BIT_ULL(MTK_CLK_SGMII_CDR_FB) | \
  334. + BIT_ULL(MTK_CLK_SGMII2_TX_250M) | \
  335. + BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
  336. + BIT_ULL(MTK_CLK_SGMII2_CDR_REF) | \
  337. + BIT_ULL(MTK_CLK_SGMII2_CDR_FB))
  338. +#define MT7988_CLKS_BITMAP (BIT_ULL(MTK_CLK_FE) | BIT_ULL(MTK_CLK_ESW) | \
  339. + BIT_ULL(MTK_CLK_GP1) | BIT_ULL(MTK_CLK_GP2) | \
  340. + BIT_ULL(MTK_CLK_GP3) | BIT_ULL(MTK_CLK_XGP1) | \
  341. + BIT_ULL(MTK_CLK_XGP2) | BIT_ULL(MTK_CLK_XGP3) | \
  342. + BIT_ULL(MTK_CLK_CRYPTO) | \
  343. + BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
  344. + BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
  345. + BIT_ULL(MTK_CLK_SGMII2_TX_250M) | \
  346. + BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
  347. + BIT_ULL(MTK_CLK_ETHWARP_WOCPU2) | \
  348. + BIT_ULL(MTK_CLK_ETHWARP_WOCPU1) | \
  349. + BIT_ULL(MTK_CLK_ETHWARP_WOCPU0) | \
  350. + BIT_ULL(MTK_CLK_TOP_USXGMII_SBUS_0_SEL) | \
  351. + BIT_ULL(MTK_CLK_TOP_USXGMII_SBUS_1_SEL) | \
  352. + BIT_ULL(MTK_CLK_TOP_SGM_0_SEL) | \
  353. + BIT_ULL(MTK_CLK_TOP_SGM_1_SEL) | \
  354. + BIT_ULL(MTK_CLK_TOP_XFI_PHY_0_XTAL_SEL) | \
  355. + BIT_ULL(MTK_CLK_TOP_XFI_PHY_1_XTAL_SEL) | \
  356. + BIT_ULL(MTK_CLK_TOP_ETH_GMII_SEL) | \
  357. + BIT_ULL(MTK_CLK_TOP_ETH_REFCK_50M_SEL) | \
  358. + BIT_ULL(MTK_CLK_TOP_ETH_SYS_200M_SEL) | \
  359. + BIT_ULL(MTK_CLK_TOP_ETH_SYS_SEL) | \
  360. + BIT_ULL(MTK_CLK_TOP_ETH_XGMII_SEL) | \
  361. + BIT_ULL(MTK_CLK_TOP_ETH_MII_SEL) | \
  362. + BIT_ULL(MTK_CLK_TOP_NETSYS_SEL) | \
  363. + BIT_ULL(MTK_CLK_TOP_NETSYS_500M_SEL) | \
  364. + BIT_ULL(MTK_CLK_TOP_NETSYS_PAO_2X_SEL) | \
  365. + BIT_ULL(MTK_CLK_TOP_NETSYS_SYNC_250M_SEL) | \
  366. + BIT_ULL(MTK_CLK_TOP_NETSYS_PPEFB_250M_SEL) | \
  367. + BIT_ULL(MTK_CLK_TOP_NETSYS_WARP_SEL))
  368. enum mtk_dev_state {
  369. MTK_HW_INIT,
  370. @@ -847,6 +904,7 @@ enum mkt_eth_capabilities {
  371. MTK_RGMII_BIT = 0,
  372. MTK_TRGMII_BIT,
  373. MTK_SGMII_BIT,
  374. + MTK_USXGMII_BIT,
  375. MTK_ESW_BIT,
  376. MTK_GEPHY_BIT,
  377. MTK_MUX_BIT,
  378. @@ -869,6 +927,8 @@ enum mkt_eth_capabilities {
  379. MTK_ETH_MUX_U3_GMAC2_TO_QPHY_BIT,
  380. MTK_ETH_MUX_GMAC1_GMAC2_TO_SGMII_RGMII_BIT,
  381. MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII_BIT,
  382. + MTK_ETH_MUX_GMAC123_TO_GEPHY_SGMII_BIT,
  383. + MTK_ETH_MUX_GMAC123_TO_USXGMII_BIT,
  384. /* PATH BITS */
  385. MTK_ETH_PATH_GMAC1_RGMII_BIT,
  386. @@ -877,13 +937,18 @@ enum mkt_eth_capabilities {
  387. MTK_ETH_PATH_GMAC2_RGMII_BIT,
  388. MTK_ETH_PATH_GMAC2_SGMII_BIT,
  389. MTK_ETH_PATH_GMAC2_GEPHY_BIT,
  390. + MTK_ETH_PATH_GMAC3_SGMII_BIT,
  391. MTK_ETH_PATH_GDM1_ESW_BIT,
  392. + MTK_ETH_PATH_GMAC1_USXGMII_BIT,
  393. + MTK_ETH_PATH_GMAC2_USXGMII_BIT,
  394. + MTK_ETH_PATH_GMAC3_USXGMII_BIT,
  395. };
  396. /* Supported hardware group on SoCs */
  397. #define MTK_RGMII BIT_ULL(MTK_RGMII_BIT)
  398. #define MTK_TRGMII BIT_ULL(MTK_TRGMII_BIT)
  399. #define MTK_SGMII BIT_ULL(MTK_SGMII_BIT)
  400. +#define MTK_USXGMII BIT_ULL(MTK_USXGMII_BIT)
  401. #define MTK_ESW BIT_ULL(MTK_ESW_BIT)
  402. #define MTK_GEPHY BIT_ULL(MTK_GEPHY_BIT)
  403. #define MTK_MUX BIT_ULL(MTK_MUX_BIT)
  404. @@ -910,6 +975,10 @@ enum mkt_eth_capabilities {
  405. BIT_ULL(MTK_ETH_MUX_GMAC1_GMAC2_TO_SGMII_RGMII_BIT)
  406. #define MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII \
  407. BIT_ULL(MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII_BIT)
  408. +#define MTK_ETH_MUX_GMAC123_TO_GEPHY_SGMII \
  409. + BIT_ULL(MTK_ETH_MUX_GMAC123_TO_GEPHY_SGMII_BIT)
  410. +#define MTK_ETH_MUX_GMAC123_TO_USXGMII \
  411. + BIT_ULL(MTK_ETH_MUX_GMAC123_TO_USXGMII_BIT)
  412. /* Supported path present on SoCs */
  413. #define MTK_ETH_PATH_GMAC1_RGMII BIT_ULL(MTK_ETH_PATH_GMAC1_RGMII_BIT)
  414. @@ -918,7 +987,11 @@ enum mkt_eth_capabilities {
  415. #define MTK_ETH_PATH_GMAC2_RGMII BIT_ULL(MTK_ETH_PATH_GMAC2_RGMII_BIT)
  416. #define MTK_ETH_PATH_GMAC2_SGMII BIT_ULL(MTK_ETH_PATH_GMAC2_SGMII_BIT)
  417. #define MTK_ETH_PATH_GMAC2_GEPHY BIT_ULL(MTK_ETH_PATH_GMAC2_GEPHY_BIT)
  418. +#define MTK_ETH_PATH_GMAC3_SGMII BIT_ULL(MTK_ETH_PATH_GMAC3_SGMII_BIT)
  419. #define MTK_ETH_PATH_GDM1_ESW BIT_ULL(MTK_ETH_PATH_GDM1_ESW_BIT)
  420. +#define MTK_ETH_PATH_GMAC1_USXGMII BIT_ULL(MTK_ETH_PATH_GMAC1_USXGMII_BIT)
  421. +#define MTK_ETH_PATH_GMAC2_USXGMII BIT_ULL(MTK_ETH_PATH_GMAC2_USXGMII_BIT)
  422. +#define MTK_ETH_PATH_GMAC3_USXGMII BIT_ULL(MTK_ETH_PATH_GMAC3_USXGMII_BIT)
  423. #define MTK_GMAC1_RGMII (MTK_ETH_PATH_GMAC1_RGMII | MTK_RGMII)
  424. #define MTK_GMAC1_TRGMII (MTK_ETH_PATH_GMAC1_TRGMII | MTK_TRGMII)
  425. @@ -926,7 +999,11 @@ enum mkt_eth_capabilities {
  426. #define MTK_GMAC2_RGMII (MTK_ETH_PATH_GMAC2_RGMII | MTK_RGMII)
  427. #define MTK_GMAC2_SGMII (MTK_ETH_PATH_GMAC2_SGMII | MTK_SGMII)
  428. #define MTK_GMAC2_GEPHY (MTK_ETH_PATH_GMAC2_GEPHY | MTK_GEPHY)
  429. +#define MTK_GMAC3_SGMII (MTK_ETH_PATH_GMAC3_SGMII | MTK_SGMII)
  430. #define MTK_GDM1_ESW (MTK_ETH_PATH_GDM1_ESW | MTK_ESW)
  431. +#define MTK_GMAC1_USXGMII (MTK_ETH_PATH_GMAC1_USXGMII | MTK_USXGMII)
  432. +#define MTK_GMAC2_USXGMII (MTK_ETH_PATH_GMAC2_USXGMII | MTK_USXGMII)
  433. +#define MTK_GMAC3_USXGMII (MTK_ETH_PATH_GMAC3_USXGMII | MTK_USXGMII)
  434. /* MUXes present on SoCs */
  435. /* 0: GDM1 -> GMAC1, 1: GDM1 -> ESW */
  436. @@ -949,6 +1026,12 @@ enum mkt_eth_capabilities {
  437. #define MTK_MUX_GMAC12_TO_GEPHY_SGMII \
  438. (MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII | MTK_MUX)
  439. +#define MTK_MUX_GMAC123_TO_GEPHY_SGMII \
  440. + (MTK_ETH_MUX_GMAC123_TO_GEPHY_SGMII | MTK_MUX)
  441. +
  442. +#define MTK_MUX_GMAC123_TO_USXGMII \
  443. + (MTK_ETH_MUX_GMAC123_TO_USXGMII | MTK_MUX | MTK_INFRA)
  444. +
  445. #ifdef CONFIG_SOC_MT7621
  446. #define MTK_CAP_MASK MTK_NETSYS_V2
  447. #else
  448. @@ -987,9 +1070,17 @@ enum mkt_eth_capabilities {
  449. MTK_MUX_U3_GMAC2_TO_QPHY | MTK_U3_COPHY_V2 | \
  450. MTK_NETSYS_V2 | MTK_RSTCTRL_PPE1)
  451. -#define MT7986_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
  452. - MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
  453. - MTK_NETSYS_V2 | MTK_RSTCTRL_PPE1)
  454. +#define MT7986_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
  455. + MTK_MUX_GMAC12_TO_GEPHY_SGMII | \
  456. + MTK_QDMA | MTK_NETSYS_V2 | \
  457. + MTK_RSTCTRL_PPE1)
  458. +
  459. +#define MT7988_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
  460. + MTK_GMAC3_SGMII | MTK_QDMA | \
  461. + MTK_MUX_GMAC123_TO_GEPHY_SGMII | \
  462. + MTK_NETSYS_V3 | MTK_RSTCTRL_PPE1 | \
  463. + MTK_GMAC1_USXGMII | MTK_GMAC2_USXGMII | \
  464. + MTK_GMAC3_USXGMII | MTK_MUX_GMAC123_TO_USXGMII)
  465. struct mtk_tx_dma_desc_info {
  466. dma_addr_t addr;
  467. @@ -1075,7 +1166,7 @@ struct mtk_soc_data {
  468. const struct mtk_reg_map *reg_map;
  469. u32 ana_rgc3;
  470. u64 caps;
  471. - u32 required_clks;
  472. + u64 required_clks;
  473. bool required_pctl;
  474. u8 offload_version;
  475. u8 hash_offset;