From: Conor Dooley <conor@kernel.org>
To: netdev@vger.kernel.org
Cc: conor@kernel.org, "Conor Dooley" <conor.dooley@microchip.com>,
Valentina.FernandezAlanis@microchip.com,
"Andrew Lunn" <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Daire McNamara" <daire.mcnamara@microchip.com>,
"Paul Walmsley" <pjw@kernel.org>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Albert Ou" <aou@eecs.berkeley.edu>,
"Alexandre Ghiti" <alex@ghiti.fr>,
"Nicolas Ferre" <nicolas.ferre@microchip.com>,
"Claudiu Beznea" <claudiu.beznea@tuxon.dev>,
"Richard Cochran" <richardcochran@gmail.com>,
"Samuel Holland" <samuel.holland@sifive.com>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-riscv@lists.infradead.org,
"Dave Stevenson" <dave.stevenson@raspberrypi.com>,
"Sean Anderson" <sean.anderson@linux.dev>,
"Vineeth Karumanchi" <vineeth.karumanchi@amd.com>,
"Abin Joseph" <abin.joseph@amd.com>,
"Théo Lebrun" <theo.lebrun@bootlin.com>,
Ryan.Wanner@microchip.com, "Kevin Hao" <haokexin@gmail.com>
Subject: [PATCH net-next v5 05/14] net: macb: rework usrio refclk selection code
Date: Wed, 25 Mar 2026 16:28:09 +0000 [thread overview]
Message-ID: <20260325-tarantula-bullring-6ac44b39dd52@spud> (raw)
In-Reply-To: <20260325-unsterile-flail-4c7729750dc4@spud>
From: Conor Dooley <conor.dooley@microchip.com>
The USRIO based refclk selection code abuses a capability flag to set
the refclk to an external source based on match data/compatible on
sama7g5-emac and use an internal source for the gmac.
Ryan previously added a property in an attempt to decouple the refclk
source from the compatible, because this is not fixed by compatible
and there's variance based on the choices made by board designers.
Originally when Ryan added it, he removed the capability flag entirely
from match data, but this changed the default for the sama7g5-emac and
the removal had to be reverted for these devices. Because these devices
default to an external refclk, and the current property is only capable
of communicating external refclks, there's no way to make the
sama7g5-emac use an internal refclk.
Additionally, this property has no limiting based on compatible, and
if used on a platform with an external refclk that is not controlled
by USRIO the capability would be erroneously set. Because of the reuse
of the at91_default_usrio struct by non-at91 devices, this could cause
the refclk bit to be set in error, on a system where the refclk is
externally provided without usrio settings being required.
Change the new capability flag so that it actually represents the
hardware being capable of controlling the refclk source via USRIO,
and move the selection of default behaviour into the macb_usrio_config
struct provided as part of match data.
Modify the devicetree code to support a new property,
"cdns,refclk-source" which will support devices with either default,
retaining support for "cdns,refclk-external" for compatibility reasons.
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---
drivers/net/ethernet/cadence/macb.h | 1 +
drivers/net/ethernet/cadence/macb_main.c | 55 ++++++++++++++++++------
2 files changed, 44 insertions(+), 12 deletions(-)
diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
index 35b7129d7c1ee..1bdbe66b05590 100644
--- a/drivers/net/ethernet/cadence/macb.h
+++ b/drivers/net/ethernet/cadence/macb.h
@@ -1229,6 +1229,7 @@ struct macb_usrio_config {
u32 refclk;
u32 clken;
u32 hdfctlen;
+ bool refclk_default_external;
};
struct macb_config {
diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
index 859d03502666a..a436521460683 100644
--- a/drivers/net/ethernet/cadence/macb_main.c
+++ b/drivers/net/ethernet/cadence/macb_main.c
@@ -4576,12 +4576,8 @@ static const struct net_device_ops macb_netdev_ops = {
static void macb_configure_caps(struct macb *bp,
const struct macb_config *dt_conf)
{
- struct device_node *np = bp->pdev->dev.of_node;
- bool refclk_ext;
u32 dcfg;
- refclk_ext = of_property_read_bool(np, "cdns,refclk-ext");
-
if (dt_conf)
bp->caps = dt_conf->caps;
@@ -4614,9 +4610,6 @@ static void macb_configure_caps(struct macb *bp,
}
}
- if (refclk_ext)
- bp->caps |= MACB_CAPS_USRIO_HAS_REFCLK_SOURCE;
-
dev_dbg(&bp->pdev->dev, "Cadence caps 0x%08x\n", bp->caps);
}
@@ -4897,8 +4890,36 @@ static int macb_init_dflt(struct platform_device *pdev)
if (bp->caps & MACB_CAPS_USRIO_HAS_CLKEN)
val |= bp->usrio->clken;
- if (bp->caps & MACB_CAPS_USRIO_HAS_REFCLK_SOURCE)
- val |= bp->usrio->refclk;
+ if (bp->caps & MACB_CAPS_USRIO_HAS_REFCLK_SOURCE) {
+ const char *prop;
+ bool refclk_ext;
+ int ret;
+
+ /* Default to whatever was set in the match data for
+ * this device. There's two properties for refclk
+ * control, but the boolean one is deprecated so is
+ * a lower priority to check, no device should have
+ * both.
+ */
+ refclk_ext = bp->usrio->refclk_default_external;
+
+ ret = of_property_read_string(pdev->dev.of_node,
+ "cdns,refclk-source", &prop);
+ if (!ret) {
+ if (!strcmp(prop, "external"))
+ refclk_ext = true;
+ else
+ refclk_ext = false;
+ } else {
+ ret = of_property_read_bool(pdev->dev.of_node,
+ "cdns,refclk-ext");
+ if (ret)
+ refclk_ext = true;
+ }
+
+ if (refclk_ext)
+ val |= bp->usrio->refclk;
+ }
macb_or_gem_writel(bp, USRIO, val);
}
@@ -5503,11 +5524,21 @@ static const struct macb_usrio_config at91_default_usrio = {
.clken = MACB_BIT(CLKEN),
};
-static const struct macb_usrio_config sama7g5_usrio = {
+static const struct macb_usrio_config sama7g5_gem_usrio = {
.mii = 0,
.rmii = 1,
.rgmii = 2,
.refclk = BIT(2),
+ .refclk_default_external = false,
+ .hdfctlen = BIT(6),
+};
+
+static const struct macb_usrio_config sama7g5_emac_usrio = {
+ .mii = 0,
+ .rmii = 1,
+ .rgmii = 2,
+ .refclk = BIT(2),
+ .refclk_default_external = true,
.hdfctlen = BIT(6),
};
@@ -5622,7 +5653,7 @@ static const struct macb_config sama7g5_gem_config = {
MACB_CAPS_MIIONRGMII | MACB_CAPS_GEM_HAS_PTP |
MACB_CAPS_USRIO_HAS_MII,
.dma_burst_length = 16,
- .usrio = &sama7g5_usrio,
+ .usrio = &sama7g5_gem_usrio,
};
static const struct macb_config sama7g5_emac_config = {
@@ -5632,7 +5663,7 @@ static const struct macb_config sama7g5_emac_config = {
MACB_CAPS_GEM_HAS_PTP |
MACB_CAPS_USRIO_HAS_MII,
.dma_burst_length = 16,
- .usrio = &sama7g5_usrio,
+ .usrio = &sama7g5_emac_usrio,
};
static const struct macb_config versal_config = {
--
2.53.0
next prev parent reply other threads:[~2026-03-25 16:29 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-25 16:28 [PATCH net-next v5 00/14] macb usrio/tsu patches Conor Dooley
2026-03-25 16:28 ` [PATCH net-next v5 01/14] Revert "net: macb: Clean up the .usrio settings in macb_config instances" Conor Dooley
2026-03-25 16:28 ` [PATCH net-next v5 02/14] net: macb: rename macb_default_usrio to at91_default_usrio as not all platforms have mii mode control in usrio Conor Dooley
2026-03-25 16:28 ` [PATCH net-next v5 03/14] net: macb: split USRIO_HAS_CLKEN capability in two Conor Dooley
2026-03-25 16:28 ` [PATCH net-next v5 04/14] dt-bindings: net: cdns,macb: replace cdns,refclk-ext with cdns,refclk-source Conor Dooley
2026-03-25 16:28 ` Conor Dooley [this message]
2026-03-25 16:28 ` [PATCH net-next v5 06/14] net: macb: np4 doesn't need a usrio pointer Conor Dooley
2026-03-25 16:28 ` [PATCH net-next v5 07/14] net: macb: add mpfs specific usrio configuration Conor Dooley
2026-03-25 16:28 ` [PATCH net-next v5 08/14] net: macb: warn on pclk use as a tsu_clk fallback Conor Dooley
2026-03-25 16:28 ` [PATCH net-next v5 09/14] net: macb: clean up tsu clk rate acquisition Conor Dooley
2026-03-25 16:28 ` [PATCH net-next v5 10/14] dt-bindings: net: macb: add property indicating timer adjust mode Conor Dooley
2026-03-25 16:28 ` [PATCH net-next v5 11/14] net: macb: timer adjust mode is not supported Conor Dooley
2026-03-25 16:28 ` [PATCH net-next v5 12/14] net: macb: runtime detect MACB_CAPS_USRIO_DISABLED Conor Dooley
2026-03-25 16:28 ` [PATCH net-next v5 13/14] net: macb: set MACB_CAPS_USRIO_DISABLED if no usrio config is provided Conor Dooley
2026-03-25 16:28 ` [PATCH net-next v5 14/14] net: macb: drop usrio pointer on EyeQ5 config Conor Dooley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260325-tarantula-bullring-6ac44b39dd52@spud \
--to=conor@kernel.org \
--cc=Ryan.Wanner@microchip.com \
--cc=Valentina.FernandezAlanis@microchip.com \
--cc=abin.joseph@amd.com \
--cc=alex@ghiti.fr \
--cc=andrew+netdev@lunn.ch \
--cc=aou@eecs.berkeley.edu \
--cc=claudiu.beznea@tuxon.dev \
--cc=conor+dt@kernel.org \
--cc=conor.dooley@microchip.com \
--cc=daire.mcnamara@microchip.com \
--cc=dave.stevenson@raspberrypi.com \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=haokexin@gmail.com \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=netdev@vger.kernel.org \
--cc=nicolas.ferre@microchip.com \
--cc=pabeni@redhat.com \
--cc=palmer@dabbelt.com \
--cc=pjw@kernel.org \
--cc=richardcochran@gmail.com \
--cc=robh@kernel.org \
--cc=samuel.holland@sifive.com \
--cc=sean.anderson@linux.dev \
--cc=theo.lebrun@bootlin.com \
--cc=vineeth.karumanchi@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox