From: Frank Li <Frank.li@oss.nxp.com>
To: Marek Vasut <marex@nabladev.com>
Cc: netdev@vger.kernel.org, Vladimir Oltean <vladimir.oltean@nxp.com>,
"Christophe Leroy (CS GROUP)" <chleroy@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Andrew Lunn <andrew+netdev@lunn.ch>,
Clark Wang <xiaoning.wang@nxp.com>,
Claudiu Manoil <claudiu.manoil@nxp.com>,
Conor Dooley <conor+dt@kernel.org>,
Eric Dumazet <edumazet@kernel.org>, Frank Li <Frank.Li@nxp.com>,
Jakub Kicinski <kuba@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Paolo Abeni <pabeni@redhat.com>, Rob Herring <robh@kernel.org>,
UNGLinuxDriver@microchip.com, Wei Fang <wei.fang@nxp.com>,
devicetree@vger.kernel.org, imx@lists.linux.dev,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org
Subject: Re: [net-next,PATCH 2/2] enetc: Make eMDIO MDC rate configurable from DT
Date: Fri, 16 Oct 2026 15:04:05 -0500 [thread overview]
Message-ID: <atKDNdxl0w65s8yQ@SMW015318> (raw)
In-Reply-To: <20261016193344.115518-2-marex@nabladev.com>
On Fri, Oct 16, 2026 at 09:32:01PM +0200, Marek Vasut wrote:
> The current eMDIO MDC rate is hard-coded in the drivers which use the
> eMDIO MDC, this is not flexible for various deployments of SoCs which
> use the eMDIO interface, for example i.MX95 B0 MDC clock is currently
> set to 644 kHz.
>
> Introduce enetc_mdio_priv .mdc_div field which contains the divider
> used for MDC clock and pass it around, including into functions which
> configure the MDC clock. This way, drivers which use the eMDIO can set
> the divider as needed. Introduce enetc_mdio_update_mdc_div() function
> which calculates the divider from upstream clock and clock-frequency
> DT property, both of which are optional to retain compatibility with
> older DTs. This is modeled according to xgmac_mdio_set_mdc_freq().
>
> Suggested-by: Vladimir Oltean <vladimir.oltean@nxp.com>
> Signed-off-by: Marek Vasut <marex@nabladev.com>
> ---
> Cc: "Christophe Leroy (CS GROUP)" <chleroy@kernel.org>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Andrew Lunn <andrew+netdev@lunn.ch>
> Cc: Clark Wang <xiaoning.wang@nxp.com>
> Cc: Claudiu Manoil <claudiu.manoil@nxp.com>
> Cc: Conor Dooley <conor+dt@kernel.org>
> Cc: Eric Dumazet <edumazet@kernel.org>
> Cc: Frank Li <Frank.Li@nxp.com>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Krzysztof Kozlowski <krzk+dt@kernel.org>
> Cc: Paolo Abeni <pabeni@redhat.com>
> Cc: Rob Herring <robh@kernel.org>
> Cc: UNGLinuxDriver@microchip.com
> Cc: Vladimir Oltean <vladimir.oltean@nxp.com>
> Cc: Wei Fang <wei.fang@nxp.com>
> Cc: devicetree@vger.kernel.org
> Cc: imx@lists.linux.dev
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-kernel@vger.kernel.org
> Cc: linuxppc-dev@lists.ozlabs.org
> Cc: netdev@vger.kernel.org
> ---
> NOTE: I could only test i.MX95 , I could not test LS or Felix
> ---
> drivers/net/dsa/ocelot/felix_vsc9959.c | 5 +++
> .../net/ethernet/freescale/enetc/enetc_mdio.c | 39 ++++++++++++++++---
> .../ethernet/freescale/enetc/enetc_pci_mdio.c | 5 +++
> .../freescale/enetc/enetc_pf_common.c | 10 +++++
> include/linux/fsl/enetc_mdio.h | 6 +++
> 5 files changed, 59 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelot/felix_vsc9959.c
> index 8387dd208adb9..dbeec1b229325 100644
> --- a/drivers/net/dsa/ocelot/felix_vsc9959.c
> +++ b/drivers/net/dsa/ocelot/felix_vsc9959.c
> @@ -1008,8 +1008,13 @@ static int vsc9959_mdio_bus_alloc(struct ocelot *ocelot)
> * starting with the proper offset.
> */
> mdio_priv->mdio_base = 0;
> + mdio_priv->mdc_div = ENETC_MDIO_DEFAULT_DIVIDER;
> snprintf(bus->id, MII_BUS_ID_SIZE, "%s-imdio", dev_name(dev));
>
> + rc = enetc_mdio_update_mdc_div(bus);
> + if (rc)
> + return rc;
> +
> /* Needed in order to initialize the bus mutex lock */
> rc = mdiobus_register(bus);
> if (rc < 0) {
> diff --git a/drivers/net/ethernet/freescale/enetc/enetc_mdio.c b/drivers/net/ethernet/freescale/enetc/enetc_mdio.c
> index 998aaa394e9c4..93d61c2f1464f 100644
> --- a/drivers/net/ethernet/freescale/enetc/enetc_mdio.c
> +++ b/drivers/net/ethernet/freescale/enetc/enetc_mdio.c
> @@ -1,6 +1,7 @@
> // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
> /* Copyright 2019 NXP */
>
> +#include <linux/clk.h>
> #include <linux/fsl/enetc_mdio.h>
> #include <linux/mdio.h>
> #include <linux/of_mdio.h>
> @@ -22,9 +23,9 @@
> /* external MDIO only - driven on neg MDC edge */
> #define MDIO_CFG_NEG BIT(23)
>
> -#define ENETC_EMDIO_CFG \
> +#define ENETC_EMDIO_CFG(mdc_div) \
> (MDIO_CFG_HOLD(2) | \
> - MDIO_CFG_CLKDIV(258) | \
> + MDIO_CFG_CLKDIV(mdc_div) | \
> MDIO_CFG_NEG)
>
> #define MDIO_CTL_DEV_ADDR(x) ((x) & 0x1f)
> @@ -63,7 +64,7 @@ int enetc_mdio_write_c22(struct mii_bus *bus, int phy_id, int regnum,
> u16 dev_addr;
> int ret;
>
> - mdio_cfg = ENETC_EMDIO_CFG;
> + mdio_cfg = ENETC_EMDIO_CFG(mdio_priv->mdc_div);
> dev_addr = regnum & 0x1f;
> mdio_cfg &= ~MDIO_CFG_ENC45;
>
> @@ -95,7 +96,7 @@ int enetc_mdio_write_c45(struct mii_bus *bus, int phy_id, int dev_addr,
> u32 mdio_ctl, mdio_cfg;
> int ret;
>
> - mdio_cfg = ENETC_EMDIO_CFG;
> + mdio_cfg = ENETC_EMDIO_CFG(mdio_priv->mdc_div);
> mdio_cfg |= MDIO_CFG_ENC45;
>
> enetc_mdio_wr(mdio_priv, ENETC_MDIO_CFG, mdio_cfg);
> @@ -133,7 +134,7 @@ int enetc_mdio_read_c22(struct mii_bus *bus, int phy_id, int regnum)
> u16 dev_addr, value;
> int ret;
>
> - mdio_cfg = ENETC_EMDIO_CFG;
> + mdio_cfg = ENETC_EMDIO_CFG(mdio_priv->mdc_div);
> dev_addr = regnum & 0x1f;
> mdio_cfg &= ~MDIO_CFG_ENC45;
>
> @@ -176,7 +177,7 @@ int enetc_mdio_read_c45(struct mii_bus *bus, int phy_id, int dev_addr,
> u16 value;
> int ret;
>
> - mdio_cfg = ENETC_EMDIO_CFG;
> + mdio_cfg = ENETC_EMDIO_CFG(mdio_priv->mdc_div);
> mdio_cfg |= MDIO_CFG_ENC45;
>
> enetc_mdio_wr(mdio_priv, ENETC_MDIO_CFG, mdio_cfg);
> @@ -231,6 +232,32 @@ struct enetc_hw *enetc_hw_alloc(struct device *dev, void __iomem *port_regs)
> }
> EXPORT_SYMBOL_GPL(enetc_hw_alloc);
>
> +int enetc_mdio_update_mdc_div(struct mii_bus *bus)
> +{
> + struct enetc_mdio_priv *mdio_priv = bus->priv;
> + struct device *dev = bus->parent;
> + struct clk *enet_clk;
> + u32 div, mdc_freq;
> +
> + if (device_property_read_u32(dev, "clock-frequency", &mdc_freq))
> + return 0;
> +
> + enet_clk = devm_clk_get(dev, NULL);
> + if (IS_ERR(enet_clk))
> + return dev_err_probe(dev, PTR_ERR(enet_clk),
> + "Input clock unknown, not changing MDC frequency\n");
binding said clock is optional. If return failure here, it will block
existing dts, which have not clock property.
should be devm_clk_get_optional()?
Frank
next prev parent reply other threads:[~2026-10-16 20:04 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-16 19:32 [net-next,PATCH 1/2] dt-bindings: net: enetc-mdio: Document optional MDC clock Marek Vasut
2026-10-16 19:32 ` [net-next,PATCH 2/2] enetc: Make eMDIO MDC rate configurable from DT Marek Vasut
2026-10-16 20:04 ` Frank Li [this message]
2026-10-16 22:04 ` Marek Vasut
2026-10-17 2:24 ` Wei Fang
2026-10-17 17:30 ` Marek Vasut
2026-10-19 2:59 ` Wei Fang
2026-10-16 20:59 ` Andrew Lunn
2026-10-16 22:26 ` Marek Vasut
2026-10-17 17:39 ` Andrew Lunn
2026-10-17 19:34 ` sashiko-bot
2026-10-16 19:59 ` [net-next,PATCH 1/2] dt-bindings: net: enetc-mdio: Document optional MDC clock Frank Li
2026-10-18 19:42 ` 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=atKDNdxl0w65s8yQ@SMW015318 \
--to=frank.li@oss.nxp.com \
--cc=Frank.Li@nxp.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=andrew+netdev@lunn.ch \
--cc=chleroy@kernel.org \
--cc=claudiu.manoil@nxp.com \
--cc=conor+dt@kernel.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@kernel.org \
--cc=imx@lists.linux.dev \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=marex@nabladev.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=robh@kernel.org \
--cc=vladimir.oltean@nxp.com \
--cc=wei.fang@nxp.com \
--cc=xiaoning.wang@nxp.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.