702-v5.19-30-net-ethernet-mtk_eth_soc-introduce-support-for-mt798.patch 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. From: Lorenzo Bianconi <[email protected]>
  2. Date: Fri, 20 May 2022 20:11:39 +0200
  3. Subject: [PATCH] net: ethernet: mtk_eth_soc: introduce support for mt7986
  4. chipset
  5. Add support for mt7986-eth driver available on mt7986 soc.
  6. Tested-by: Sam Shih <[email protected]>
  7. Signed-off-by: Lorenzo Bianconi <[email protected]>
  8. Signed-off-by: David S. Miller <[email protected]>
  9. ---
  10. --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
  11. +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
  12. @@ -87,6 +87,43 @@ static const struct mtk_reg_map mt7628_r
  13. },
  14. };
  15. +static const struct mtk_reg_map mt7986_reg_map = {
  16. + .tx_irq_mask = 0x461c,
  17. + .tx_irq_status = 0x4618,
  18. + .pdma = {
  19. + .rx_ptr = 0x6100,
  20. + .rx_cnt_cfg = 0x6104,
  21. + .pcrx_ptr = 0x6108,
  22. + .glo_cfg = 0x6204,
  23. + .rst_idx = 0x6208,
  24. + .delay_irq = 0x620c,
  25. + .irq_status = 0x6220,
  26. + .irq_mask = 0x6228,
  27. + .int_grp = 0x6250,
  28. + },
  29. + .qdma = {
  30. + .qtx_cfg = 0x4400,
  31. + .rx_ptr = 0x4500,
  32. + .rx_cnt_cfg = 0x4504,
  33. + .qcrx_ptr = 0x4508,
  34. + .glo_cfg = 0x4604,
  35. + .rst_idx = 0x4608,
  36. + .delay_irq = 0x460c,
  37. + .fc_th = 0x4610,
  38. + .int_grp = 0x4620,
  39. + .hred = 0x4644,
  40. + .ctx_ptr = 0x4700,
  41. + .dtx_ptr = 0x4704,
  42. + .crx_ptr = 0x4710,
  43. + .drx_ptr = 0x4714,
  44. + .fq_head = 0x4720,
  45. + .fq_tail = 0x4724,
  46. + .fq_count = 0x4728,
  47. + .fq_blen = 0x472c,
  48. + },
  49. + .gdm1_cnt = 0x1c00,
  50. +};
  51. +
  52. /* strings used by ethtool */
  53. static const struct mtk_ethtool_stats {
  54. char str[ETH_GSTRING_LEN];
  55. @@ -110,7 +147,7 @@ static const char * const mtk_clks_sourc
  56. "ethif", "sgmiitop", "esw", "gp0", "gp1", "gp2", "fe", "trgpll",
  57. "sgmii_tx250m", "sgmii_rx250m", "sgmii_cdr_ref", "sgmii_cdr_fb",
  58. "sgmii2_tx250m", "sgmii2_rx250m", "sgmii2_cdr_ref", "sgmii2_cdr_fb",
  59. - "sgmii_ck", "eth2pll",
  60. + "sgmii_ck", "eth2pll", "wocpu0", "wocpu1", "netsys0", "netsys1"
  61. };
  62. void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg)
  63. @@ -3718,6 +3755,21 @@ static const struct mtk_soc_data mt7629_
  64. },
  65. };
  66. +static const struct mtk_soc_data mt7986_data = {
  67. + .reg_map = &mt7986_reg_map,
  68. + .ana_rgc3 = 0x128,
  69. + .caps = MT7986_CAPS,
  70. + .required_clks = MT7986_CLKS_BITMAP,
  71. + .required_pctl = false,
  72. + .txrx = {
  73. + .txd_size = sizeof(struct mtk_tx_dma_v2),
  74. + .rxd_size = sizeof(struct mtk_rx_dma_v2),
  75. + .rx_irq_done_mask = MTK_RX_DONE_INT_V2,
  76. + .dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
  77. + .dma_len_offset = 8,
  78. + },
  79. +};
  80. +
  81. static const struct mtk_soc_data rt5350_data = {
  82. .reg_map = &mt7628_reg_map,
  83. .caps = MT7628_CAPS,
  84. @@ -3740,6 +3792,7 @@ const struct of_device_id of_mtk_match[]
  85. { .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
  86. { .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
  87. { .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},
  88. + { .compatible = "mediatek,mt7986-eth", .data = &mt7986_data},
  89. { .compatible = "ralink,rt5350-eth", .data = &rt5350_data},
  90. {},
  91. };
  92. --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
  93. +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
  94. @@ -624,6 +624,10 @@ enum mtk_clks_map {
  95. MTK_CLK_SGMII2_CDR_FB,
  96. MTK_CLK_SGMII_CK,
  97. MTK_CLK_ETH2PLL,
  98. + MTK_CLK_WOCPU0,
  99. + MTK_CLK_WOCPU1,
  100. + MTK_CLK_NETSYS0,
  101. + MTK_CLK_NETSYS1,
  102. MTK_CLK_MAX
  103. };
  104. @@ -654,6 +658,16 @@ enum mtk_clks_map {
  105. BIT(MTK_CLK_SGMII2_CDR_FB) | \
  106. BIT(MTK_CLK_SGMII_CK) | \
  107. BIT(MTK_CLK_ETH2PLL) | BIT(MTK_CLK_SGMIITOP))
  108. +#define MT7986_CLKS_BITMAP (BIT(MTK_CLK_FE) | BIT(MTK_CLK_GP2) | BIT(MTK_CLK_GP1) | \
  109. + BIT(MTK_CLK_WOCPU1) | BIT(MTK_CLK_WOCPU0) | \
  110. + BIT(MTK_CLK_SGMII_TX_250M) | \
  111. + BIT(MTK_CLK_SGMII_RX_250M) | \
  112. + BIT(MTK_CLK_SGMII_CDR_REF) | \
  113. + BIT(MTK_CLK_SGMII_CDR_FB) | \
  114. + BIT(MTK_CLK_SGMII2_TX_250M) | \
  115. + BIT(MTK_CLK_SGMII2_RX_250M) | \
  116. + BIT(MTK_CLK_SGMII2_CDR_REF) | \
  117. + BIT(MTK_CLK_SGMII2_CDR_FB))
  118. enum mtk_dev_state {
  119. MTK_HW_INIT,
  120. @@ -852,6 +866,10 @@ enum mkt_eth_capabilities {
  121. MTK_MUX_U3_GMAC2_TO_QPHY | \
  122. MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA)
  123. +#define MT7986_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
  124. + MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
  125. + MTK_NETSYS_V2 | MTK_RSTCTRL_PPE1)
  126. +
  127. struct mtk_tx_dma_desc_info {
  128. dma_addr_t addr;
  129. u32 size;