From: sashiko-bot@kernel.org
To: "Caleb James DeLisle" <cjd@cjdns.fr>
Cc: devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org
Subject: Re: [PATCH v2 net-next 5/7] net: dsa: mediatek: support MDIO switch downstream of MMIO switch
Date: Wed, 16 Sep 2026 17:47:46 +0000 [thread overview]
Message-ID: <20260916174746.BBD7E1F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260915174643.253660-6-cjd@cjdns.fr>
Thank you for your contribution! Sashiko AI review found 5 potential issue(s) to consider:
- [Critical] dsa: mt7530: hardware access while in reset causes bus hangs
- [High] dsa: mt7530: PHYs are permanently masked out due to early MDIO setup
- [High] dsa: mt7530: PHY interrupts are broken due to late IRQ assignment
- [Medium] dsa: mt7530: resource leak and silent failure in mt7988_probe()
- [Medium] dsa: mt7530: data race on static idx in unlocked mt7988_probe()
--
commit b6de045bf619c20c22824d1e2470474ed02da7d7
Author: Caleb James DeLisle <cjd@cjdns.fr>
Subject: net: dsa: mediatek: support MDIO switch downstream of MMIO switch
The MT7530 / MT7531 can connect via either MDIO or MMIO. In MMIO mode the
switch provides its own MDIO bus which connects to its integrated PHYs. This
commit updates mt7530_setup_mdio() to be called from mt7988_probe() to allow
downstream switches to register.
> diff --git a/drivers/net/dsa/mt7530-mmio.c b/drivers/net/dsa/mt7530-mmio.c
> index cf3bdb23a2d54..f387190a95391 100644
> --- a/drivers/net/dsa/mt7530-mmio.c
> +++ b/drivers/net/dsa/mt7530-mmio.c
> @@ -61,7 +61,14 @@ mt7988_probe(struct platform_device *pdev)
> if (IS_ERR(priv->regmap))
> return PTR_ERR(priv->regmap);
>
> - return dsa_register_switch(priv->ds);
> + ret = dsa_register_switch(priv->ds);
> +
> + if (ret)
> + return ret;
> +
> + mt7530_setup_mdio(priv);
[Severity: Critical]
Does calling mt7530_setup_mdio() here access the hardware while the chip is
still held in reset?
If the DSA tree is incomplete, dsa_register_switch() returns 0 without
executing the switch's setup callback, which is normally responsible for
deasserting the hardware reset.
When mt7530_setup_mdio() registers the MDIO bus, it immediately triggers
MDIO read/write operations to probe PHYs. Can this cause invalid data reads
or fatal AXI bus hangs if the chip is still in reset?
[Severity: Medium]
Also, if mt7530_setup_mdio() returns an error (such as -ENOMEM or -ENODEV),
this unconditionally ignores the return value.
Does this allow the driver to bind successfully even if MDIO setup fails, and
leak the successfully registered DSA switch (priv->ds) since
dsa_unregister_switch() is not called on the error path?
> +
> + return 0;
> }
>
> static void mt7988_remove(struct platform_device *pdev)
> diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
> index b152b73315d50..fe93be1ece7d7 100644
> --- a/drivers/net/dsa/mt7530.c
> +++ b/drivers/net/dsa/mt7530.c
[ ... ]
> @@ -2414,6 +2414,10 @@ mt7530_setup_mdio(struct mt7530_priv *priv)
> static int idx;
> int ret = 0;
[Severity: Medium]
Before this patch, mt7530_setup_mdio() was exclusively called from
mt753x_setup(), which is serialized by the DSA subsystem's dsa2_mutex.
With the new call path in mt7988_probe() executing concurrently outside of
dsa2_mutex, can multiple switches probing concurrently race on the lockless
idx++ increment?
Could this lead to duplicate MDIO bus IDs and sysfs registration failures
here?
mt7530.c:mt7530_setup_mdio() {
...
snprintf(bus->id, MII_BUS_ID_SIZE, KBUILD_MODNAME "-%d", idx++);
...
}
> + /* Already done */
> + if (priv->child_bus)
> + return 0;
> +
> mnp = of_get_child_by_name(np, "mdio");
>
> if (mnp && !of_device_is_available(mnp))
> @@ -2438,9 +2442,6 @@ mt7530_setup_mdio(struct mt7530_priv *priv)
> bus->parent = dev;
> bus->phy_mask = ~ds->phys_mii_mask;
[Severity: High]
Since mt7988_probe() calls mt7530_setup_mdio() before the DSA tree is
completed, is ds->phys_mii_mask initialized at this point?
ds->phys_mii_mask is initialized by dsa_switch_setup() only after the tree
completes. Does this mean ds->phys_mii_mask is 0 here, causing bus->phy_mask
to be ~0?
If there are PHYs relying on auto-probing, this mask would cause the MDIO
core to skip probing them entirely. When the tree eventually completes,
mt7530_setup_mdio() will return early due to priv->child_bus already being
set, potentially leaving those PHYs permanently unprobed.
> - if (priv->irq_domain && !mnp)
> - mt7530_setup_mdio_irq(priv);
> -
> priv->child_bus = bus;
>
> ret = devm_of_mdiobus_register(dev, bus, mnp);
[ ... ]
> @@ -3285,6 +3287,9 @@ mt753x_setup(struct dsa_switch *ds)
> if (ret)
> return ret;
>
> + if (priv->irq_domain && ds->user_mii_bus)
> + mt7530_setup_mdio_irq(priv);
> +
[Severity: High]
Does moving the mt7530_setup_mdio_irq() call here populate the IRQs too late?
mt7530_setup_mdio() invokes devm_of_mdiobus_register(), which scans the MDIO
bus and creates PHY devices. During creation, the PHY framework copies
bus->irq[addr] into phydev->irq.
Since bus->irq is populated by mt7530_setup_mdio_irq() only after the PHYs
are already instantiated, won't the PHYs receive an initial value of 0
(PHY_POLL), silently breaking interrupt-driven link events?
> /* Initialise the PCS devices */
> for (i = 0; i < priv->ds->num_ports; i++) {
> priv->pcs[i].pcs.ops = priv->info->pcs_ops;
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260915174643.253660-1-cjd@cjdns.fr?part=5
next prev parent reply other threads:[~2026-09-16 17:47 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-15 17:46 [PATCH v2 net-next 0/7] net: dsa: mt7530: support EcoNet EN751221 Caleb James DeLisle
2026-09-15 17:46 ` [PATCH v2 net-next 1/7] net: dsa: mt7530: get ctrl phy addr using a function Caleb James DeLisle
2026-09-17 20:49 ` netdev-bot+sashiko
2026-09-15 17:46 ` [PATCH v2 net-next 2/7] dt-bindings: net: dsa: mediatek,mt7530: add passthrough mode Caleb James DeLisle
2026-09-17 20:49 ` netdev-bot+sashiko
2026-09-24 15:45 ` Rob Herring
2026-09-24 15:45 ` Rob Herring (Arm)
2026-09-15 17:46 ` [PATCH v2 net-next 3/7] net: dsa: mediatek: add support for " Caleb James DeLisle
2026-09-16 17:47 ` sashiko-bot
2026-09-17 20:49 ` netdev-bot+sashiko
2026-09-15 17:46 ` [PATCH v2 net-next 4/7] net: dsa: mediatek: support PLL setup on MMIO MT7530 Caleb James DeLisle
2026-09-17 20:49 ` netdev-bot+sashiko
2026-09-15 17:46 ` [PATCH v2 net-next 5/7] net: dsa: mediatek: support MDIO switch downstream of MMIO switch Caleb James DeLisle
2026-09-16 17:47 ` sashiko-bot [this message]
2026-09-17 20:49 ` netdev-bot+sashiko
2026-09-15 17:46 ` [PATCH v2 net-next 6/7] dt-bindings: net: dsa: mediatek,mt7530: add econet,en751221 Caleb James DeLisle
2026-09-16 17:47 ` sashiko-bot
2026-09-17 20:50 ` netdev-bot+sashiko
2026-09-24 15:49 ` Rob Herring
2026-09-15 17:46 ` [PATCH v2 net-next 7/7] net: dsa: mediatek: support EN751221 switch Caleb James DeLisle
2026-09-16 17:47 ` sashiko-bot
2026-09-17 20:50 ` netdev-bot+sashiko
2026-09-20 10:33 ` Benjamin Larsson
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=20260916174746.BBD7E1F000FF@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=cjd@cjdns.fr \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/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