002-0009-net-mediatek-add-support-for-MediaTek-MT7981-MT7986.patch 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. From 4bbe44513bf9dc7041b2ce4aac6e841a0e10d2e6 Mon Sep 17 00:00:00 2001
  2. From: Weijie Gao <[email protected]>
  3. Date: Wed, 31 Aug 2022 19:04:29 +0800
  4. Subject: [PATCH 09/32] net: mediatek: add support for MediaTek MT7981/MT7986
  5. This patch adds support for MediaTek MT7981 and MT7986. Both chips uses
  6. PDMA v2.
  7. Reviewed-by: Ramon Fried <[email protected]>
  8. Signed-off-by: Weijie Gao <[email protected]>
  9. ---
  10. drivers/net/mtk_eth.c | 27 +++++++++++++++++++++++++++
  11. drivers/net/mtk_eth.h | 5 +++++
  12. 2 files changed, 32 insertions(+)
  13. --- a/drivers/net/mtk_eth.c
  14. +++ b/drivers/net/mtk_eth.c
  15. @@ -115,6 +115,7 @@ struct mtk_eth_priv {
  16. int force_mode;
  17. int speed;
  18. int duplex;
  19. + bool pn_swap;
  20. struct phy_device *phydev;
  21. int phy_interface;
  22. @@ -1057,6 +1058,12 @@ static void mtk_sgmii_init(struct mtk_et
  23. /* SGMII force mode setting */
  24. writel(SGMII_FORCE_MODE, priv->sgmii_base + SGMSYS_SGMII_MODE);
  25. + /* SGMII PN SWAP setting */
  26. + if (priv->pn_swap) {
  27. + setbits_le32(priv->sgmii_base + SGMSYS_QPHY_WRAP_CTRL,
  28. + SGMII_PN_SWAP_TX_RX);
  29. + }
  30. +
  31. /* Release PHYA power down state */
  32. clrsetbits_le32(priv->sgmii_base + SGMSYS_QPHY_PWR_STATE_CTRL,
  33. SGMII_PHYA_PWD, 0);
  34. @@ -1470,6 +1477,8 @@ static int mtk_eth_of_to_plat(struct ude
  35. dev_err(dev, "Unable to find sgmii\n");
  36. return -ENODEV;
  37. }
  38. +
  39. + priv->pn_swap = ofnode_read_bool(args.node, "pn_swap");
  40. }
  41. /* check for switch first, otherwise phy will be used */
  42. @@ -1520,6 +1529,22 @@ static int mtk_eth_of_to_plat(struct ude
  43. return 0;
  44. }
  45. +static const struct mtk_soc_data mt7986_data = {
  46. + .caps = MT7986_CAPS,
  47. + .ana_rgc3 = 0x128,
  48. + .pdma_base = PDMA_V2_BASE,
  49. + .txd_size = sizeof(struct mtk_tx_dma_v2),
  50. + .rxd_size = sizeof(struct mtk_rx_dma_v2),
  51. +};
  52. +
  53. +static const struct mtk_soc_data mt7981_data = {
  54. + .caps = MT7986_CAPS,
  55. + .ana_rgc3 = 0x128,
  56. + .pdma_base = PDMA_V2_BASE,
  57. + .txd_size = sizeof(struct mtk_tx_dma_v2),
  58. + .rxd_size = sizeof(struct mtk_rx_dma_v2),
  59. +};
  60. +
  61. static const struct mtk_soc_data mt7629_data = {
  62. .ana_rgc3 = 0x128,
  63. .pdma_base = PDMA_V1_BASE,
  64. @@ -1549,6 +1574,8 @@ static const struct mtk_soc_data mt7621_
  65. };
  66. static const struct udevice_id mtk_eth_ids[] = {
  67. + { .compatible = "mediatek,mt7986-eth", .data = (ulong)&mt7986_data },
  68. + { .compatible = "mediatek,mt7981-eth", .data = (ulong)&mt7981_data },
  69. { .compatible = "mediatek,mt7629-eth", .data = (ulong)&mt7629_data },
  70. { .compatible = "mediatek,mt7623-eth", .data = (ulong)&mt7623_data },
  71. { .compatible = "mediatek,mt7622-eth", .data = (ulong)&mt7622_data },
  72. --- a/drivers/net/mtk_eth.h
  73. +++ b/drivers/net/mtk_eth.h
  74. @@ -36,6 +36,8 @@ enum mkt_eth_capabilities {
  75. #define MT7623_CAPS (MTK_GMAC1_TRGMII)
  76. +#define MT7986_CAPS (MTK_NETSYS_V2)
  77. +
  78. /* Frame Engine Register Bases */
  79. #define PDMA_V1_BASE 0x0800
  80. #define PDMA_V2_BASE 0x6000
  81. @@ -72,6 +74,9 @@ enum mkt_eth_capabilities {
  82. #define SGMSYS_QPHY_PWR_STATE_CTRL 0xe8
  83. #define SGMII_PHYA_PWD BIT(4)
  84. +#define SGMSYS_QPHY_WRAP_CTRL 0xec
  85. +#define SGMII_PN_SWAP_TX_RX 0x03
  86. +
  87. #define SGMSYS_GEN2_SPEED 0x2028
  88. #define SGMSYS_GEN2_SPEED_V2 0x128
  89. #define SGMSYS_SPEED_2500 BIT(2)