In order to support Ethernet on the MT7988 SoC add support for NETSYS v3 as well as new paths and USXGMII SerDes to the mtk_eth_soc driver. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
495 lines
17 KiB
Diff
495 lines
17 KiB
Diff
From 661bacf4363ca68939c15e20056b5f72fbd034e7 Mon Sep 17 00:00:00 2001
|
|
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
Date: Sat, 25 Feb 2023 00:08:24 +0100
|
|
Subject: [PATCH 6/7] net: ethernet: mtk_eth_soc: add support for MT7988 SoC
|
|
|
|
Introduce support for ethernet chip available in MT7988 SoC to
|
|
mtk_eth_soc driver.
|
|
---
|
|
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 153 ++++++++++++++--
|
|
drivers/net/ethernet/mediatek/mtk_eth_soc.h | 193 ++++++++++++++------
|
|
2 files changed, 279 insertions(+), 67 deletions(-)
|
|
|
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
|
@@ -152,6 +152,54 @@ static const struct mtk_reg_map mt7986_r
|
|
.pse_oq_sta = 0x01a0,
|
|
};
|
|
|
|
+static const struct mtk_reg_map mt7988_reg_map = {
|
|
+ .tx_irq_mask = 0x461c,
|
|
+ .tx_irq_status = 0x4618,
|
|
+ .pdma = {
|
|
+ .rx_ptr = 0x6900,
|
|
+ .rx_cnt_cfg = 0x6904,
|
|
+ .pcrx_ptr = 0x6908,
|
|
+ .glo_cfg = 0x6a04,
|
|
+ .rst_idx = 0x6a08,
|
|
+ .delay_irq = 0x6a0c,
|
|
+ .irq_status = 0x6a20,
|
|
+ .irq_mask = 0x6a28,
|
|
+ .adma_rx_dbg0 = 0x6a38,
|
|
+ .int_grp = 0x6a50,
|
|
+ },
|
|
+ .qdma = {
|
|
+ .qtx_cfg = 0x4400,
|
|
+ .qtx_sch = 0x4404,
|
|
+ .rx_ptr = 0x4500,
|
|
+ .rx_cnt_cfg = 0x4504,
|
|
+ .qcrx_ptr = 0x4508,
|
|
+ .glo_cfg = 0x4604,
|
|
+ .rst_idx = 0x4608,
|
|
+ .delay_irq = 0x460c,
|
|
+ .fc_th = 0x4610,
|
|
+ .int_grp = 0x4620,
|
|
+ .hred = 0x4644,
|
|
+ .ctx_ptr = 0x4700,
|
|
+ .dtx_ptr = 0x4704,
|
|
+ .crx_ptr = 0x4710,
|
|
+ .drx_ptr = 0x4714,
|
|
+ .fq_head = 0x4720,
|
|
+ .fq_tail = 0x4724,
|
|
+ .fq_count = 0x4728,
|
|
+ .fq_blen = 0x472c,
|
|
+ .tx_sch_rate = 0x4798,
|
|
+ },
|
|
+ .gdm1_cnt = 0x1c00,
|
|
+ .gdma_to_ppe0 = 0x3333,
|
|
+ .ppe_base = 0x2200,
|
|
+ .wdma_base = {
|
|
+ [0] = 0x4800,
|
|
+ [1] = 0x4c00,
|
|
+ },
|
|
+ .pse_iq_sta = 0x0180,
|
|
+ .pse_oq_sta = 0x01a0,
|
|
+};
|
|
+
|
|
/* strings used by ethtool */
|
|
static const struct mtk_ethtool_stats {
|
|
char str[ETH_GSTRING_LEN];
|
|
@@ -179,10 +227,54 @@ static const struct mtk_ethtool_stats {
|
|
};
|
|
|
|
static const char * const mtk_clks_source_name[] = {
|
|
- "ethif", "sgmiitop", "esw", "gp0", "gp1", "gp2", "fe", "trgpll",
|
|
- "sgmii_tx250m", "sgmii_rx250m", "sgmii_cdr_ref", "sgmii_cdr_fb",
|
|
- "sgmii2_tx250m", "sgmii2_rx250m", "sgmii2_cdr_ref", "sgmii2_cdr_fb",
|
|
- "sgmii_ck", "eth2pll", "wocpu0", "wocpu1", "netsys0", "netsys1"
|
|
+ "ethif",
|
|
+ "sgmiitop",
|
|
+ "esw",
|
|
+ "gp0",
|
|
+ "gp1",
|
|
+ "gp2",
|
|
+ "gp3",
|
|
+ "xgp1",
|
|
+ "xgp2",
|
|
+ "xgp3",
|
|
+ "crypto",
|
|
+ "fe",
|
|
+ "trgpll",
|
|
+ "sgmii_tx250m",
|
|
+ "sgmii_rx250m",
|
|
+ "sgmii_cdr_ref",
|
|
+ "sgmii_cdr_fb",
|
|
+ "sgmii2_tx250m",
|
|
+ "sgmii2_rx250m",
|
|
+ "sgmii2_cdr_ref",
|
|
+ "sgmii2_cdr_fb",
|
|
+ "sgmii_ck",
|
|
+ "eth2pll",
|
|
+ "wocpu0",
|
|
+ "wocpu1",
|
|
+ "netsys0",
|
|
+ "netsys1",
|
|
+ "ethwarp_wocpu2",
|
|
+ "ethwarp_wocpu1",
|
|
+ "ethwarp_wocpu0",
|
|
+ "top_usxgmii0_sel",
|
|
+ "top_usxgmii1_sel",
|
|
+ "top_sgm0_sel",
|
|
+ "top_sgm1_sel",
|
|
+ "top_xfi_phy0_xtal_sel",
|
|
+ "top_xfi_phy1_xtal_sel",
|
|
+ "top_eth_gmii_sel",
|
|
+ "top_eth_refck_50m_sel",
|
|
+ "top_eth_sys_200m_sel",
|
|
+ "top_eth_sys_sel",
|
|
+ "top_eth_xgmii_sel",
|
|
+ "top_eth_mii_sel",
|
|
+ "top_netsys_sel",
|
|
+ "top_netsys_500m_sel",
|
|
+ "top_netsys_pao_2x_sel",
|
|
+ "top_netsys_sync_250m_sel",
|
|
+ "top_netsys_ppefb_250m_sel",
|
|
+ "top_netsys_warp_sel",
|
|
};
|
|
|
|
void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg)
|
|
@@ -1207,10 +1299,19 @@ static void mtk_tx_set_dma_desc_v2(struc
|
|
data |= TX_DMA_LS0;
|
|
WRITE_ONCE(desc->txd3, data);
|
|
|
|
- if (mac->id == MTK_GMAC3_ID)
|
|
- data = PSE_GDM3_PORT;
|
|
- else
|
|
- data = (mac->id + 1) << TX_DMA_FPORT_SHIFT_V2; /* forward port */
|
|
+ /* set forward port */
|
|
+ switch (mac->id) {
|
|
+ case MTK_GMAC1_ID:
|
|
+ data = PSE_GDM1_PORT << TX_DMA_FPORT_SHIFT_V2;
|
|
+ break;
|
|
+ case MTK_GMAC2_ID:
|
|
+ data = PSE_GDM2_PORT << TX_DMA_FPORT_SHIFT_V2;
|
|
+ break;
|
|
+ case MTK_GMAC3_ID:
|
|
+ data = PSE_GDM3_PORT << TX_DMA_FPORT_SHIFT_V2;
|
|
+ break;
|
|
+ }
|
|
+
|
|
data |= TX_DMA_SWC_V2 | QID_BITS_V2(info->qid);
|
|
WRITE_ONCE(desc->txd4, data);
|
|
|
|
@@ -4964,6 +5065,25 @@ static const struct mtk_soc_data mt7986_
|
|
},
|
|
};
|
|
|
|
+static const struct mtk_soc_data mt7988_data = {
|
|
+ .reg_map = &mt7988_reg_map,
|
|
+ .ana_rgc3 = 0x128,
|
|
+ .caps = MT7988_CAPS,
|
|
+ .hw_features = MTK_HW_FEATURES,
|
|
+ .required_clks = MT7988_CLKS_BITMAP,
|
|
+ .required_pctl = false,
|
|
+ .num_devs = 3,
|
|
+ .txrx = {
|
|
+ .txd_size = sizeof(struct mtk_tx_dma_v2),
|
|
+ .rxd_size = sizeof(struct mtk_rx_dma_v2),
|
|
+ .rx_irq_done_mask = MTK_RX_DONE_INT_V2,
|
|
+ .rx_dma_l4_valid = RX_DMA_L4_VALID_V2,
|
|
+ .dma_max_len = MTK_TX_DMA_BUF_LEN_V2,
|
|
+ .dma_len_offset = 8,
|
|
+ },
|
|
+};
|
|
+
|
|
+
|
|
static const struct mtk_soc_data rt5350_data = {
|
|
.reg_map = &mt7628_reg_map,
|
|
.caps = MT7628_CAPS,
|
|
@@ -4982,14 +5102,15 @@ static const struct mtk_soc_data rt5350_
|
|
};
|
|
|
|
const struct of_device_id of_mtk_match[] = {
|
|
- { .compatible = "mediatek,mt2701-eth", .data = &mt2701_data},
|
|
- { .compatible = "mediatek,mt7621-eth", .data = &mt7621_data},
|
|
- { .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
|
|
- { .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
|
|
- { .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},
|
|
- { .compatible = "mediatek,mt7981-eth", .data = &mt7981_data},
|
|
- { .compatible = "mediatek,mt7986-eth", .data = &mt7986_data},
|
|
- { .compatible = "ralink,rt5350-eth", .data = &rt5350_data},
|
|
+ { .compatible = "mediatek,mt2701-eth", .data = &mt2701_data },
|
|
+ { .compatible = "mediatek,mt7621-eth", .data = &mt7621_data },
|
|
+ { .compatible = "mediatek,mt7622-eth", .data = &mt7622_data },
|
|
+ { .compatible = "mediatek,mt7623-eth", .data = &mt7623_data },
|
|
+ { .compatible = "mediatek,mt7629-eth", .data = &mt7629_data },
|
|
+ { .compatible = "mediatek,mt7981-eth", .data = &mt7981_data },
|
|
+ { .compatible = "mediatek,mt7986-eth", .data = &mt7986_data },
|
|
+ { .compatible = "mediatek,mt7988-eth", .data = &mt7988_data },
|
|
+ { .compatible = "ralink,rt5350-eth", .data = &rt5350_data },
|
|
{},
|
|
};
|
|
MODULE_DEVICE_TABLE(of, of_mtk_match);
|
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
|
|
@@ -116,7 +116,8 @@
|
|
#define MTK_CDMP_EG_CTRL 0x404
|
|
|
|
/* GDM Exgress Control Register */
|
|
-#define MTK_GDMA_FWD_CFG(x) (0x500 + (x * 0x1000))
|
|
+#define MTK_GDMA_FWD_CFG(x) ((x == MTK_GMAC3_ID) ? \
|
|
+ 0x540 : 0x500 + (x * 0x1000))
|
|
#define MTK_GDMA_SPECIAL_TAG BIT(24)
|
|
#define MTK_GDMA_ICS_EN BIT(22)
|
|
#define MTK_GDMA_TCS_EN BIT(21)
|
|
@@ -650,6 +651,11 @@ enum mtk_clks_map {
|
|
MTK_CLK_GP0,
|
|
MTK_CLK_GP1,
|
|
MTK_CLK_GP2,
|
|
+ MTK_CLK_GP3,
|
|
+ MTK_CLK_XGP1,
|
|
+ MTK_CLK_XGP2,
|
|
+ MTK_CLK_XGP3,
|
|
+ MTK_CLK_CRYPTO,
|
|
MTK_CLK_FE,
|
|
MTK_CLK_TRGPLL,
|
|
MTK_CLK_SGMII_TX_250M,
|
|
@@ -666,57 +672,108 @@ enum mtk_clks_map {
|
|
MTK_CLK_WOCPU1,
|
|
MTK_CLK_NETSYS0,
|
|
MTK_CLK_NETSYS1,
|
|
+ MTK_CLK_ETHWARP_WOCPU2,
|
|
+ MTK_CLK_ETHWARP_WOCPU1,
|
|
+ MTK_CLK_ETHWARP_WOCPU0,
|
|
+ MTK_CLK_TOP_USXGMII_SBUS_0_SEL,
|
|
+ MTK_CLK_TOP_USXGMII_SBUS_1_SEL,
|
|
+ MTK_CLK_TOP_SGM_0_SEL,
|
|
+ MTK_CLK_TOP_SGM_1_SEL,
|
|
+ MTK_CLK_TOP_XFI_PHY_0_XTAL_SEL,
|
|
+ MTK_CLK_TOP_XFI_PHY_1_XTAL_SEL,
|
|
+ MTK_CLK_TOP_ETH_GMII_SEL,
|
|
+ MTK_CLK_TOP_ETH_REFCK_50M_SEL,
|
|
+ MTK_CLK_TOP_ETH_SYS_200M_SEL,
|
|
+ MTK_CLK_TOP_ETH_SYS_SEL,
|
|
+ MTK_CLK_TOP_ETH_XGMII_SEL,
|
|
+ MTK_CLK_TOP_ETH_MII_SEL,
|
|
+ MTK_CLK_TOP_NETSYS_SEL,
|
|
+ MTK_CLK_TOP_NETSYS_500M_SEL,
|
|
+ MTK_CLK_TOP_NETSYS_PAO_2X_SEL,
|
|
+ MTK_CLK_TOP_NETSYS_SYNC_250M_SEL,
|
|
+ MTK_CLK_TOP_NETSYS_PPEFB_250M_SEL,
|
|
+ MTK_CLK_TOP_NETSYS_WARP_SEL,
|
|
MTK_CLK_MAX
|
|
};
|
|
|
|
-#define MT7623_CLKS_BITMAP (BIT(MTK_CLK_ETHIF) | BIT(MTK_CLK_ESW) | \
|
|
- BIT(MTK_CLK_GP1) | BIT(MTK_CLK_GP2) | \
|
|
- BIT(MTK_CLK_TRGPLL))
|
|
-#define MT7622_CLKS_BITMAP (BIT(MTK_CLK_ETHIF) | BIT(MTK_CLK_ESW) | \
|
|
- BIT(MTK_CLK_GP0) | BIT(MTK_CLK_GP1) | \
|
|
- BIT(MTK_CLK_GP2) | \
|
|
- BIT(MTK_CLK_SGMII_TX_250M) | \
|
|
- BIT(MTK_CLK_SGMII_RX_250M) | \
|
|
- BIT(MTK_CLK_SGMII_CDR_REF) | \
|
|
- BIT(MTK_CLK_SGMII_CDR_FB) | \
|
|
- BIT(MTK_CLK_SGMII_CK) | \
|
|
- BIT(MTK_CLK_ETH2PLL))
|
|
+#define MT7623_CLKS_BITMAP (BIT_ULL(MTK_CLK_ETHIF) | BIT_ULL(MTK_CLK_ESW) | \
|
|
+ BIT_ULL(MTK_CLK_GP1) | BIT_ULL(MTK_CLK_GP2) | \
|
|
+ BIT_ULL(MTK_CLK_TRGPLL))
|
|
+#define MT7622_CLKS_BITMAP (BIT_ULL(MTK_CLK_ETHIF) | BIT_ULL(MTK_CLK_ESW) | \
|
|
+ BIT_ULL(MTK_CLK_GP0) | BIT_ULL(MTK_CLK_GP1) | \
|
|
+ BIT_ULL(MTK_CLK_GP2) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_CDR_REF) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_CDR_FB) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_CK) | \
|
|
+ BIT_ULL(MTK_CLK_ETH2PLL))
|
|
#define MT7621_CLKS_BITMAP (0)
|
|
#define MT7628_CLKS_BITMAP (0)
|
|
-#define MT7629_CLKS_BITMAP (BIT(MTK_CLK_ETHIF) | BIT(MTK_CLK_ESW) | \
|
|
- BIT(MTK_CLK_GP0) | BIT(MTK_CLK_GP1) | \
|
|
- BIT(MTK_CLK_GP2) | BIT(MTK_CLK_FE) | \
|
|
- BIT(MTK_CLK_SGMII_TX_250M) | \
|
|
- BIT(MTK_CLK_SGMII_RX_250M) | \
|
|
- BIT(MTK_CLK_SGMII_CDR_REF) | \
|
|
- BIT(MTK_CLK_SGMII_CDR_FB) | \
|
|
- BIT(MTK_CLK_SGMII2_TX_250M) | \
|
|
- BIT(MTK_CLK_SGMII2_RX_250M) | \
|
|
- BIT(MTK_CLK_SGMII2_CDR_REF) | \
|
|
- BIT(MTK_CLK_SGMII2_CDR_FB) | \
|
|
- BIT(MTK_CLK_SGMII_CK) | \
|
|
- BIT(MTK_CLK_ETH2PLL) | BIT(MTK_CLK_SGMIITOP))
|
|
-#define MT7981_CLKS_BITMAP (BIT(MTK_CLK_FE) | BIT(MTK_CLK_GP2) | BIT(MTK_CLK_GP1) | \
|
|
- BIT(MTK_CLK_WOCPU0) | \
|
|
- BIT(MTK_CLK_SGMII_TX_250M) | \
|
|
- BIT(MTK_CLK_SGMII_RX_250M) | \
|
|
- BIT(MTK_CLK_SGMII_CDR_REF) | \
|
|
- BIT(MTK_CLK_SGMII_CDR_FB) | \
|
|
- BIT(MTK_CLK_SGMII2_TX_250M) | \
|
|
- BIT(MTK_CLK_SGMII2_RX_250M) | \
|
|
- BIT(MTK_CLK_SGMII2_CDR_REF) | \
|
|
- BIT(MTK_CLK_SGMII2_CDR_FB) | \
|
|
- BIT(MTK_CLK_SGMII_CK))
|
|
-#define MT7986_CLKS_BITMAP (BIT(MTK_CLK_FE) | BIT(MTK_CLK_GP2) | BIT(MTK_CLK_GP1) | \
|
|
- BIT(MTK_CLK_WOCPU1) | BIT(MTK_CLK_WOCPU0) | \
|
|
- BIT(MTK_CLK_SGMII_TX_250M) | \
|
|
- BIT(MTK_CLK_SGMII_RX_250M) | \
|
|
- BIT(MTK_CLK_SGMII_CDR_REF) | \
|
|
- BIT(MTK_CLK_SGMII_CDR_FB) | \
|
|
- BIT(MTK_CLK_SGMII2_TX_250M) | \
|
|
- BIT(MTK_CLK_SGMII2_RX_250M) | \
|
|
- BIT(MTK_CLK_SGMII2_CDR_REF) | \
|
|
- BIT(MTK_CLK_SGMII2_CDR_FB))
|
|
+#define MT7629_CLKS_BITMAP (BIT_ULL(MTK_CLK_ETHIF) | BIT_ULL(MTK_CLK_ESW) | \
|
|
+ BIT_ULL(MTK_CLK_GP0) | BIT_ULL(MTK_CLK_GP1) | \
|
|
+ BIT_ULL(MTK_CLK_GP2) | BIT_ULL(MTK_CLK_FE) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_CDR_REF) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_CDR_FB) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_TX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_CDR_REF) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_CDR_FB) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_CK) | \
|
|
+ BIT_ULL(MTK_CLK_ETH2PLL) | BIT_ULL(MTK_CLK_SGMIITOP))
|
|
+#define MT7981_CLKS_BITMAP (BIT_ULL(MTK_CLK_FE) | BIT_ULL(MTK_CLK_GP2) | BIT_ULL(MTK_CLK_GP1) | \
|
|
+ BIT_ULL(MTK_CLK_WOCPU0) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_CDR_REF) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_CDR_FB) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_TX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_CDR_REF) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_CDR_FB) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_CK))
|
|
+#define MT7986_CLKS_BITMAP (BIT_ULL(MTK_CLK_FE) | BIT_ULL(MTK_CLK_GP2) | BIT_ULL(MTK_CLK_GP1) | \
|
|
+ BIT_ULL(MTK_CLK_WOCPU1) | BIT_ULL(MTK_CLK_WOCPU0) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_CDR_REF) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_CDR_FB) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_TX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_CDR_REF) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_CDR_FB))
|
|
+#define MT7988_CLKS_BITMAP (BIT_ULL(MTK_CLK_FE) | BIT_ULL(MTK_CLK_ESW) | \
|
|
+ BIT_ULL(MTK_CLK_GP1) | BIT_ULL(MTK_CLK_GP2) | \
|
|
+ BIT_ULL(MTK_CLK_GP3) | BIT_ULL(MTK_CLK_XGP1) | \
|
|
+ BIT_ULL(MTK_CLK_XGP2) | BIT_ULL(MTK_CLK_XGP3) | \
|
|
+ BIT_ULL(MTK_CLK_CRYPTO) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_TX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII_RX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_TX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_SGMII2_RX_250M) | \
|
|
+ BIT_ULL(MTK_CLK_ETHWARP_WOCPU2) | \
|
|
+ BIT_ULL(MTK_CLK_ETHWARP_WOCPU1) | \
|
|
+ BIT_ULL(MTK_CLK_ETHWARP_WOCPU0) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_USXGMII_SBUS_0_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_USXGMII_SBUS_1_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_SGM_0_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_SGM_1_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_XFI_PHY_0_XTAL_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_XFI_PHY_1_XTAL_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_ETH_GMII_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_ETH_REFCK_50M_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_ETH_SYS_200M_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_ETH_SYS_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_ETH_XGMII_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_ETH_MII_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_NETSYS_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_NETSYS_500M_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_NETSYS_PAO_2X_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_NETSYS_SYNC_250M_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_NETSYS_PPEFB_250M_SEL) | \
|
|
+ BIT_ULL(MTK_CLK_TOP_NETSYS_WARP_SEL))
|
|
|
|
enum mtk_dev_state {
|
|
MTK_HW_INIT,
|
|
@@ -844,6 +901,7 @@ enum mkt_eth_capabilities {
|
|
MTK_RGMII_BIT = 0,
|
|
MTK_TRGMII_BIT,
|
|
MTK_SGMII_BIT,
|
|
+ MTK_USXGMII_BIT,
|
|
MTK_ESW_BIT,
|
|
MTK_GEPHY_BIT,
|
|
MTK_MUX_BIT,
|
|
@@ -866,6 +924,8 @@ enum mkt_eth_capabilities {
|
|
MTK_ETH_MUX_U3_GMAC2_TO_QPHY_BIT,
|
|
MTK_ETH_MUX_GMAC1_GMAC2_TO_SGMII_RGMII_BIT,
|
|
MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII_BIT,
|
|
+ MTK_ETH_MUX_GMAC123_TO_GEPHY_SGMII_BIT,
|
|
+ MTK_ETH_MUX_GMAC123_TO_USXGMII_BIT,
|
|
|
|
/* PATH BITS */
|
|
MTK_ETH_PATH_GMAC1_RGMII_BIT,
|
|
@@ -874,13 +934,18 @@ enum mkt_eth_capabilities {
|
|
MTK_ETH_PATH_GMAC2_RGMII_BIT,
|
|
MTK_ETH_PATH_GMAC2_SGMII_BIT,
|
|
MTK_ETH_PATH_GMAC2_GEPHY_BIT,
|
|
+ MTK_ETH_PATH_GMAC3_SGMII_BIT,
|
|
MTK_ETH_PATH_GDM1_ESW_BIT,
|
|
+ MTK_ETH_PATH_GMAC1_USXGMII_BIT,
|
|
+ MTK_ETH_PATH_GMAC2_USXGMII_BIT,
|
|
+ MTK_ETH_PATH_GMAC3_USXGMII_BIT,
|
|
};
|
|
|
|
/* Supported hardware group on SoCs */
|
|
#define MTK_RGMII BIT_ULL(MTK_RGMII_BIT)
|
|
#define MTK_TRGMII BIT_ULL(MTK_TRGMII_BIT)
|
|
#define MTK_SGMII BIT_ULL(MTK_SGMII_BIT)
|
|
+#define MTK_USXGMII BIT_ULL(MTK_USXGMII_BIT)
|
|
#define MTK_ESW BIT_ULL(MTK_ESW_BIT)
|
|
#define MTK_GEPHY BIT_ULL(MTK_GEPHY_BIT)
|
|
#define MTK_MUX BIT_ULL(MTK_MUX_BIT)
|
|
@@ -907,6 +972,10 @@ enum mkt_eth_capabilities {
|
|
BIT_ULL(MTK_ETH_MUX_GMAC1_GMAC2_TO_SGMII_RGMII_BIT)
|
|
#define MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII \
|
|
BIT_ULL(MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII_BIT)
|
|
+#define MTK_ETH_MUX_GMAC123_TO_GEPHY_SGMII \
|
|
+ BIT_ULL(MTK_ETH_MUX_GMAC123_TO_GEPHY_SGMII_BIT)
|
|
+#define MTK_ETH_MUX_GMAC123_TO_USXGMII \
|
|
+ BIT_ULL(MTK_ETH_MUX_GMAC123_TO_USXGMII_BIT)
|
|
|
|
/* Supported path present on SoCs */
|
|
#define MTK_ETH_PATH_GMAC1_RGMII BIT_ULL(MTK_ETH_PATH_GMAC1_RGMII_BIT)
|
|
@@ -915,7 +984,11 @@ enum mkt_eth_capabilities {
|
|
#define MTK_ETH_PATH_GMAC2_RGMII BIT_ULL(MTK_ETH_PATH_GMAC2_RGMII_BIT)
|
|
#define MTK_ETH_PATH_GMAC2_SGMII BIT_ULL(MTK_ETH_PATH_GMAC2_SGMII_BIT)
|
|
#define MTK_ETH_PATH_GMAC2_GEPHY BIT_ULL(MTK_ETH_PATH_GMAC2_GEPHY_BIT)
|
|
+#define MTK_ETH_PATH_GMAC3_SGMII BIT_ULL(MTK_ETH_PATH_GMAC3_SGMII_BIT)
|
|
#define MTK_ETH_PATH_GDM1_ESW BIT_ULL(MTK_ETH_PATH_GDM1_ESW_BIT)
|
|
+#define MTK_ETH_PATH_GMAC1_USXGMII BIT_ULL(MTK_ETH_PATH_GMAC1_USXGMII_BIT)
|
|
+#define MTK_ETH_PATH_GMAC2_USXGMII BIT_ULL(MTK_ETH_PATH_GMAC2_USXGMII_BIT)
|
|
+#define MTK_ETH_PATH_GMAC3_USXGMII BIT_ULL(MTK_ETH_PATH_GMAC3_USXGMII_BIT)
|
|
|
|
#define MTK_GMAC1_RGMII (MTK_ETH_PATH_GMAC1_RGMII | MTK_RGMII)
|
|
#define MTK_GMAC1_TRGMII (MTK_ETH_PATH_GMAC1_TRGMII | MTK_TRGMII)
|
|
@@ -923,7 +996,11 @@ enum mkt_eth_capabilities {
|
|
#define MTK_GMAC2_RGMII (MTK_ETH_PATH_GMAC2_RGMII | MTK_RGMII)
|
|
#define MTK_GMAC2_SGMII (MTK_ETH_PATH_GMAC2_SGMII | MTK_SGMII)
|
|
#define MTK_GMAC2_GEPHY (MTK_ETH_PATH_GMAC2_GEPHY | MTK_GEPHY)
|
|
+#define MTK_GMAC3_SGMII (MTK_ETH_PATH_GMAC3_SGMII | MTK_SGMII)
|
|
#define MTK_GDM1_ESW (MTK_ETH_PATH_GDM1_ESW | MTK_ESW)
|
|
+#define MTK_GMAC1_USXGMII (MTK_ETH_PATH_GMAC1_USXGMII | MTK_USXGMII)
|
|
+#define MTK_GMAC2_USXGMII (MTK_ETH_PATH_GMAC2_USXGMII | MTK_USXGMII)
|
|
+#define MTK_GMAC3_USXGMII (MTK_ETH_PATH_GMAC3_USXGMII | MTK_USXGMII)
|
|
|
|
/* MUXes present on SoCs */
|
|
/* 0: GDM1 -> GMAC1, 1: GDM1 -> ESW */
|
|
@@ -946,6 +1023,12 @@ enum mkt_eth_capabilities {
|
|
#define MTK_MUX_GMAC12_TO_GEPHY_SGMII \
|
|
(MTK_ETH_MUX_GMAC12_TO_GEPHY_SGMII | MTK_MUX)
|
|
|
|
+#define MTK_MUX_GMAC123_TO_GEPHY_SGMII \
|
|
+ (MTK_ETH_MUX_GMAC123_TO_GEPHY_SGMII | MTK_MUX)
|
|
+
|
|
+#define MTK_MUX_GMAC123_TO_USXGMII \
|
|
+ (MTK_ETH_MUX_GMAC123_TO_USXGMII | MTK_MUX | MTK_INFRA)
|
|
+
|
|
#ifdef CONFIG_SOC_MT7621
|
|
#define MTK_CAP_MASK MTK_NETSYS_V2
|
|
#else
|
|
@@ -984,9 +1067,17 @@ enum mkt_eth_capabilities {
|
|
MTK_MUX_U3_GMAC2_TO_QPHY | MTK_U3_COPHY_V2 | \
|
|
MTK_NETSYS_V2 | MTK_RSTCTRL_PPE1)
|
|
|
|
-#define MT7986_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
|
|
- MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA | \
|
|
- MTK_NETSYS_V2 | MTK_RSTCTRL_PPE1)
|
|
+#define MT7986_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
|
|
+ MTK_MUX_GMAC12_TO_GEPHY_SGMII | \
|
|
+ MTK_QDMA | MTK_NETSYS_V2 | \
|
|
+ MTK_RSTCTRL_PPE1)
|
|
+
|
|
+#define MT7988_CAPS (MTK_GMAC1_SGMII | MTK_GMAC2_SGMII | \
|
|
+ MTK_GMAC3_SGMII | MTK_QDMA | \
|
|
+ MTK_MUX_GMAC123_TO_GEPHY_SGMII | \
|
|
+ MTK_NETSYS_V3 | MTK_RSTCTRL_PPE1 | \
|
|
+ MTK_GMAC1_USXGMII | MTK_GMAC2_USXGMII | \
|
|
+ MTK_GMAC3_USXGMII | MTK_MUX_GMAC123_TO_USXGMII)
|
|
|
|
struct mtk_tx_dma_desc_info {
|
|
dma_addr_t addr;
|
|
@@ -1072,7 +1163,7 @@ struct mtk_soc_data {
|
|
const struct mtk_reg_map *reg_map;
|
|
u32 ana_rgc3;
|
|
u64 caps;
|
|
- u32 required_clks;
|
|
+ u64 required_clks;
|
|
bool required_pctl;
|
|
u8 offload_version;
|
|
u8 hash_offset;
|