From: Aleksei Sviridkin <f@lex.la>
To: netdev@vger.kernel.org
Cc: andrew@lunn.ch, andrew+netdev@lunn.ch, hkallweit1@gmail.com,
linux@armlinux.org.uk, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, pabeni@redhat.com, horms@kernel.org,
olteanv@gmail.com, Thangaraj.S@microchip.com,
UNGLinuxDriver@microchip.com, steve.glendinning@shawell.net,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
Aleksei Sviridkin <f@lex.la>
Subject: [PATCH net v8 1/4] net: usb: lan78xx: register the PHY interrupt with the MDIO bus
Date: Fri, 18 Sep 2026 04:50:26 +0300 [thread overview]
Message-ID: <20260918015029.2518425-2-f@lex.la> (raw)
In-Reply-To: <20260918015029.2518425-1-f@lex.la>
The interrupt this driver maps for its PHY is written only into
phydev->irq, while the bus table mdiobus->irq[] keeps reading PHY_POLL
for the same address. That table is where phylib records what the bus
described - phy_device_create() seeds phydev->irq from it - so the
number lives only as long as nothing else writes that one field.
Put it where the bus keeps it and take phydev->irq from there. What the
PHY is attached with does not change.
Assisted-by: LLM
Signed-off-by: Aleksei Sviridkin <f@lex.la>
---
Notes:
Compile-tested only; I have no LAN78xx device.
No Fixes: tag on this one. On its own it fixes nothing - nothing reads the
bus table back until patch 3 - which is also why it sorts ahead of that
patch rather than after it.
The else branch that forced PHY_POLL is dropped rather than moved to the
table, for two reasons. It cannot run: lan78xx_setup_irq_domain() returns
-EINVAL when it cannot create the mapping, lan78xx_bind() gives up on that
return, and lan78xx_phy_init() only runs afterwards, so phyirq is always
positive by the time this code is reached. And if it could run it would be
wrong in the other direction: this bus is registered with
of_mdiobus_register(), so the table may already hold an interrupt the
devicetree described, and forcing PHY_POLL over it would invert what
patches 3 and 4 are for.
Teardown order keeps the number live for as long as it is read:
lan78xx_disconnect() detaches the PHY through phylink_disconnect_phy(), and
lan78xx_unbind() calls lan78xx_remove_irq_domain() only afterwards.
drivers/net/usb/lan78xx.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
index cb782d81d84f..d02e4ffcbbc1 100644
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -2892,11 +2892,10 @@ static int lan78xx_phy_init(struct lan78xx_net *dev)
return 0;
}
- /* if phyirq is not set, use polling mode in phylib */
if (dev->domain_data.phyirq > 0)
- phydev->irq = dev->domain_data.phyirq;
- else
- phydev->irq = PHY_POLL;
+ dev->mdiobus->irq[phydev->mdio.addr] = dev->domain_data.phyirq;
+
+ phydev->irq = dev->mdiobus->irq[phydev->mdio.addr];
netdev_dbg(dev->net, "phydev->irq = %d\n", phydev->irq);
ret = phylink_connect_phy(dev->phylink, phydev);
--
2.53.0
next prev parent reply other threads:[~2026-09-18 1:50 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-18 1:50 [PATCH net v8 0/4] net: phy: keep a PHY interrupt across a generic bind cycle Aleksei Sviridkin
2026-09-18 1:50 ` Aleksei Sviridkin [this message]
2026-09-18 2:04 ` [PATCH net v8 1/4] net: usb: lan78xx: register the PHY interrupt with the MDIO bus Andrew Lunn
2026-09-18 8:20 ` Aleksei Sviridkin
2026-09-22 2:28 ` netdev-bot+sashiko
2026-09-18 1:50 ` [PATCH net v8 2/4] net: usb: smsc95xx: " Aleksei Sviridkin
2026-09-18 2:05 ` Andrew Lunn
2026-09-18 8:20 ` Aleksei Sviridkin
2026-09-18 1:50 ` [PATCH net v8 3/4] net: phy: take the interrupt back from the bus on detach Aleksei Sviridkin
2026-09-22 2:28 ` netdev-bot+sashiko
2026-09-18 1:50 ` [PATCH net v8 4/4] net: phy: restore the interrupt when the generic bind cycle fails Aleksei Sviridkin
2026-09-22 2:28 ` netdev-bot+sashiko
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=20260918015029.2518425-2-f@lex.la \
--to=f@lex.la \
--cc=Thangaraj.S@microchip.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=andrew+netdev@lunn.ch \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=hkallweit1@gmail.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=pabeni@redhat.com \
--cc=steve.glendinning@shawell.net \
/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