[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240802031822.1862030-3-jitendra.vegiraju@broadcom.com>
Date: Thu, 1 Aug 2024 20:18:21 -0700
From: jitendra.vegiraju@...adcom.com
To: netdev@...r.kernel.org
Cc: alexandre.torgue@...s.st.com,
joabreu@...opsys.com,
davem@...emloft.net,
edumazet@...gle.com,
kuba@...nel.org,
pabeni@...hat.com,
mcoquelin.stm32@...il.com,
jitendra.vegiraju@...adcom.com,
bcm-kernel-feedback-list@...adcom.com,
richardcochran@...il.com,
ast@...nel.org,
daniel@...earbox.net,
hawk@...nel.org,
john.fastabend@...il.com,
linux-kernel@...r.kernel.org,
linux-stm32@...md-mailman.stormreply.com,
linux-arm-kernel@...ts.infradead.org,
bpf@...r.kernel.org,
andrew@...n.ch,
linux@...linux.org.uk,
horms@...nel.org,
florian.fainelli@...adcom.com
Subject: [PATCH net-next v3 2/3] net: stmmac: Integrate dwxgmac4 into stmmac hwif handling
From: Jitendra Vegiraju <jitendra.vegiraju@...adcom.com>
Integrate dwxgmac4 support into stmmac hardware interface handling.
A dwxgmac4 is an xgmac device and hence it inherits properties from
existing stmmac_hw table entry.
The quirks handling facility is used to update dma_ops field to
point to dwxgmac400_dma_ops when the user version field matches.
Signed-off-by: Jitendra Vegiraju <jitendra.vegiraju@...adcom.com>
---
drivers/net/ethernet/stmicro/stmmac/common.h | 4 +++
drivers/net/ethernet/stmicro/stmmac/hwif.c | 26 +++++++++++++++++++-
drivers/net/ethernet/stmicro/stmmac/hwif.h | 1 +
3 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h b/drivers/net/ethernet/stmicro/stmmac/common.h
index cd36ff4da68c..9bf278e11704 100644
--- a/drivers/net/ethernet/stmicro/stmmac/common.h
+++ b/drivers/net/ethernet/stmicro/stmmac/common.h
@@ -37,11 +37,15 @@
#define DWXGMAC_CORE_2_10 0x21
#define DWXGMAC_CORE_2_20 0x22
#define DWXLGMAC_CORE_2_00 0x20
+#define DWXGMAC_CORE_4_00 0x40
/* Device ID */
#define DWXGMAC_ID 0x76
#define DWXLGMAC_ID 0x27
+/* User Version */
+#define DWXGMAC_USER_VER_X22 0x22
+
#define STMMAC_CHAN0 0 /* Always supported and default for all chips */
/* TX and RX Descriptor Length, these need to be power of two.
diff --git a/drivers/net/ethernet/stmicro/stmmac/hwif.c b/drivers/net/ethernet/stmicro/stmmac/hwif.c
index 29367105df54..713cb5aa2c3e 100644
--- a/drivers/net/ethernet/stmicro/stmmac/hwif.c
+++ b/drivers/net/ethernet/stmicro/stmmac/hwif.c
@@ -36,6 +36,18 @@ static u32 stmmac_get_dev_id(struct stmmac_priv *priv, u32 id_reg)
return (reg & GENMASK(15, 8)) >> 8;
}
+static u32 stmmac_get_user_version(struct stmmac_priv *priv, u32 id_reg)
+{
+ u32 reg = readl(priv->ioaddr + id_reg);
+
+ if (!reg) {
+ dev_info(priv->device, "User Version not available\n");
+ return 0x0;
+ }
+
+ return (reg & GENMASK(23, 16)) >> 16;
+}
+
static void stmmac_dwmac_mode_quirk(struct stmmac_priv *priv)
{
struct mac_device_info *mac = priv->hw;
@@ -82,6 +94,18 @@ static int stmmac_dwmac4_quirks(struct stmmac_priv *priv)
return 0;
}
+static int stmmac_dwxgmac_quirks(struct stmmac_priv *priv)
+{
+ struct mac_device_info *mac = priv->hw;
+ u32 user_ver;
+
+ user_ver = stmmac_get_user_version(priv, GMAC4_VERSION);
+ if (priv->synopsys_id == DWXGMAC_CORE_4_00 &&
+ user_ver == DWXGMAC_USER_VER_X22)
+ mac->dma = &dwxgmac400_dma_ops;
+ return 0;
+}
+
static int stmmac_dwxlgmac_quirks(struct stmmac_priv *priv)
{
priv->hw->xlgmac = true;
@@ -256,7 +280,7 @@ static const struct stmmac_hwif_entry {
.mmc = &dwxgmac_mmc_ops,
.est = &dwmac510_est_ops,
.setup = dwxgmac2_setup,
- .quirks = NULL,
+ .quirks = stmmac_dwxgmac_quirks,
}, {
.gmac = false,
.gmac4 = false,
diff --git a/drivers/net/ethernet/stmicro/stmmac/hwif.h b/drivers/net/ethernet/stmicro/stmmac/hwif.h
index e53c32362774..6213c496385c 100644
--- a/drivers/net/ethernet/stmicro/stmmac/hwif.h
+++ b/drivers/net/ethernet/stmicro/stmmac/hwif.h
@@ -683,6 +683,7 @@ extern const struct stmmac_desc_ops dwxgmac210_desc_ops;
extern const struct stmmac_mmc_ops dwmac_mmc_ops;
extern const struct stmmac_mmc_ops dwxgmac_mmc_ops;
extern const struct stmmac_est_ops dwmac510_est_ops;
+extern const struct stmmac_dma_ops dwxgmac400_dma_ops;
#define GMAC_VERSION 0x00000020 /* GMAC CORE Version */
#define GMAC4_VERSION 0x00000110 /* GMAC4+ CORE Version */
--
2.34.1
Powered by blists - more mailing lists