From: Lukas Wunner <lukas@wunner.de>
To: Andrew Lunn <andrew@lunn.ch>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Eric Dumazet <edumazet@google.com>,
netdev@vger.kernel.org, linux-usb@vger.kernel.org,
Steve Glendinning <steve.glendinning@shawell.net>,
UNGLinuxDriver@microchip.com, Oliver Neukum <oneukum@suse.com>,
Andre Edich <andre.edich@microchip.com>,
Oleksij Rempel <linux@rempel-privat.de>,
Martyn Welch <martyn.welch@collabora.com>,
Gabriel Hojda <ghojda@yo2urs.ro>,
Christoph Fritz <chf.fritz@googlemail.com>,
Lino Sanfilippo <LinoSanfilippo@gmx.de>,
Philipp Rosenberger <p.rosenberger@kunbus.com>,
Heiner Kallweit <hkallweit1@gmail.com>,
Russell King <linux@armlinux.org.uk>,
Ferry Toth <fntoth@gmail.com>,
Krzysztof Kozlowski <krzk@kernel.org>,
'Linux Samsung SOC' <linux-samsung-soc@vger.kernel.org>
Subject: Re: [PATCH net-next v3 5/7] usbnet: smsc95xx: Forward PHY interrupts to PHY driver to avoid polling
Date: Tue, 24 May 2022 14:13:41 +0200 [thread overview]
Message-ID: <20220524121341.GA10702@wunner.de> (raw)
In-Reply-To: <Yowv95s7g7Ou5U8J@lunn.ch>
On Tue, May 24, 2022 at 03:08:07AM +0200, Andrew Lunn wrote:
> > @@ -976,6 +977,25 @@ static irqreturn_t phy_interrupt(int irq, void *phy_dat)
> > struct phy_driver *drv = phydev->drv;
> > irqreturn_t ret;
> >
> > + if (IS_ENABLED(CONFIG_PM_SLEEP) &&
> > + (phydev->mdio.dev.power.is_prepared ||
> > + phydev->mdio.dev.power.is_suspended)) {
> > + struct net_device *netdev = phydev->attached_dev;
> > +
> > + if (netdev) {
> > + struct device *parent = netdev->dev.parent;
> > +
> > + if (netdev->wol_enabled)
> > + pm_system_wakeup();
> > + else if (device_may_wakeup(&netdev->dev))
> > + pm_wakeup_dev_event(&netdev->dev, 0, true);
> > + else if (parent && device_may_wakeup(parent))
> > + pm_wakeup_dev_event(parent, 0, true);
> > + }
> > +
> > + return IRQ_HANDLED;
>
> I'm not sure you can just throw the interrupt away. There have been
> issues with WoL, where the WoL signal has been applied to a PMC, not
> an actual interrupt. Yet the PHY driver assumes it is an
> interrupt. And in order for WoL to work correctly, it needs the
> interrupt handler to be called. We said the hardware is broken, WoL
> cannot work for that setup.
>
> Here you have correct hardware, but you are throwing the interrupt
> away, which will have the same result. So i think you need to abort
> the suspend, get the bus working again, and call the interrupt
> handler. If this is a WoL interrupt you are supposed to be waking up
> anyway.
mdio_bus_phy_resume() does trigger the state machine via
phy_start_machine(), so link state changes *are* detected after wakeup.
But you're saying that's not sufficient and you really want the
PHY driver's IRQ handler to be called, do I understand that correctly?
That could be achieved with a flag indicating that the IRQ handler
needs to be rerun after resume. A simple invocation of irq_wake_thread()
will then achieve that.
It has also occurred to me that not clearing the IRQ may lead to
an interrupt storm if it's level-triggered. So I need to disable
the IRQ and re-enable it after the PHY has been resumed.
Back to the drawing board...
Thanks,
Lukas
next prev parent reply other threads:[~2022-05-24 12:13 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-12 8:42 [PATCH net-next v3 0/7] Polling be gone on LAN95xx Lukas Wunner
2022-05-12 8:42 ` [PATCH net-next v3 1/7] usbnet: Run unregister_netdev() before unbind() again Lukas Wunner
2022-05-12 8:42 ` [PATCH net-next v3 2/7] usbnet: smsc95xx: Don't clear read-only PHY interrupt Lukas Wunner
2022-05-12 11:57 ` Lukas Wunner
2022-05-12 8:42 ` [PATCH net-next v3 3/7] usbnet: smsc95xx: Don't reset PHY behind PHY driver's back Lukas Wunner
2022-05-12 12:12 ` Lukas Wunner
2022-05-12 8:42 ` [PATCH net-next v3 4/7] usbnet: smsc95xx: Avoid link settings race on interrupt reception Lukas Wunner
2022-05-12 12:15 ` Lukas Wunner
2022-05-12 8:42 ` [PATCH net-next v3 5/7] usbnet: smsc95xx: Forward PHY interrupts to PHY driver to avoid polling Lukas Wunner
2022-05-17 10:18 ` Marek Szyprowski
2022-05-19 19:08 ` Lukas Wunner
2022-05-19 21:22 ` Marek Szyprowski
2022-05-23 9:43 ` Lukas Wunner
2022-05-23 11:38 ` Marek Szyprowski
2022-05-23 12:34 ` Andrew Lunn
2022-05-23 13:47 ` Lukas Wunner
2022-05-24 0:52 ` Andrew Lunn
2022-05-24 1:08 ` Andrew Lunn
2022-05-24 6:16 ` Marek Szyprowski
2022-05-24 12:03 ` Andrew Lunn
2022-05-26 13:55 ` Lukas Wunner
2022-05-24 12:13 ` Lukas Wunner [this message]
2022-06-06 1:28 ` Andrew Lunn
2022-08-26 6:51 ` Marek Szyprowski
2022-08-26 7:19 ` Lukas Wunner
2022-08-26 7:41 ` Marek Szyprowski
2022-08-26 7:53 ` Lukas Wunner
2022-08-26 8:29 ` Marek Szyprowski
2022-08-29 11:40 ` Marek Szyprowski
2022-09-18 19:13 ` Lukas Wunner
2022-09-18 20:41 ` Florian Fainelli
2022-09-18 20:55 ` Lukas Wunner
2022-09-18 22:11 ` Florian Fainelli
2022-09-23 4:20 ` Lukas Wunner
2022-09-22 13:21 ` Marek Szyprowski
2022-05-12 8:42 ` [PATCH net-next v3 6/7] net: phy: smsc: Cache interrupt mask Lukas Wunner
2022-05-12 12:17 ` Lukas Wunner
2022-05-12 8:42 ` [PATCH net-next v3 7/7] net: phy: smsc: Cope with hot-removal in interrupt handler Lukas Wunner
2022-05-12 12:19 ` Lukas Wunner
2022-05-13 10:40 ` [PATCH net-next v3 0/7] Polling be gone on LAN95xx patchwork-bot+netdevbpf
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=20220524121341.GA10702@wunner.de \
--to=lukas@wunner.de \
--cc=LinoSanfilippo@gmx.de \
--cc=UNGLinuxDriver@microchip.com \
--cc=andre.edich@microchip.com \
--cc=andrew@lunn.ch \
--cc=chf.fritz@googlemail.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=fntoth@gmail.com \
--cc=ghojda@yo2urs.ro \
--cc=hkallweit1@gmail.com \
--cc=krzk@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linux@rempel-privat.de \
--cc=m.szyprowski@samsung.com \
--cc=martyn.welch@collabora.com \
--cc=netdev@vger.kernel.org \
--cc=oneukum@suse.com \
--cc=p.rosenberger@kunbus.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 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.