OSDN Git Service

net: stmmac: Add XGMAC 2.10 HWIF entry
authorJose Abreu <Jose.Abreu@synopsys.com>
Wed, 8 Aug 2018 08:04:29 +0000 (09:04 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 9 Aug 2018 18:16:28 +0000 (11:16 -0700)
Add a new entry to HWIF table for XGMAC 2.10. For now we fill it with
empty callbacks which will be added in posterior patches.

Signed-off-by: Jose Abreu <joabreu@synopsys.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Joao Pinto <jpinto@synopsys.com>
Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Cc: Alexandre Torgue <alexandre.torgue@st.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/common.h
drivers/net/ethernet/stmicro/stmmac/hwif.c
include/linux/stmmac.h

index 78fd0f8..3fb81ac 100644 (file)
 #include "mmc.h"
 
 /* Synopsys Core versions */
-#define        DWMAC_CORE_3_40 0x34
-#define        DWMAC_CORE_3_50 0x35
-#define        DWMAC_CORE_4_00 0x40
-#define DWMAC_CORE_4_10        0x41
-#define DWMAC_CORE_5_00 0x50
-#define DWMAC_CORE_5_10 0x51
+#define        DWMAC_CORE_3_40         0x34
+#define        DWMAC_CORE_3_50         0x35
+#define        DWMAC_CORE_4_00         0x40
+#define DWMAC_CORE_4_10                0x41
+#define DWMAC_CORE_5_00                0x50
+#define DWMAC_CORE_5_10                0x51
+#define DWXGMAC_CORE_2_10      0x21
+
 #define STMMAC_CHAN0   0       /* Always supported and default for all chips */
 
 /* These need to be power of two, and >= 4 */
index 1f50e83..24f5ff1 100644 (file)
@@ -72,6 +72,7 @@ static int stmmac_dwmac4_quirks(struct stmmac_priv *priv)
 static const struct stmmac_hwif_entry {
        bool gmac;
        bool gmac4;
+       bool xgmac;
        u32 min_id;
        const struct stmmac_regs_off regs;
        const void *desc;
@@ -87,6 +88,7 @@ static const struct stmmac_hwif_entry {
        {
                .gmac = false,
                .gmac4 = false,
+               .xgmac = false,
                .min_id = 0,
                .regs = {
                        .ptp_off = PTP_GMAC3_X_OFFSET,
@@ -103,6 +105,7 @@ static const struct stmmac_hwif_entry {
        }, {
                .gmac = true,
                .gmac4 = false,
+               .xgmac = false,
                .min_id = 0,
                .regs = {
                        .ptp_off = PTP_GMAC3_X_OFFSET,
@@ -119,6 +122,7 @@ static const struct stmmac_hwif_entry {
        }, {
                .gmac = false,
                .gmac4 = true,
+               .xgmac = false,
                .min_id = 0,
                .regs = {
                        .ptp_off = PTP_GMAC4_OFFSET,
@@ -135,6 +139,7 @@ static const struct stmmac_hwif_entry {
        }, {
                .gmac = false,
                .gmac4 = true,
+               .xgmac = false,
                .min_id = DWMAC_CORE_4_00,
                .regs = {
                        .ptp_off = PTP_GMAC4_OFFSET,
@@ -151,6 +156,7 @@ static const struct stmmac_hwif_entry {
        }, {
                .gmac = false,
                .gmac4 = true,
+               .xgmac = false,
                .min_id = DWMAC_CORE_4_10,
                .regs = {
                        .ptp_off = PTP_GMAC4_OFFSET,
@@ -167,6 +173,7 @@ static const struct stmmac_hwif_entry {
        }, {
                .gmac = false,
                .gmac4 = true,
+               .xgmac = false,
                .min_id = DWMAC_CORE_5_10,
                .regs = {
                        .ptp_off = PTP_GMAC4_OFFSET,
@@ -180,11 +187,29 @@ static const struct stmmac_hwif_entry {
                .tc = &dwmac510_tc_ops,
                .setup = dwmac4_setup,
                .quirks = NULL,
-       }
+       }, {
+               .gmac = false,
+               .gmac4 = false,
+               .xgmac = true,
+               .min_id = DWXGMAC_CORE_2_10,
+               .regs = {
+                       .ptp_off = 0,
+                       .mmc_off = 0,
+               },
+               .desc = NULL,
+               .dma = NULL,
+               .mac = NULL,
+               .hwtimestamp = NULL,
+               .mode = NULL,
+               .tc = NULL,
+               .setup = NULL,
+               .quirks = NULL,
+       },
 };
 
 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;
        const struct stmmac_hwif_entry *entry;
@@ -195,7 +220,7 @@ int stmmac_hwif_init(struct stmmac_priv *priv)
 
        if (needs_gmac) {
                id = stmmac_get_id(priv, GMAC_VERSION);
-       } else if (needs_gmac4) {
+       } else if (needs_gmac4 || needs_xgmac) {
                id = stmmac_get_id(priv, GMAC4_VERSION);
        } else {
                id = 0;
@@ -229,6 +254,8 @@ int stmmac_hwif_init(struct stmmac_priv *priv)
                        continue;
                if (needs_gmac4 ^ entry->gmac4)
                        continue;
+               if (needs_xgmac ^ entry->xgmac)
+                       continue;
                /* Use synopsys_id var because some setups can override this */
                if (priv->synopsys_id < entry->min_id)
                        continue;
index 32feac5..c43e9a0 100644 (file)
@@ -190,5 +190,6 @@ struct plat_stmmacenet_data {
        bool tso_en;
        int mac_port_sel_speed;
        bool en_tx_lpi_clockgating;
+       int has_xgmac;
 };
 #endif