]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: stmmac: replace has_xxxx with core_type
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Tue, 21 Oct 2025 07:26:49 +0000 (08:26 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 23 Oct 2025 01:28:57 +0000 (18:28 -0700)
Replace the has_gmac, has_gmac4 and has_xgmac ints, of which only one
can be set when matching a core to its driver backend, with an
enumerated type carrying the DWMAC core type.

Tested-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Acked-by: Chen-Yu Tsai <wens@kernel.org>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Tested-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Link: https://patch.msgid.link/E1vB6ld-0000000BIPy-2Qi4@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
21 files changed:
drivers/net/ethernet/stmicro/stmmac/common.h
drivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c
drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c
drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c
drivers/net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c
drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
drivers/net/ethernet/stmicro/stmmac/dwmac-s32.c
drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c
drivers/net/ethernet/stmicro/stmmac/dwmac-tegra.c
drivers/net/ethernet/stmicro/stmmac/hwif.c
drivers/net/ethernet/stmicro/stmmac/stmmac_est.c
drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
include/linux/stmmac.h

index fee7021246b1a4e466bb38604c30af90a54a758f..31254ba525d56bd70fffdeb8082e1c322d8fd9bb 100644 (file)
 #define DWXGMAC_ID             0x76
 #define DWXLGMAC_ID            0x27
 
+static inline bool dwmac_is_xmac(enum dwmac_core_type core_type)
+{
+       return core_type == DWMAC_CORE_GMAC4 || core_type == DWMAC_CORE_XGMAC;
+}
+
 #define STMMAC_CHAN0   0       /* Always supported and default for all chips */
 
 /* TX and RX Descriptor Length, these need to be power of two.
index f1c2e35badf72f1c6cbe6076848349ea26b4f0f9..c7cd6497d42dff98fe8f48b0ca3dc1cd4842098f 100644 (file)
@@ -109,7 +109,7 @@ static int dwc_eth_dwmac_config_dt(struct platform_device *pdev,
        }
 
        /* dwc-qos needs GMAC4, AAL, TSO and PMT */
-       plat_dat->has_gmac4 = 1;
+       plat_dat->core_type = DWMAC_CORE_GMAC4;
        plat_dat->dma_cfg->aal = 1;
        plat_dat->flags |= STMMAC_FLAG_TSO_EN;
        plat_dat->pmt = 1;
index e74d00984b889e900b86039b1f9dfd42b0b6464f..b2194e414ec1f6cc69b1129a1040a01eccb72392 100644 (file)
@@ -565,7 +565,7 @@ static void common_default_data(struct plat_stmmacenet_data *plat)
 {
        /* clk_csr_i = 20-35MHz & MDC = clk_csr_i/16 */
        plat->clk_csr = STMMAC_CSR_20_35M;
-       plat->has_gmac = 1;
+       plat->core_type = DWMAC_CORE_GMAC;
        plat->force_sf_dma_mode = 1;
 
        plat->mdio_bus_data->needs_reset = true;
@@ -612,8 +612,7 @@ static int intel_mgbe_common_data(struct pci_dev *pdev,
        plat->pdev = pdev;
        plat->phy_addr = -1;
        plat->clk_csr = STMMAC_CSR_250_300M;
-       plat->has_gmac = 0;
-       plat->has_gmac4 = 1;
+       plat->core_type = DWMAC_CORE_GMAC4;
        plat->force_sf_dma_mode = 0;
        plat->flags |= (STMMAC_FLAG_TSO_EN | STMMAC_FLAG_SPH_DISABLE);
 
index ca4035cbb55b6df58bb612236fee1af40ea9ac08..c05f85534f0cac890a36cde78bf22be04c592247 100644 (file)
@@ -473,7 +473,7 @@ static int ipq806x_gmac_probe(struct platform_device *pdev)
                        return err;
        }
 
-       plat_dat->has_gmac = true;
+       plat_dat->core_type = DWMAC_CORE_GMAC;
        plat_dat->bsp_priv = gmac;
        plat_dat->set_clk_tx_rate = ipq806x_gmac_set_clk_tx_rate;
        plat_dat->multicast_filter_bins = 0;
index 592aa9d636e505106a7de8ac0ef7cf2c378f7052..2a3ac0136cdbcfa3c854ae86d5d27ffc58d10cf8 100644 (file)
@@ -92,7 +92,7 @@ static void loongson_default_data(struct pci_dev *pdev,
 
        /* clk_csr_i = 20-35MHz & MDC = clk_csr_i/16 */
        plat->clk_csr = STMMAC_CSR_20_35M;
-       plat->has_gmac = 1;
+       plat->core_type = DWMAC_CORE_GMAC;
        plat->force_sf_dma_mode = 1;
 
        /* Set default value for multicast hash bins */
index 2562a6d036a2a3df6ad2e86287e0ad823c798e0a..6fffc9dfbae55347e7f5a8ad73c77ec804089d01 100644 (file)
@@ -41,7 +41,7 @@ static int lpc18xx_dwmac_probe(struct platform_device *pdev)
        if (IS_ERR(plat_dat))
                return PTR_ERR(plat_dat);
 
-       plat_dat->has_gmac = true;
+       plat_dat->core_type = DWMAC_CORE_GMAC;
 
        reg = syscon_regmap_lookup_by_compatible("nxp,lpc1850-creg");
        if (IS_ERR(reg)) {
index 32244217d95266bf0573072f66f8970f651b25ef..d1e48b524d7a964f229e2bf28e7a316325726193 100644 (file)
@@ -846,7 +846,7 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
        plat_dat->fix_mac_speed = ethqos_fix_mac_speed;
        plat_dat->dump_debug_regs = rgmii_dump;
        plat_dat->ptp_clk_freq_config = ethqos_ptp_clk_freq_config;
-       plat_dat->has_gmac4 = 1;
+       plat_dat->core_type = DWMAC_CORE_GMAC4;
        if (ethqos->has_emac_ge_3)
                plat_dat->dwmac4_addrs = &data->dwmac4_addrs;
        plat_dat->pmt = 1;
index 51ea0caf16c11d8150e49319f4da4916c125815f..9b92f4d335cca15b4874d23fcf324268f51aa894 100644 (file)
@@ -1750,8 +1750,8 @@ static int rk_gmac_probe(struct platform_device *pdev)
        /* If the stmmac is not already selected as gmac4,
         * then make sure we fallback to gmac.
         */
-       if (!plat_dat->has_gmac4) {
-               plat_dat->has_gmac = true;
+       if (plat_dat->core_type != DWMAC_CORE_GMAC4) {
+               plat_dat->core_type = DWMAC_CORE_GMAC;
                plat_dat->rx_fifo_size = 4096;
                plat_dat->tx_fifo_size = 2048;
        }
index 221539d760bc83c31cb0189de1b93a376eb7e102..ee095ac132037614583ded9200d14d7cb21b77b2 100644 (file)
@@ -146,7 +146,7 @@ static int s32_dwmac_probe(struct platform_device *pdev)
        gmac->ioaddr = res.addr;
 
        /* S32CC core feature set */
-       plat->has_gmac4 = true;
+       plat->core_type = DWMAC_CORE_GMAC4;
        plat->pmt = 1;
        plat->flags |= STMMAC_FLAG_SPH_DISABLE;
        plat->rx_fifo_size = 20480;
index 354f01184e6cc24ad0152030c9025e3e4b1aae0b..2ff5db6d41ca08a1652d57f3eb73923b9a9558bf 100644 (file)
@@ -497,7 +497,7 @@ static int socfpga_dwmac_probe(struct platform_device *pdev)
        plat_dat->pcs_init = socfpga_dwmac_pcs_init;
        plat_dat->pcs_exit = socfpga_dwmac_pcs_exit;
        plat_dat->select_pcs = socfpga_dwmac_select_pcs;
-       plat_dat->has_gmac = true;
+       plat_dat->core_type = DWMAC_CORE_GMAC;
 
        plat_dat->riwt_off = 1;
 
index 1eadcf5d1ad6322cc86e5b1da8aeeb12f9c88d45..7f560d78209d1677a414b7873173f24ecf4bd1cf 100644 (file)
@@ -136,7 +136,7 @@ static int sun7i_gmac_probe(struct platform_device *pdev)
        /* platform data specifying hardware features and callbacks.
         * hardware features were copied from Allwinner drivers. */
        plat_dat->tx_coe = 1;
-       plat_dat->has_gmac = true;
+       plat_dat->core_type = DWMAC_CORE_GMAC;
        plat_dat->bsp_priv = gmac;
        plat_dat->init = sun7i_gmac_init;
        plat_dat->exit = sun7i_gmac_exit;
index dc903b846b1bf44473f55abdd66d69f11ca78fed..d765acbe375481312c5595856ec390fc13236b44 100644 (file)
@@ -308,7 +308,7 @@ static int tegra_mgbe_probe(struct platform_device *pdev)
                goto disable_clks;
        }
 
-       plat->has_xgmac = 1;
+       plat->core_type = DWMAC_CORE_XGMAC;
        plat->flags |= STMMAC_FLAG_TSO_EN;
        plat->pmt = 1;
        plat->bsp_priv = mgbe;
index 3f7c765dcb7971a49897f4bc79472b0f7121ca77..00083ce525492e1bd113385d1c0cc1f3c53fc7ec 100644 (file)
@@ -106,9 +106,7 @@ int stmmac_reset(struct stmmac_priv *priv, void __iomem *ioaddr)
 }
 
 static const struct stmmac_hwif_entry {
-       bool gmac;
-       bool gmac4;
-       bool xgmac;
+       enum dwmac_core_type core_type;
        u32 min_id;
        u32 dev_id;
        const struct stmmac_regs_off regs;
@@ -127,9 +125,7 @@ static const struct stmmac_hwif_entry {
 } stmmac_hw[] = {
        /* NOTE: New HW versions shall go to the end of this table */
        {
-               .gmac = false,
-               .gmac4 = false,
-               .xgmac = false,
+               .core_type = DWMAC_CORE_MAC100,
                .min_id = 0,
                .regs = {
                        .ptp_off = PTP_GMAC3_X_OFFSET,
@@ -146,9 +142,7 @@ static const struct stmmac_hwif_entry {
                .setup = dwmac100_setup,
                .quirks = stmmac_dwmac1_quirks,
        }, {
-               .gmac = true,
-               .gmac4 = false,
-               .xgmac = false,
+               .core_type = DWMAC_CORE_GMAC,
                .min_id = 0,
                .regs = {
                        .ptp_off = PTP_GMAC3_X_OFFSET,
@@ -165,9 +159,7 @@ static const struct stmmac_hwif_entry {
                .setup = dwmac1000_setup,
                .quirks = stmmac_dwmac1_quirks,
        }, {
-               .gmac = false,
-               .gmac4 = true,
-               .xgmac = false,
+               .core_type = DWMAC_CORE_GMAC4,
                .min_id = 0,
                .regs = {
                        .ptp_off = PTP_GMAC4_OFFSET,
@@ -187,9 +179,7 @@ static const struct stmmac_hwif_entry {
                .setup = dwmac4_setup,
                .quirks = stmmac_dwmac4_quirks,
        }, {
-               .gmac = false,
-               .gmac4 = true,
-               .xgmac = false,
+               .core_type = DWMAC_CORE_GMAC4,
                .min_id = DWMAC_CORE_4_00,
                .regs = {
                        .ptp_off = PTP_GMAC4_OFFSET,
@@ -210,9 +200,7 @@ static const struct stmmac_hwif_entry {
                .setup = dwmac4_setup,
                .quirks = NULL,
        }, {
-               .gmac = false,
-               .gmac4 = true,
-               .xgmac = false,
+               .core_type = DWMAC_CORE_GMAC4,
                .min_id = DWMAC_CORE_4_10,
                .regs = {
                        .ptp_off = PTP_GMAC4_OFFSET,
@@ -233,9 +221,7 @@ static const struct stmmac_hwif_entry {
                .setup = dwmac4_setup,
                .quirks = NULL,
        }, {
-               .gmac = false,
-               .gmac4 = true,
-               .xgmac = false,
+               .core_type = DWMAC_CORE_GMAC4,
                .min_id = DWMAC_CORE_5_10,
                .regs = {
                        .ptp_off = PTP_GMAC4_OFFSET,
@@ -256,9 +242,7 @@ static const struct stmmac_hwif_entry {
                .setup = dwmac4_setup,
                .quirks = NULL,
        }, {
-               .gmac = false,
-               .gmac4 = false,
-               .xgmac = true,
+               .core_type = DWMAC_CORE_XGMAC,
                .min_id = DWXGMAC_CORE_2_10,
                .dev_id = DWXGMAC_ID,
                .regs = {
@@ -280,9 +264,7 @@ static const struct stmmac_hwif_entry {
                .setup = dwxgmac2_setup,
                .quirks = NULL,
        }, {
-               .gmac = false,
-               .gmac4 = false,
-               .xgmac = true,
+               .core_type = DWMAC_CORE_XGMAC,
                .min_id = DWXLGMAC_CORE_2_00,
                .dev_id = DWXLGMAC_ID,
                .regs = {
@@ -308,20 +290,18 @@ static const struct stmmac_hwif_entry {
 
 int stmmac_hwif_init(struct stmmac_priv *priv)
 {
-       bool needs_xgmac = priv->plat->has_xgmac;
-       bool needs_gmac4 = priv->plat->has_gmac4;
-       bool needs_gmac = priv->plat->has_gmac;
+       enum dwmac_core_type core_type = priv->plat->core_type;
        const struct stmmac_hwif_entry *entry;
        struct mac_device_info *mac;
        bool needs_setup = true;
        u32 id, dev_id = 0;
        int i, ret;
 
-       if (needs_gmac) {
+       if (core_type == DWMAC_CORE_GMAC) {
                id = stmmac_get_id(priv, GMAC_VERSION);
-       } else if (needs_gmac4 || needs_xgmac) {
+       } else if (dwmac_is_xmac(core_type)) {
                id = stmmac_get_id(priv, GMAC4_VERSION);
-               if (needs_xgmac)
+               if (core_type == DWMAC_CORE_XGMAC)
                        dev_id = stmmac_get_dev_id(priv, GMAC4_VERSION);
        } else {
                id = 0;
@@ -331,14 +311,16 @@ int stmmac_hwif_init(struct stmmac_priv *priv)
        priv->synopsys_id = id;
 
        /* Lets assume some safe values first */
-       priv->ptpaddr = priv->ioaddr +
-               (needs_gmac4 ? PTP_GMAC4_OFFSET : PTP_GMAC3_X_OFFSET);
-       priv->mmcaddr = priv->ioaddr +
-               (needs_gmac4 ? MMC_GMAC4_OFFSET : MMC_GMAC3_X_OFFSET);
-       if (needs_gmac4)
+       if (core_type == DWMAC_CORE_GMAC4) {
+               priv->ptpaddr = priv->ioaddr + PTP_GMAC4_OFFSET;
+               priv->mmcaddr = priv->ioaddr + MMC_GMAC4_OFFSET;
                priv->estaddr = priv->ioaddr + EST_GMAC4_OFFSET;
-       else if (needs_xgmac)
-               priv->estaddr = priv->ioaddr + EST_XGMAC_OFFSET;
+       } else {
+               priv->ptpaddr = priv->ioaddr + PTP_GMAC3_X_OFFSET;
+               priv->mmcaddr = priv->ioaddr + MMC_GMAC3_X_OFFSET;
+               if (core_type == DWMAC_CORE_XGMAC)
+                       priv->estaddr = priv->ioaddr + EST_XGMAC_OFFSET;
+       }
 
        /* Check for HW specific setup first */
        if (priv->plat->setup) {
@@ -355,16 +337,12 @@ int stmmac_hwif_init(struct stmmac_priv *priv)
        for (i = ARRAY_SIZE(stmmac_hw) - 1; i >= 0; i--) {
                entry = &stmmac_hw[i];
 
-               if (needs_gmac ^ entry->gmac)
-                       continue;
-               if (needs_gmac4 ^ entry->gmac4)
-                       continue;
-               if (needs_xgmac ^ entry->xgmac)
+               if (core_type != entry->core_type)
                        continue;
                /* Use synopsys_id var because some setups can override this */
                if (priv->synopsys_id < entry->min_id)
                        continue;
-               if (needs_xgmac && (dev_id ^ entry->dev_id))
+               if (core_type == DWMAC_CORE_XGMAC && (dev_id ^ entry->dev_id))
                        continue;
 
                /* Only use generic HW helpers if needed */
@@ -400,6 +378,7 @@ int stmmac_hwif_init(struct stmmac_priv *priv)
        }
 
        dev_err(priv->device, "Failed to find HW IF (id=0x%x, gmac=%d/%d)\n",
-                       id, needs_gmac, needs_gmac4);
+               id, core_type == DWMAC_CORE_GMAC,
+               core_type == DWMAC_CORE_GMAC4);
        return -EINVAL;
 }
index 4b513d27a9889046e8b5e404adfd917f469c3f05..afc516059b8975e2cf9fcef5be9f8151d6883029 100644 (file)
@@ -53,7 +53,7 @@ static int est_configure(struct stmmac_priv *priv, struct stmmac_est *cfg,
        }
 
        ctrl = readl(est_addr + EST_CONTROL);
-       if (priv->plat->has_xgmac) {
+       if (priv->plat->core_type == DWMAC_CORE_XGMAC) {
                ctrl &= ~EST_XGMAC_PTOV;
                ctrl |= ((NSEC_PER_SEC / ptp_rate) * EST_XGMAC_PTOV_MUL) <<
                         EST_XGMAC_PTOV_SHIFT;
@@ -148,7 +148,7 @@ static void est_irq_status(struct stmmac_priv *priv, struct net_device *dev,
        }
 
        if (status & EST_BTRE) {
-               if (priv->plat->has_xgmac) {
+               if (priv->plat->core_type == DWMAC_CORE_XGMAC) {
                        btrl = FIELD_GET(EST_XGMAC_BTRL, status);
                        btrl_max = FIELD_MAX(EST_XGMAC_BTRL);
                } else {
index c60cd948311ea919ee961ccd97c0873840a3d610..df016c4eb71046d599a100e1882da870987b2088 100644 (file)
@@ -303,9 +303,10 @@ static void stmmac_ethtool_getdrvinfo(struct net_device *dev,
 {
        struct stmmac_priv *priv = netdev_priv(dev);
 
-       if (priv->plat->has_gmac || priv->plat->has_gmac4)
+       if (priv->plat->core_type == DWMAC_CORE_GMAC ||
+           priv->plat->core_type == DWMAC_CORE_GMAC4)
                strscpy(info->driver, GMAC_ETHTOOL_NAME, sizeof(info->driver));
-       else if (priv->plat->has_xgmac)
+       else if (priv->plat->core_type == DWMAC_CORE_XGMAC)
                strscpy(info->driver, XGMAC_ETHTOOL_NAME, sizeof(info->driver));
        else
                strscpy(info->driver, MAC100_ETHTOOL_NAME,
@@ -351,9 +352,9 @@ static int stmmac_ethtool_get_regs_len(struct net_device *dev)
 {
        struct stmmac_priv *priv = netdev_priv(dev);
 
-       if (priv->plat->has_xgmac)
+       if (priv->plat->core_type == DWMAC_CORE_XGMAC)
                return XGMAC_REGSIZE * 4;
-       else if (priv->plat->has_gmac4)
+       else if (priv->plat->core_type == DWMAC_CORE_GMAC4)
                return GMAC4_REG_SPACE_SIZE;
        return REG_SPACE_SIZE;
 }
@@ -368,12 +369,12 @@ static void stmmac_ethtool_gregs(struct net_device *dev,
        stmmac_dump_dma_regs(priv, priv->ioaddr, reg_space);
 
        /* Copy DMA registers to where ethtool expects them */
-       if (priv->plat->has_gmac4) {
+       if (priv->plat->core_type == DWMAC_CORE_GMAC4) {
                /* GMAC4 dumps its DMA registers at its DMA_CHAN_BASE_ADDR */
                memcpy(&reg_space[ETHTOOL_DMA_OFFSET],
                       &reg_space[GMAC4_DMA_CHAN_BASE_ADDR / 4],
                       NUM_DWMAC4_DMA_REGS * 4);
-       } else if (!priv->plat->has_xgmac) {
+       } else if (priv->plat->core_type != DWMAC_CORE_XGMAC) {
                memcpy(&reg_space[ETHTOOL_DMA_OFFSET],
                       &reg_space[DMA_BUS_MODE / 4],
                       NUM_DWMAC1000_DMA_REGS * 4);
index 5e6aaead589465ea43de707535422c2613812705..9fa3c221a0c3c76fecd9f804e2c8b4f8c295702a 100644 (file)
@@ -446,7 +446,7 @@ static void stmmac_get_rx_hwtstamp(struct stmmac_priv *priv, struct dma_desc *p,
        if (!priv->hwts_rx_en)
                return;
        /* For GMAC4, the valid timestamp is from CTX next desc. */
-       if (priv->plat->has_gmac4 || priv->plat->has_xgmac)
+       if (dwmac_is_xmac(priv->plat->core_type))
                desc = np;
 
        /* Check if timestamp is available */
@@ -697,7 +697,7 @@ static int stmmac_hwtstamp_get(struct net_device *dev,
 static int stmmac_init_tstamp_counter(struct stmmac_priv *priv,
                                      u32 systime_flags)
 {
-       bool xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac;
+       bool xmac = dwmac_is_xmac(priv->plat->core_type);
        struct timespec64 now;
        u32 sec_inc = 0;
        u64 temp = 0;
@@ -746,7 +746,7 @@ static int stmmac_init_tstamp_counter(struct stmmac_priv *priv,
  */
 static int stmmac_init_timestamping(struct stmmac_priv *priv)
 {
-       bool xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac;
+       bool xmac = dwmac_is_xmac(priv->plat->core_type);
        int ret;
 
        if (priv->plat->ptp_clk_freq_config)
@@ -2413,7 +2413,7 @@ static void stmmac_dma_operation_mode(struct stmmac_priv *priv)
                txfifosz = priv->dma_cap.tx_fifo_size;
 
        /* Split up the shared Tx/Rx FIFO memory on DW QoS Eth and DW XGMAC */
-       if (priv->plat->has_gmac4 || priv->plat->has_xgmac) {
+       if (dwmac_is_xmac(priv->plat->core_type)) {
                rxfifosz /= rx_channels_count;
                txfifosz /= tx_channels_count;
        }
@@ -4520,7 +4520,8 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
        if (skb_is_gso(skb) && priv->tso) {
                if (gso & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))
                        return stmmac_tso_xmit(skb, dev);
-               if (priv->plat->has_gmac4 && (gso & SKB_GSO_UDP_L4))
+               if (priv->plat->core_type == DWMAC_CORE_GMAC4 &&
+                   (gso & SKB_GSO_UDP_L4))
                        return stmmac_tso_xmit(skb, dev);
        }
 
@@ -5973,7 +5974,7 @@ static void stmmac_common_interrupt(struct stmmac_priv *priv)
        u32 queue;
        bool xmac;
 
-       xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac;
+       xmac = dwmac_is_xmac(priv->plat->core_type);
        queues_count = (rx_cnt > tx_cnt) ? rx_cnt : tx_cnt;
 
        if (priv->irq_wake)
@@ -5987,7 +5988,7 @@ static void stmmac_common_interrupt(struct stmmac_priv *priv)
                stmmac_fpe_irq_status(priv);
 
        /* To handle GMAC own interrupts */
-       if ((priv->plat->has_gmac) || xmac) {
+       if (priv->plat->core_type == DWMAC_CORE_GMAC || xmac) {
                int status = stmmac_host_irq_status(priv, priv->hw, &priv->xstats);
 
                if (unlikely(status)) {
@@ -6348,7 +6349,7 @@ static int stmmac_dma_cap_show(struct seq_file *seq, void *v)
                   (priv->dma_cap.mbps_1000) ? "Y" : "N");
        seq_printf(seq, "\tHalf duplex: %s\n",
                   (priv->dma_cap.half_duplex) ? "Y" : "N");
-       if (priv->plat->has_xgmac) {
+       if (priv->plat->core_type == DWMAC_CORE_XGMAC) {
                seq_printf(seq,
                           "\tNumber of Additional MAC address registers: %d\n",
                           priv->dma_cap.multi_addr);
@@ -6372,7 +6373,7 @@ static int stmmac_dma_cap_show(struct seq_file *seq, void *v)
                   (priv->dma_cap.time_stamp) ? "Y" : "N");
        seq_printf(seq, "\tIEEE 1588-2008 Advanced Time Stamp: %s\n",
                   (priv->dma_cap.atime_stamp) ? "Y" : "N");
-       if (priv->plat->has_xgmac)
+       if (priv->plat->core_type == DWMAC_CORE_XGMAC)
                seq_printf(seq, "\tTimestamp System Time Source: %s\n",
                           dwxgmac_timestamp_source[priv->dma_cap.tssrc]);
        seq_printf(seq, "\t802.3az - Energy-Efficient Ethernet (EEE): %s\n",
@@ -6381,7 +6382,7 @@ static int stmmac_dma_cap_show(struct seq_file *seq, void *v)
        seq_printf(seq, "\tChecksum Offload in TX: %s\n",
                   (priv->dma_cap.tx_coe) ? "Y" : "N");
        if (priv->synopsys_id >= DWMAC_CORE_4_00 ||
-           priv->plat->has_xgmac) {
+           priv->plat->core_type == DWMAC_CORE_XGMAC) {
                seq_printf(seq, "\tIP Checksum Offload in RX: %s\n",
                           (priv->dma_cap.rx_coe) ? "Y" : "N");
        } else {
@@ -7233,8 +7234,9 @@ static int stmmac_hw_init(struct stmmac_priv *priv)
         * has to be disable and this can be done by passing the
         * riwt_off field from the platform.
         */
-       if (((priv->synopsys_id >= DWMAC_CORE_3_50) ||
-           (priv->plat->has_xgmac)) && (!priv->plat->riwt_off)) {
+       if ((priv->synopsys_id >= DWMAC_CORE_3_50 ||
+            priv->plat->core_type == DWMAC_CORE_XGMAC) &&
+           !priv->plat->riwt_off) {
                priv->use_riwt = 1;
                dev_info(priv->device,
                         "Enable RX Mitigation via HW Watchdog Timer\n");
@@ -7355,7 +7357,7 @@ static int stmmac_xdp_rx_timestamp(const struct xdp_md *_ctx, u64 *timestamp)
                return -ENODATA;
 
        /* For GMAC4, the valid timestamp is from CTX next desc. */
-       if (priv->plat->has_gmac4 || priv->plat->has_xgmac)
+       if (dwmac_is_xmac(priv->plat->core_type))
                desc_contains_ts = ndesc;
 
        /* Check if timestamp is available */
@@ -7511,7 +7513,7 @@ int stmmac_dvr_probe(struct device *device,
 
        if ((priv->plat->flags & STMMAC_FLAG_TSO_EN) && (priv->dma_cap.tsoen)) {
                ndev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6;
-               if (priv->plat->has_gmac4)
+               if (priv->plat->core_type == DWMAC_CORE_GMAC4)
                        ndev->hw_features |= NETIF_F_GSO_UDP_L4;
                priv->tso = true;
                dev_info(priv->device, "TSO feature enabled\n");
@@ -7564,7 +7566,7 @@ int stmmac_dvr_probe(struct device *device,
 #ifdef STMMAC_VLAN_TAG_USED
        /* Both mac100 and gmac support receive VLAN tag detection */
        ndev->features |= NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_STAG_RX;
-       if (priv->plat->has_gmac4 || priv->plat->has_xgmac) {
+       if (dwmac_is_xmac(priv->plat->core_type)) {
                ndev->hw_features |= NETIF_F_HW_VLAN_CTAG_RX;
                priv->hw->hw_vlan_en = true;
        }
@@ -7595,7 +7597,7 @@ int stmmac_dvr_probe(struct device *device,
 
        /* MTU range: 46 - hw-specific max */
        ndev->min_mtu = ETH_ZLEN - ETH_HLEN;
-       if (priv->plat->has_xgmac)
+       if (priv->plat->core_type == DWMAC_CORE_XGMAC)
                ndev->max_mtu = XGMAC_JUMBO_LEN;
        else if ((priv->plat->enh_desc) || (priv->synopsys_id >= DWMAC_CORE_4_00))
                ndev->max_mtu = JUMBO_LEN;
index 65db43e9c85e2d7246ce730312722e656c6a2e40..3f8cc3293964c2961ff4994794691a902875c937 100644 (file)
@@ -301,7 +301,7 @@ static int stmmac_mdio_read_c22(struct mii_bus *bus, int phyaddr, int phyreg)
        struct stmmac_priv *priv = netdev_priv(bus->priv);
        u32 cmd;
 
-       if (priv->plat->has_gmac4)
+       if (priv->plat->core_type == DWMAC_CORE_GMAC4)
                cmd = MII_GMAC4_READ;
        else
                cmd = 0;
@@ -344,7 +344,7 @@ static int stmmac_mdio_write_c22(struct mii_bus *bus, int phyaddr, int phyreg,
        struct stmmac_priv *priv = netdev_priv(bus->priv);
        u32 cmd;
 
-       if (priv->plat->has_gmac4)
+       if (priv->plat->core_type == DWMAC_CORE_GMAC4)
                cmd = MII_GMAC4_WRITE;
        else
                cmd = MII_ADDR_GWRITE;
@@ -417,7 +417,7 @@ int stmmac_mdio_reset(struct mii_bus *bus)
         * on MDC, so perform a dummy mdio read. To be updated for GMAC4
         * if needed.
         */
-       if (!priv->plat->has_gmac4)
+       if (priv->plat->core_type != DWMAC_CORE_GMAC4)
                writel(0, priv->ioaddr + mii_address);
 #endif
        return 0;
@@ -528,7 +528,7 @@ static u32 stmmac_clk_csr_set(struct stmmac_priv *priv)
                        value = 0;
        }
 
-       if (priv->plat->has_xgmac) {
+       if (priv->plat->core_type == DWMAC_CORE_XGMAC) {
                if (clk_rate > 400000000)
                        value = 0x5;
                else if (clk_rate > 350000000)
@@ -601,7 +601,7 @@ int stmmac_mdio_register(struct net_device *ndev)
 
        new_bus->name = "stmmac";
 
-       if (priv->plat->has_xgmac) {
+       if (priv->plat->core_type == DWMAC_CORE_XGMAC) {
                new_bus->read = &stmmac_xgmac2_mdio_read_c22;
                new_bus->write = &stmmac_xgmac2_mdio_write_c22;
                new_bus->read_c45 = &stmmac_xgmac2_mdio_read_c45;
@@ -622,7 +622,7 @@ int stmmac_mdio_register(struct net_device *ndev)
        } else {
                new_bus->read = &stmmac_mdio_read_c22;
                new_bus->write = &stmmac_mdio_write_c22;
-               if (priv->plat->has_gmac4) {
+               if (priv->plat->core_type == DWMAC_CORE_GMAC4) {
                        new_bus->read_c45 = &stmmac_mdio_read_c45;
                        new_bus->write_c45 = &stmmac_mdio_write_c45;
                }
@@ -650,7 +650,7 @@ int stmmac_mdio_register(struct net_device *ndev)
        }
 
        /* Looks like we need a dummy read for XGMAC only and C45 PHYs */
-       if (priv->plat->has_xgmac)
+       if (priv->plat->core_type == DWMAC_CORE_XGMAC)
                stmmac_xgmac2_mdio_read_c45(new_bus, 0, 0, 0);
 
        /* If fixed-link is set, skip PHY scanning */
index 4e3aa611fda83f9e7f6e91d9891ff47539c9688b..94b3a3b272706c7ead3d219462ddf5c5b81214d5 100644 (file)
@@ -23,7 +23,7 @@ static void common_default_data(struct plat_stmmacenet_data *plat)
 {
        /* clk_csr_i = 20-35MHz & MDC = clk_csr_i/16 */
        plat->clk_csr = STMMAC_CSR_20_35M;
-       plat->has_gmac = 1;
+       plat->core_type = DWMAC_CORE_GMAC;
        plat->force_sf_dma_mode = 1;
 
        plat->mdio_bus_data->needs_reset = true;
@@ -76,7 +76,7 @@ static int snps_gmac5_default_data(struct pci_dev *pdev,
        int i;
 
        plat->clk_csr = STMMAC_CSR_250_300M;
-       plat->has_gmac4 = 1;
+       plat->core_type = DWMAC_CORE_GMAC4;
        plat->force_sf_dma_mode = 1;
        plat->flags |= STMMAC_FLAG_TSO_EN;
        plat->pmt = 1;
index 27bcaae07a7f22e93b05e50bbaca9f4af7d79a9b..fbb92cc6ab5989ee4133711171435e6c74dea1d5 100644 (file)
@@ -552,12 +552,12 @@ stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)
                                &pdev->dev, plat->unicast_filter_entries);
                plat->multicast_filter_bins = dwmac1000_validate_mcast_bins(
                                &pdev->dev, plat->multicast_filter_bins);
-               plat->has_gmac = 1;
+               plat->core_type = DWMAC_CORE_GMAC;
                plat->pmt = 1;
        }
 
        if (of_device_is_compatible(np, "snps,dwmac-3.40a")) {
-               plat->has_gmac = 1;
+               plat->core_type = DWMAC_CORE_GMAC;
                plat->enh_desc = 1;
                plat->tx_coe = 1;
                plat->bugged_jumbo = 1;
@@ -565,8 +565,7 @@ stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)
        }
 
        if (of_device_compatible_match(np, stmmac_gmac4_compats)) {
-               plat->has_gmac4 = 1;
-               plat->has_gmac = 0;
+               plat->core_type = DWMAC_CORE_GMAC4;
                plat->pmt = 1;
                if (of_property_read_bool(np, "snps,tso"))
                        plat->flags |= STMMAC_FLAG_TSO_EN;
@@ -580,7 +579,7 @@ stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)
        }
 
        if (of_device_is_compatible(np, "snps,dwxgmac")) {
-               plat->has_xgmac = 1;
+               plat->core_type = DWMAC_CORE_XGMAC;
                plat->pmt = 1;
                if (of_property_read_bool(np, "snps,tso"))
                        plat->flags |= STMMAC_FLAG_TSO_EN;
index 993ff4e87e5570a31f3522dec71ac4478ced7360..3e30172fa129483bf79940ca180785dcfe2a1f07 100644 (file)
@@ -57,7 +57,7 @@ static int stmmac_adjust_time(struct ptp_clock_info *ptp, s64 delta)
        bool xmac, est_rst = false;
        int ret;
 
-       xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac;
+       xmac = dwmac_is_xmac(priv->plat->core_type);
 
        if (delta < 0) {
                neg_adj = 1;
@@ -344,7 +344,7 @@ void stmmac_ptp_register(struct stmmac_priv *priv)
 
        /* Calculate the clock domain crossing (CDC) error if necessary */
        priv->plat->cdc_error_adj = 0;
-       if (priv->plat->has_gmac4)
+       if (priv->plat->core_type == DWMAC_CORE_GMAC4)
                priv->plat->cdc_error_adj = (2 * NSEC_PER_SEC) / priv->plat->clk_ptp_rate;
 
        /* Update the ptp clock parameters based on feature discovery, when
index 99022620457accf983f4a9eef6c2b2cdd0b59b35..151c81c560c8c448adab6ea95cf6f18b11d9f162 100644 (file)
@@ -171,6 +171,13 @@ struct dwmac4_addrs {
        u32 mtl_low_cred_offset;
 };
 
+enum dwmac_core_type {
+       DWMAC_CORE_MAC100,
+       DWMAC_CORE_GMAC,
+       DWMAC_CORE_GMAC4,
+       DWMAC_CORE_XGMAC,
+};
+
 #define STMMAC_FLAG_SPH_DISABLE                        BIT(1)
 #define STMMAC_FLAG_USE_PHY_WOL                        BIT(2)
 #define STMMAC_FLAG_HAS_SUN8I                  BIT(3)
@@ -186,6 +193,7 @@ struct dwmac4_addrs {
 #define STMMAC_FLAG_HWTSTAMP_CORRECT_LATENCY   BIT(13)
 
 struct plat_stmmacenet_data {
+       enum dwmac_core_type core_type;
        int bus_id;
        int phy_addr;
        /* MAC ----- optional PCS ----- SerDes ----- optional PHY ----- Media
@@ -219,7 +227,6 @@ struct plat_stmmacenet_data {
        struct stmmac_dma_cfg *dma_cfg;
        struct stmmac_safety_feature_cfg *safety_feat_cfg;
        int clk_csr;
-       int has_gmac;
        int enh_desc;
        int tx_coe;
        int rx_coe;
@@ -282,10 +289,8 @@ struct plat_stmmacenet_data {
        struct reset_control *stmmac_rst;
        struct reset_control *stmmac_ahb_rst;
        struct stmmac_axi *axi;
-       int has_gmac4;
        int rss_en;
        int mac_port_sel_speed;
-       int has_xgmac;
        u8 vlan_fail_q;
        struct pci_dev *pdev;
        int int_snapshot_num;