PTP and MMC modules base address can depend on the GMAC version. As this
is HW specific lets move this base address calculation to hwif.c. Also,
add an entry in the HW table so that we can specify the module offset.
This can later be extended to more modules, if deemed necessary.

Signed-off-by: Jose Abreu <joab...@synopsys.com>
Cc: David S. Miller <da...@davemloft.net>
Cc: Joao Pinto <jpi...@synopsys.com>
Cc: Vitor Soares <soa...@synopsys.com>
Cc: Giuseppe Cavallaro <peppe.cavall...@st.com>
Cc: Alexandre Torgue <alexandre.tor...@st.com>
---
 drivers/net/ethernet/stmicro/stmmac/hwif.c        |   34 +++++++++++++++++++++
 drivers/net/ethernet/stmicro/stmmac/hwif.h        |    5 +++
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c |    8 -----
 3 files changed, 39 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/hwif.c 
b/drivers/net/ethernet/stmicro/stmmac/hwif.c
index 9acc8d2..23a1264 100644
--- a/drivers/net/ethernet/stmicro/stmmac/hwif.c
+++ b/drivers/net/ethernet/stmicro/stmmac/hwif.c
@@ -6,6 +6,7 @@
 
 #include "common.h"
 #include "stmmac.h"
+#include "stmmac_ptp.h"
 
 static u32 stmmac_get_id(struct stmmac_priv *priv, u32 id_reg)
 {
@@ -72,6 +73,7 @@ static int stmmac_dwmac4_quirks(struct stmmac_priv *priv)
        bool gmac;
        bool gmac4;
        u32 min_id;
+       const struct stmmac_regs_off regs;
        const void *desc;
        const void *dma;
        const void *mac;
@@ -86,6 +88,10 @@ static int stmmac_dwmac4_quirks(struct stmmac_priv *priv)
                .gmac = false,
                .gmac4 = false,
                .min_id = 0,
+               .regs = {
+                       .ptp_off = PTP_GMAC3_X_OFFSET,
+                       .mmc_off = MMC_GMAC3_X_OFFSET,
+               },
                .desc = NULL,
                .dma = &dwmac100_dma_ops,
                .mac = &dwmac100_ops,
@@ -98,6 +104,10 @@ static int stmmac_dwmac4_quirks(struct stmmac_priv *priv)
                .gmac = true,
                .gmac4 = false,
                .min_id = 0,
+               .regs = {
+                       .ptp_off = PTP_GMAC3_X_OFFSET,
+                       .mmc_off = MMC_GMAC3_X_OFFSET,
+               },
                .desc = NULL,
                .dma = &dwmac1000_dma_ops,
                .mac = &dwmac1000_ops,
@@ -110,6 +120,10 @@ static int stmmac_dwmac4_quirks(struct stmmac_priv *priv)
                .gmac = false,
                .gmac4 = true,
                .min_id = 0,
+               .regs = {
+                       .ptp_off = PTP_GMAC4_OFFSET,
+                       .mmc_off = MMC_GMAC4_OFFSET,
+               },
                .desc = &dwmac4_desc_ops,
                .dma = &dwmac4_dma_ops,
                .mac = &dwmac4_ops,
@@ -122,6 +136,10 @@ static int stmmac_dwmac4_quirks(struct stmmac_priv *priv)
                .gmac = false,
                .gmac4 = true,
                .min_id = DWMAC_CORE_4_00,
+               .regs = {
+                       .ptp_off = PTP_GMAC4_OFFSET,
+                       .mmc_off = MMC_GMAC4_OFFSET,
+               },
                .desc = &dwmac4_desc_ops,
                .dma = &dwmac4_dma_ops,
                .mac = &dwmac410_ops,
@@ -134,6 +152,10 @@ static int stmmac_dwmac4_quirks(struct stmmac_priv *priv)
                .gmac = false,
                .gmac4 = true,
                .min_id = DWMAC_CORE_4_10,
+               .regs = {
+                       .ptp_off = PTP_GMAC4_OFFSET,
+                       .mmc_off = MMC_GMAC4_OFFSET,
+               },
                .desc = &dwmac4_desc_ops,
                .dma = &dwmac410_dma_ops,
                .mac = &dwmac410_ops,
@@ -146,6 +168,10 @@ static int stmmac_dwmac4_quirks(struct stmmac_priv *priv)
                .gmac = false,
                .gmac4 = true,
                .min_id = DWMAC_CORE_5_10,
+               .regs = {
+                       .ptp_off = PTP_GMAC4_OFFSET,
+                       .mmc_off = MMC_GMAC4_OFFSET,
+               },
                .desc = &dwmac4_desc_ops,
                .dma = &dwmac410_dma_ops,
                .mac = &dwmac510_ops,
@@ -175,6 +201,12 @@ int stmmac_hwif_init(struct stmmac_priv *priv)
        /* Save ID for later use */
        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);
+
        /* Check for HW specific setup first */
        if (priv->plat->setup) {
                priv->hw = priv->plat->setup(priv);
@@ -206,6 +238,8 @@ int stmmac_hwif_init(struct stmmac_priv *priv)
                mac->tc = entry->tc;
 
                priv->hw = mac;
+               priv->ptpaddr = priv->ioaddr + entry->regs.ptp_off;
+               priv->mmcaddr = priv->ioaddr + entry->regs.mmc_off;
 
                /* Entry found */
                ret = entry->setup(priv);
diff --git a/drivers/net/ethernet/stmicro/stmmac/hwif.h 
b/drivers/net/ethernet/stmicro/stmmac/hwif.h
index 3ff4afe..06fb20b 100644
--- a/drivers/net/ethernet/stmicro/stmmac/hwif.h
+++ b/drivers/net/ethernet/stmicro/stmmac/hwif.h
@@ -442,6 +442,11 @@ struct stmmac_tc_ops {
 #define stmmac_tc_setup_cls_u32(__priv, __args...) \
        stmmac_do_callback(__priv, tc, setup_cls_u32, __args)
 
+struct stmmac_regs_off {
+       u32 ptp_off;
+       u32 mmc_off;
+};
+
 extern const struct stmmac_ops dwmac100_ops;
 extern const struct stmmac_dma_ops dwmac100_dma_ops;
 extern const struct stmmac_ops dwmac1000_ops;
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index ce6f839..a4d6ea7 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -2085,14 +2085,6 @@ static void stmmac_mmc_setup(struct stmmac_priv *priv)
        unsigned int mode = MMC_CNTRL_RESET_ON_READ | MMC_CNTRL_COUNTER_RESET |
                            MMC_CNTRL_PRESET | MMC_CNTRL_FULL_HALF_PRESET;
 
-       if (priv->synopsys_id >= DWMAC_CORE_4_00) {
-               priv->ptpaddr = priv->ioaddr + PTP_GMAC4_OFFSET;
-               priv->mmcaddr = priv->ioaddr + MMC_GMAC4_OFFSET;
-       } else {
-               priv->ptpaddr = priv->ioaddr + PTP_GMAC3_X_OFFSET;
-               priv->mmcaddr = priv->ioaddr + MMC_GMAC3_X_OFFSET;
-       }
-
        dwmac_mmc_intr_all_mask(priv->mmcaddr);
 
        if (priv->dma_cap.rmon) {
-- 
1.7.1


Reply via email to