From: Bjorn Helgaas <helgaas@kernel.org>
To: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Cc: "Maciej S. Szmigiero" <mail@maciej.szmigiero.name>,
M Chetan Kumar <m.chetan.kumar@intel.com>,
Loic Poulain <loic.poulain@linaro.org>,
Johannes Berg <johannes@sipsolutions.net>,
Bjorn Helgaas <bhelgaas@google.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>,
netdev@vger.kernel.org, linux-pci@vger.kernel.org,
linux-kernel@vger.kernel.org,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
linux-pm@vger.kernel.org
Subject: Re: [PATCH v2] net: wwan: iosm: Fix hibernation by re-binding the driver around it
Date: Wed, 8 Jan 2025 13:51:09 -0600 [thread overview]
Message-ID: <20250108195109.GA224965@bhelgaas> (raw)
In-Reply-To: <c634d5bc-7a60-436a-94d8-c8a4fb0e0c26@gmail.com>
[+cc Rafael, linux-pm because they *are* PM experts :)]
On Wed, Jan 08, 2025 at 02:15:28AM +0200, Sergey Ryazanov wrote:
> On 08.01.2025 01:45, Bjorn Helgaas wrote:
> > On Wed, Jan 08, 2025 at 01:13:41AM +0200, Sergey Ryazanov wrote:
> > > On 05.01.2025 19:39, Maciej S. Szmigiero wrote:
> > > > Currently, the driver is seriously broken with respect to the
> > > > hibernation (S4): after image restore the device is back into
> > > > IPC_MEM_EXEC_STAGE_BOOT (which AFAIK means bootloader stage) and needs
> > > > full re-launch of the rest of its firmware, but the driver restore
> > > > handler treats the device as merely sleeping and just sends it a
> > > > wake-up command.
> > > >
> > > > This wake-up command times out but device nodes (/dev/wwan*) remain
> > > > accessible.
> > > > However attempting to use them causes the bootloader to crash and
> > > > enter IPC_MEM_EXEC_STAGE_CD_READY stage (which apparently means "a crash
> > > > dump is ready").
> > > >
> > > > It seems that the device cannot be re-initialized from this crashed
> > > > stage without toggling some reset pin (on my test platform that's
> > > > apparently what the device _RST ACPI method does).
> > > >
> > > > While it would theoretically be possible to rewrite the driver to tear
> > > > down the whole MUX / IPC layers on hibernation (so the bootloader does
> > > > not crash from improper access) and then re-launch the device on
> > > > restore this would require significant refactoring of the driver
> > > > (believe me, I've tried), since there are quite a few assumptions
> > > > hard-coded in the driver about the device never being partially
> > > > de-initialized (like channels other than devlink cannot be closed,
> > > > for example).
> > > > Probably this would also need some programming guide for this hardware.
> > > >
> > > > Considering that the driver seems orphaned [1] and other people are
> > > > hitting this issue too [2] fix it by simply unbinding the PCI driver
> > > > before hibernation and re-binding it after restore, much like
> > > > USB_QUIRK_RESET_RESUME does for USB devices that exhibit a similar
> > > > problem.
> > > >
> > > > Tested on XMM7360 in HP EliteBook 855 G7 both with s2idle (which uses
> > > > the existing suspend / resume handlers) and S4 (which uses the new code).
> > > >
> > > > [1]: https://lore.kernel.org/all/c248f0b4-2114-4c61-905f-466a786bdebb@leemhuis.info/
> > > > [2]:
> > > > https://github.com/xmm7360/xmm7360-pci/issues/211#issuecomment-1804139413
> > > >
> > > > Signed-off-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
> > >
> > > Generally looks good to me. Lets wait for approval from PCI
> > > maintainers to be sure that there no unexpected side effects.
> >
> > I have nothing useful to contribute here. Seems like kind of a
> > mess. But Intel claims to maintain this, so it would be nice if
> > they would step up and make this work nicely.
>
> Suddenly, Intel lost their interest in the modems market and, as
> Maciej mentioned, the driver was abandon for a quite time now. The
> author no more works for Intel. You will see the bounce.
Well, that's unfortunate :) Maybe step 0 is to remove the Intel
entry from MAINTAINERS for this driver.
> Bjorn, could you suggest how to deal easily with the device that is
> incapable to seamlessly recover from hibernation? I am totally
> hopeless regarding the PM topic. Or is the deep driver rework the
> only option?
I'm pretty PM-illiterate myself. Based on
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide/pm/sleep-states.rst?id=v6.12#n109,
I assume that when we resume after hibernate, devices are in the same
state as after a fresh boot, i.e., the state driver .probe() methods
see.
So I assume that some combination of dev_pm_ops methods must be able
to do basically the same as .probe() to get the device usable again
after it was completely powered off and back on.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/driver-api/pm/devices.rst?id=v6.12#n506
mentions .freeze(), .thaw(), .restore(), etc, but the fact that few
drivers set those pointers and all the nice macros for setting pm ops
(SYSTEM_SLEEP_PM_OPS, NOIRQ_SYSTEM_SLEEP_PM_OPS, etc) only take
suspend and resume functions makes me think most drivers must handle
hibernation in the same .suspend() and .resume() functions they use
for non-hibernate transitions.
Since all drivers have to cope with devices needing to be
reinitialized after hibernate, I would look around to see how other
drivers do it and see if you can do it similarly.
Sorry this is still really a non-answer.
Bjorn
next prev parent reply other threads:[~2025-01-08 19:51 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-05 17:39 [PATCH v2] net: wwan: iosm: Fix hibernation by re-binding the driver around it Maciej S. Szmigiero
2025-01-07 23:13 ` Sergey Ryazanov
2025-01-07 23:45 ` Bjorn Helgaas
2025-01-08 0:15 ` Sergey Ryazanov
2025-01-08 19:51 ` Bjorn Helgaas [this message]
2025-01-08 20:03 ` Maciej S. Szmigiero
2025-01-08 20:17 ` Rafael J. Wysocki
2025-01-08 20:18 ` Maciej S. Szmigiero
2025-01-08 20:14 ` Rafael J. Wysocki
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=20250108195109.GA224965@bhelgaas \
--to=helgaas@kernel.org \
--cc=andrew+netdev@lunn.ch \
--cc=bhelgaas@google.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=johannes@sipsolutions.net \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=loic.poulain@linaro.org \
--cc=m.chetan.kumar@intel.com \
--cc=mail@maciej.szmigiero.name \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rjw@rjwysocki.net \
--cc=ryazanov.s.a@gmail.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.