750-v6.5-11-net-ethernet-mtk_eth_soc-add-basic-support-for-MT798.patch 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. From 94f825a7eadfc8b4c8828efdb7705d9703f9c73e Mon Sep 17 00:00:00 2001
  2. From: Lorenzo Bianconi <[email protected]>
  3. Date: Tue, 25 Jul 2023 01:57:42 +0100
  4. Subject: [PATCH 105/250] net: ethernet: mtk_eth_soc: add basic support for
  5. MT7988 SoC
  6. Introduce support for ethernet chip available in MT7988 SoC to
  7. mtk_eth_soc driver. As a first step support only the first GMAC which
  8. is hard-wired to the internal DSA switch having 4 built-in gigabit
  9. Ethernet PHYs.
  10. Signed-off-by: Lorenzo Bianconi <[email protected]>
  11. Signed-off-by: Daniel Golle <[email protected]>
  12. Link: https://lore.kernel.org/r/25c8377095b95d186872eeda7aa055da83e8f0ca.1690246605.git.daniel@makrotopia.org
  13. Signed-off-by: Jakub Kicinski <[email protected]>
  14. ---
  15. drivers/net/ethernet/mediatek/mtk_eth_path.c | 14 +-
  16. drivers/net/ethernet/mediatek/mtk_eth_soc.c | 201 +++++++++++++++++--
  17. drivers/net/ethernet/mediatek/mtk_eth_soc.h | 86 +++++++-
  18. 3 files changed, 273 insertions(+), 28 deletions(-)
  19. --- a/drivers/net/ethernet/mediatek/mtk_eth_path.c
  20. +++ b/drivers/net/ethernet/mediatek/mtk_eth_path.c
  21. @@ -43,7 +43,7 @@ static const char *mtk_eth_path_name(u64
  22. static int set_mux_gdm1_to_gmac1_esw(struct mtk_eth *eth, u64 path)
  23. {
  24. bool updated = true;
  25. - u32 val, mask, set;
  26. + u32 mask, set, reg;
  27. switch (path) {
  28. case MTK_ETH_PATH_GMAC1_SGMII:
  29. @@ -59,11 +59,13 @@ static int set_mux_gdm1_to_gmac1_esw(str
  30. break;
  31. }
  32. - if (updated) {
  33. - val = mtk_r32(eth, MTK_MAC_MISC);
  34. - val = (val & mask) | set;
  35. - mtk_w32(eth, val, MTK_MAC_MISC);
  36. - }
  37. + if (mtk_is_netsys_v3_or_greater(eth))
  38. + reg = MTK_MAC_MISC_V3;
  39. + else
  40. + reg = MTK_MAC_MISC;
  41. +
  42. + if (updated)
  43. + mtk_m32(eth, mask, set, reg);
  44. dev_dbg(eth->dev, "path %s in %s updated = %d\n",
  45. mtk_eth_path_name(path), __func__, updated);
  46. --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
  47. +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
  48. @@ -152,6 +152,54 @@ static const struct mtk_reg_map mt7986_r
  49. .pse_oq_sta = 0x01a0,
  50. };
  51. +static const struct mtk_reg_map mt7988_reg_map = {
  52. + .tx_irq_mask = 0x461c,
  53. + .tx_irq_status = 0x4618,
  54. + .pdma = {
  55. + .rx_ptr = 0x6900,
  56. + .rx_cnt_cfg = 0x6904,
  57. + .pcrx_ptr = 0x6908,
  58. + .glo_cfg = 0x6a04,
  59. + .rst_idx = 0x6a08,
  60. + .delay_irq = 0x6a0c,
  61. + .irq_status = 0x6a20,
  62. + .irq_mask = 0x6a28,
  63. + .adma_rx_dbg0 = 0x6a38,
  64. + .int_grp = 0x6a50,
  65. + },
  66. + .qdma = {
  67. + .qtx_cfg = 0x4400,
  68. + .qtx_sch = 0x4404,
  69. + .rx_ptr = 0x4500,
  70. + .rx_cnt_cfg = 0x4504,
  71. + .qcrx_ptr = 0x4508,
  72. + .glo_cfg = 0x4604,
  73. + .rst_idx = 0x4608,
  74. + .delay_irq = 0x460c,
  75. + .fc_th = 0x4610,
  76. + .int_grp = 0x4620,
  77. + .hred = 0x4644,
  78. + .ctx_ptr = 0x4700,
  79. + .dtx_ptr = 0x4704,
  80. + .crx_ptr = 0x4710,
  81. + .drx_ptr = 0x4714,
  82. + .fq_head = 0x4720,
  83. + .fq_tail = 0x4724,
  84. + .fq_count = 0x4728,
  85. + .fq_blen = 0x472c,
  86. + .tx_sch_rate = 0x4798,
  87. + },
  88. + .gdm1_cnt = 0x1c00,
  89. + .gdma_to_ppe0 = 0x3333,
  90. + .ppe_base = 0x2000,
  91. + .wdma_base = {
  92. + [0] = 0x4800,
  93. + [1] = 0x4c00,
  94. + },
  95. + .pse_iq_sta = 0x0180,
  96. + .pse_oq_sta = 0x01a0,
  97. +};
  98. +
  99. /* strings used by ethtool */
  100. static const struct mtk_ethtool_stats {
  101. char str[ETH_GSTRING_LEN];
  102. @@ -179,10 +227,54 @@ static const struct mtk_ethtool_stats {
  103. };
  104. static const char * const mtk_clks_source_name[] = {
  105. - "ethif", "sgmiitop", "esw", "gp0", "gp1", "gp2", "fe", "trgpll",
  106. - "sgmii_tx250m", "sgmii_rx250m", "sgmii_cdr_ref", "sgmii_cdr_fb",
  107. - "sgmii2_tx250m", "sgmii2_rx250m", "sgmii2_cdr_ref", "sgmii2_cdr_fb",
  108. - "sgmii_ck", "eth2pll", "wocpu0", "wocpu1", "netsys0", "netsys1"
  109. + "ethif",
  110. + "sgmiitop",
  111. + "esw",
  112. + "gp0",
  113. + "gp1",
  114. + "gp2",
  115. + "gp3",
  116. + "xgp1",
  117. + "xgp2",
  118. + "xgp3",
  119. + "crypto",
  120. + "fe",
  121. + "trgpll",
  122. + "sgmii_tx250m",
  123. + "sgmii_rx250m",
  124. + "sgmii_cdr_ref",
  125. + "sgmii_cdr_fb",
  126. + "sgmii2_tx250m",
  127. + "sgmii2_rx250m",
  128. + "sgmii2_cdr_ref",
  129. + "sgmii2_cdr_fb",
  130. + "sgmii_ck",
  131. + "eth2pll",
  132. + "wocpu0",
  133. + "wocpu1",
  134. + "netsys0",
  135. + "netsys1",
  136. + "ethwarp_wocpu2",
  137. + "ethwarp_wocpu1",
  138. + "ethwarp_wocpu0",
  139. + "top_usxgmii0_sel",
  140. + "top_usxgmii1_sel",
  141. + "top_sgm0_sel",
  142. + "top_sgm1_sel",
  143. + "top_xfi_phy0_xtal_sel",
  144. + "top_xfi_phy1_xtal_sel",
  145. + "top_eth_gmii_sel",
  146. + "top_eth_refck_50m_sel",
  147. + "top_eth_sys_200m_sel",
  148. + "top_eth_sys_sel",
  149. + "top_eth_xgmii_sel",
  150. + "top_eth_mii_sel",
  151. + "top_netsys_sel",
  152. + "top_netsys_500m_sel",
  153. + "top_netsys_pao_2x_sel",
  154. + "top_netsys_sync_250m_sel",
  155. + "top_netsys_ppefb_250m_sel",
  156. + "top_netsys_warp_sel",
  157. };
  158. void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg)
  159. @@ -195,7 +287,7 @@ u32 mtk_r32(struct mtk_eth *eth, unsigne
  160. return __raw_readl(eth->base + reg);
  161. }
  162. -static u32 mtk_m32(struct mtk_eth *eth, u32 mask, u32 set, unsigned reg)
  163. +u32 mtk_m32(struct mtk_eth *eth, u32 mask, u32 set, unsigned int reg)
  164. {
  165. u32 val;
  166. @@ -326,6 +418,19 @@ static void mtk_gmac0_rgmii_adjust(struc
  167. dev_err(eth->dev, "Missing PLL configuration, ethernet may not work\n");
  168. }
  169. +static void mtk_setup_bridge_switch(struct mtk_eth *eth)
  170. +{
  171. + /* Force Port1 XGMAC Link Up */
  172. + mtk_m32(eth, 0, MTK_XGMAC_FORCE_LINK(MTK_GMAC1_ID),
  173. + MTK_XGMAC_STS(MTK_GMAC1_ID));
  174. +
  175. + /* Adjust GSW bridge IPG to 11 */
  176. + mtk_m32(eth, GSWTX_IPG_MASK | GSWRX_IPG_MASK,
  177. + (GSW_IPG_11 << GSWTX_IPG_SHIFT) |
  178. + (GSW_IPG_11 << GSWRX_IPG_SHIFT),
  179. + MTK_GSW_CFG);
  180. +}
  181. +
  182. static struct phylink_pcs *mtk_mac_select_pcs(struct phylink_config *config,
  183. phy_interface_t interface)
  184. {
  185. @@ -395,6 +500,8 @@ static void mtk_mac_config(struct phylin
  186. goto init_err;
  187. }
  188. break;
  189. + case PHY_INTERFACE_MODE_INTERNAL:
  190. + break;
  191. default:
  192. goto err_phy;
  193. }
  194. @@ -472,6 +579,15 @@ static void mtk_mac_config(struct phylin
  195. return;
  196. }
  197. + /* Setup gmac */
  198. + if (mtk_is_netsys_v3_or_greater(eth) &&
  199. + mac->interface == PHY_INTERFACE_MODE_INTERNAL) {
  200. + mtk_w32(mac->hw, MTK_GDMA_XGDM_SEL, MTK_GDMA_EG_CTRL(mac->id));
  201. + mtk_w32(mac->hw, MAC_MCR_FORCE_LINK_DOWN, MTK_MAC_MCR(mac->id));
  202. +
  203. + mtk_setup_bridge_switch(eth);
  204. + }
  205. +
  206. return;
  207. err_phy:
  208. @@ -682,11 +798,15 @@ static int mtk_mdio_init(struct mtk_eth
  209. }
  210. divider = min_t(unsigned int, DIV_ROUND_UP(MDC_MAX_FREQ, max_clk), 63);
  211. + /* Configure MDC Turbo Mode */
  212. + if (mtk_is_netsys_v3_or_greater(eth))
  213. + mtk_m32(eth, 0, MISC_MDC_TURBO, MTK_MAC_MISC_V3);
  214. +
  215. /* Configure MDC Divider */
  216. - val = mtk_r32(eth, MTK_PPSC);
  217. - val &= ~PPSC_MDC_CFG;
  218. - val |= FIELD_PREP(PPSC_MDC_CFG, divider) | PPSC_MDC_TURBO;
  219. - mtk_w32(eth, val, MTK_PPSC);
  220. + val = FIELD_PREP(PPSC_MDC_CFG, divider);
  221. + if (!mtk_is_netsys_v3_or_greater(eth))
  222. + val |= PPSC_MDC_TURBO;
  223. + mtk_m32(eth, PPSC_MDC_CFG, val, MTK_PPSC);
  224. dev_dbg(eth->dev, "MDC is running on %d Hz\n", MDC_MAX_FREQ / divider);
  225. @@ -1145,10 +1265,19 @@ static void mtk_tx_set_dma_desc_v2(struc
  226. data |= TX_DMA_LS0;
  227. WRITE_ONCE(desc->txd3, data);
  228. - if (mac->id == MTK_GMAC3_ID)
  229. - data = PSE_GDM3_PORT;
  230. - else
  231. - data = (mac->id + 1) << TX_DMA_FPORT_SHIFT_V2; /* forward port */
  232. + /* set forward port */
  233. + switch (mac->id) {
  234. + case MTK_GMAC1_ID:
  235. + data = PSE_GDM1_PORT << TX_DMA_FPORT_SHIFT_V2;
  236. + break;
  237. + case MTK_GMAC2_ID:
  238. + data = PSE_GDM2_PORT << TX_DMA_FPORT_SHIFT_V2;
  239. + break;
  240. + case MTK_GMAC3_ID:
  241. + data = PSE_GDM3_PORT << TX_DMA_FPORT_SHIFT_V2;
  242. + break;
  243. + }
  244. +
  245. data |= TX_DMA_SWC_V2 | QID_BITS_V2(info->qid);
  246. WRITE_ONCE(desc->txd4, data);
  247. @@ -4304,6 +4433,17 @@ static int mtk_add_mac(struct mtk_eth *e
  248. mac->phylink_config.supported_interfaces);
  249. }
  250. + if (mtk_is_netsys_v3_or_greater(mac->hw) &&
  251. + MTK_HAS_CAPS(mac->hw->soc->caps, MTK_ESW_BIT) &&
  252. + id == MTK_GMAC1_ID) {
  253. + mac->phylink_config.mac_capabilities = MAC_ASYM_PAUSE |
  254. + MAC_SYM_PAUSE |
  255. + MAC_10000FD;
  256. + phy_interface_zero(mac->phylink_config.supported_interfaces);
  257. + __set_bit(PHY_INTERFACE_MODE_INTERNAL,
  258. + mac->phylink_config.supported_interfaces);
  259. + }
  260. +
  261. phylink = phylink_create(&mac->phylink_config,
  262. of_fwnode_handle(mac->of_node),
  263. phy_mode, &mtk_phylink_ops);
  264. @@ -4826,6 +4966,24 @@ static const struct mtk_soc_data mt7986_
  265. },
  266. };
  267. +static const struct mtk_soc_data mt7988_data = {
  268. + .reg_map = &mt7988_reg_map,
  269. + .ana_rgc3 = 0x128,
  270. + .caps = MT7988_CAPS,
  271. + .hw_features = MTK_HW_FEATURES,
  272. + .required_clks = MT7988_CLKS_BITMAP,
  273. + .required_pctl = false,
  274. + .version = 3,
  275. + .txrx = {
  276. + .txd_size = sizeof(struct mtk_tx_dma_v2),
  277. + .rxd_size = sizeof(struct mtk_rx_dma_v2),
  278. + .rx_irq_done_mask = MTK_RX_DONE_INT_V2,
  279. + .rx_dma_l4_valid = RX_DMA_L4_VALID_V2,
  280. + .dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
  281. + .dma_len_offset = 8,
  282. + },
  283. +};
  284. +
  285. static const struct mtk_soc_data rt5350_data = {
  286. .reg_map = &mt7628_reg_map,
  287. .caps = MT7628_CAPS,
  288. @@ -4844,14 +5002,15 @@ static const struct mtk_soc_data rt5350_
  289. };
  290. const struct of_device_id of_mtk_match[] = {
  291. - { .compatible = "mediatek,mt2701-eth", .data = &mt2701_data},
  292. - { .compatible = "mediatek,mt7621-eth", .data = &mt7621_data},
  293. - { .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
  294. - { .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
  295. - { .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},
  296. - { .compatible = "mediatek,mt7981-eth", .data = &mt7981_data},
  297. - { .compatible = "mediatek,mt7986-eth", .data = &mt7986_data},
  298. - { .compatible = "ralink,rt5350-eth", .data = &rt5350_data},
  299. + { .compatible = "mediatek,mt2701-eth", .data = &mt2701_data },
  300. + { .compatible = "mediatek,mt7621-eth", .data = &mt7621_data },
  301. + { .compatible = "mediatek,mt7622-eth", .data = &mt7622_data },
  302. + { .compatible = "mediatek,mt7623-eth", .data = &mt7623_data },
  303. + { .compatible = "mediatek,mt7629-eth", .data = &mt7629_data },
  304. + { .compatible = "mediatek,mt7981-eth", .data = &mt7981_data },
  305. + { .compatible = "mediatek,mt7986-eth", .data = &mt7986_data },
  306. + { .compatible = "mediatek,mt7988-eth", .data = &mt7988_data },
  307. + { .compatible = "ralink,rt5350-eth", .data = &rt5350_data },
  308. {},
  309. };
  310. MODULE_DEVICE_TABLE(of, of_mtk_match);
  311. --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
  312. +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
  313. @@ -117,7 +117,8 @@
  314. #define MTK_CDMP_EG_CTRL 0x404
  315. /* GDM Exgress Control Register */
  316. -#define MTK_GDMA_FWD_CFG(x) (0x500 + (x * 0x1000))
  317. +#define MTK_GDMA_FWD_CFG(x) ({ typeof(x) _x = (x); (_x == MTK_GMAC3_ID) ? \
  318. + 0x540 : 0x500 + (_x * 0x1000); })
  319. #define MTK_GDMA_SPECIAL_TAG BIT(24)
  320. #define MTK_GDMA_ICS_EN BIT(22)
  321. #define MTK_GDMA_TCS_EN BIT(21)
  322. @@ -126,6 +127,11 @@
  323. #define MTK_GDMA_TO_PDMA 0x0
  324. #define MTK_GDMA_DROP_ALL 0x7777
  325. +/* GDM Egress Control Register */
  326. +#define MTK_GDMA_EG_CTRL(x) ({ typeof(x) _x = (x); (_x == MTK_GMAC3_ID) ? \
  327. + 0x544 : 0x504 + (_x * 0x1000); })
  328. +#define MTK_GDMA_XGDM_SEL BIT(31)
  329. +
  330. /* Unicast Filter MAC Address Register - Low */
  331. #define MTK_GDMA_MAC_ADRL(x) (0x508 + (x * 0x1000))
  332. @@ -386,7 +392,26 @@
  333. #define PHY_IAC_TIMEOUT HZ
  334. #define MTK_MAC_MISC 0x1000c
  335. +#define MTK_MAC_MISC_V3 0x10010
  336. #define MTK_MUX_TO_ESW BIT(0)
  337. +#define MISC_MDC_TURBO BIT(4)
  338. +
  339. +/* XMAC status registers */
  340. +#define MTK_XGMAC_STS(x) (((x) == MTK_GMAC3_ID) ? 0x1001C : 0x1000C)
  341. +#define MTK_XGMAC_FORCE_LINK(x) (((x) == MTK_GMAC2_ID) ? BIT(31) : BIT(15))
  342. +#define MTK_USXGMII_PCS_LINK BIT(8)
  343. +#define MTK_XGMAC_RX_FC BIT(5)
  344. +#define MTK_XGMAC_TX_FC BIT(4)
  345. +#define MTK_USXGMII_PCS_MODE GENMASK(3, 1)
  346. +#define MTK_XGMAC_LINK_STS BIT(0)
  347. +
  348. +/* GSW bridge registers */
  349. +#define MTK_GSW_CFG (0x10080)
  350. +#define GSWTX_IPG_MASK GENMASK(19, 16)
  351. +#define GSWTX_IPG_SHIFT 16
  352. +#define GSWRX_IPG_MASK GENMASK(3, 0)
  353. +#define GSWRX_IPG_SHIFT 0
  354. +#define GSW_IPG_11 11
  355. /* Mac control registers */
  356. #define MTK_MAC_MCR(x) (0x10100 + (x * 0x100))
  357. @@ -644,6 +669,11 @@ enum mtk_clks_map {
  358. MTK_CLK_GP0,
  359. MTK_CLK_GP1,
  360. MTK_CLK_GP2,
  361. + MTK_CLK_GP3,
  362. + MTK_CLK_XGP1,
  363. + MTK_CLK_XGP2,
  364. + MTK_CLK_XGP3,
  365. + MTK_CLK_CRYPTO,
  366. MTK_CLK_FE,
  367. MTK_CLK_TRGPLL,
  368. MTK_CLK_SGMII_TX_250M,
  369. @@ -660,6 +690,27 @@ enum mtk_clks_map {
  370. MTK_CLK_WOCPU1,
  371. MTK_CLK_NETSYS0,
  372. MTK_CLK_NETSYS1,
  373. + MTK_CLK_ETHWARP_WOCPU2,
  374. + MTK_CLK_ETHWARP_WOCPU1,
  375. + MTK_CLK_ETHWARP_WOCPU0,
  376. + MTK_CLK_TOP_USXGMII_SBUS_0_SEL,
  377. + MTK_CLK_TOP_USXGMII_SBUS_1_SEL,
  378. + MTK_CLK_TOP_SGM_0_SEL,
  379. + MTK_CLK_TOP_SGM_1_SEL,
  380. + MTK_CLK_TOP_XFI_PHY_0_XTAL_SEL,
  381. + MTK_CLK_TOP_XFI_PHY_1_XTAL_SEL,
  382. + MTK_CLK_TOP_ETH_GMII_SEL,
  383. + MTK_CLK_TOP_ETH_REFCK_50M_SEL,
  384. + MTK_CLK_TOP_ETH_SYS_200M_SEL,
  385. + MTK_CLK_TOP_ETH_SYS_SEL,
  386. + MTK_CLK_TOP_ETH_XGMII_SEL,
  387. + MTK_CLK_TOP_ETH_MII_SEL,
  388. + MTK_CLK_TOP_NETSYS_SEL,
  389. + MTK_CLK_TOP_NETSYS_500M_SEL,
  390. + MTK_CLK_TOP_NETSYS_PAO_2X_SEL,
  391. + MTK_CLK_TOP_NETSYS_SYNC_250M_SEL,
  392. + MTK_CLK_TOP_NETSYS_PPEFB_250M_SEL,
  393. + MTK_CLK_TOP_NETSYS_WARP_SEL,
  394. MTK_CLK_MAX
  395. };
  396. @@ -713,6 +764,36 @@ enum mtk_clks_map {
  397. BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
  398. BIT_ULL(MTK_CLK_SGMII2_CDR_REF) | \
  399. BIT_ULL(MTK_CLK_SGMII2_CDR_FB))
  400. +#define MT7988_CLKS_BITMAP (BIT_ULL(MTK_CLK_FE) | BIT_ULL(MTK_CLK_ESW) | \
  401. + BIT_ULL(MTK_CLK_GP1) | BIT_ULL(MTK_CLK_GP2) | \
  402. + BIT_ULL(MTK_CLK_GP3) | BIT_ULL(MTK_CLK_XGP1) | \
  403. + BIT_ULL(MTK_CLK_XGP2) | BIT_ULL(MTK_CLK_XGP3) | \
  404. + BIT_ULL(MTK_CLK_CRYPTO) | \
  405. + BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
  406. + BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
  407. + BIT_ULL(MTK_CLK_SGMII2_TX_250M) | \
  408. + BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
  409. + BIT_ULL(MTK_CLK_ETHWARP_WOCPU2) | \
  410. + BIT_ULL(MTK_CLK_ETHWARP_WOCPU1) | \
  411. + BIT_ULL(MTK_CLK_ETHWARP_WOCPU0) | \
  412. + BIT_ULL(MTK_CLK_TOP_USXGMII_SBUS_0_SEL) | \
  413. + BIT_ULL(MTK_CLK_TOP_USXGMII_SBUS_1_SEL) | \
  414. + BIT_ULL(MTK_CLK_TOP_SGM_0_SEL) | \
  415. + BIT_ULL(MTK_CLK_TOP_SGM_1_SEL) | \
  416. + BIT_ULL(MTK_CLK_TOP_XFI_PHY_0_XTAL_SEL) | \
  417. + BIT_ULL(MTK_CLK_TOP_XFI_PHY_1_XTAL_SEL) | \
  418. + BIT_ULL(MTK_CLK_TOP_ETH_GMII_SEL) | \
  419. + BIT_ULL(MTK_CLK_TOP_ETH_REFCK_50M_SEL) | \
  420. + BIT_ULL(MTK_CLK_TOP_ETH_SYS_200M_SEL) | \
  421. + BIT_ULL(MTK_CLK_TOP_ETH_SYS_SEL) | \
  422. + BIT_ULL(MTK_CLK_TOP_ETH_XGMII_SEL) | \
  423. + BIT_ULL(MTK_CLK_TOP_ETH_MII_SEL) | \
  424. + BIT_ULL(MTK_CLK_TOP_NETSYS_SEL) | \
  425. + BIT_ULL(MTK_CLK_TOP_NETSYS_500M_SEL) | \
  426. + BIT_ULL(MTK_CLK_TOP_NETSYS_PAO_2X_SEL) | \
  427. + BIT_ULL(MTK_CLK_TOP_NETSYS_SYNC_250M_SEL) | \
  428. + BIT_ULL(MTK_CLK_TOP_NETSYS_PPEFB_250M_SEL) | \
  429. + BIT_ULL(MTK_CLK_TOP_NETSYS_WARP_SEL))
  430. enum mtk_dev_state {
  431. MTK_HW_INIT,
  432. @@ -961,6 +1042,8 @@ enum mkt_eth_capabilities {
  433. MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
  434. MTK_RSTCTRL_PPE1)
  435. +#define MT7988_CAPS (MTK_GDM1_ESW | MTK_QDMA | MTK_RSTCTRL_PPE1)
  436. +
  437. struct mtk_tx_dma_desc_info {
  438. dma_addr_t addr;
  439. u32 size;
  440. @@ -1306,6 +1389,7 @@ void mtk_stats_update_mac(struct mtk_mac
  441. void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg);
  442. u32 mtk_r32(struct mtk_eth *eth, unsigned reg);
  443. +u32 mtk_m32(struct mtk_eth *eth, u32 mask, u32 set, unsigned int reg);
  444. int mtk_gmac_sgmii_path_setup(struct mtk_eth *eth, int mac_id);
  445. int mtk_gmac_gephy_path_setup(struct mtk_eth *eth, int mac_id);