[PATCH 1/6] PCI/PM: Respect pci_dev->skip_bus_pm in the .poweroff() path
Bjorn Helgaas
helgaas at kernel.org
Mon Sep 30 19:50:09 UTC 2024
On Thu, Sep 26, 2024 at 07:03:16PM +0300, Ville Syrjälä wrote:
> On Wed, Sep 25, 2024 at 02:28:42PM -0500, Bjorn Helgaas wrote:
> > On Wed, Sep 25, 2024 at 05:45:21PM +0300, Ville Syrjala wrote:
> > > From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > >
> > > On some older laptops i915 needs to leave the GPU in
> > > D0 when hibernating the system, or else the BIOS
> > > hangs somewhere. Currently that is achieved by calling
> > > pci_save_state() ahead of time, which then skips the
> > > whole pci_prepare_to_sleep() stuff.
> > If there's a general requirement to leave all devices in D0 when
> > hibernating, it would be nice to have have some documentation like an
> > ACPI spec reference.
>
> No, IIRC the ACPI spec even says that you must (or at least
> should) put devices into D3. But the buggy BIOS on some old
> laptops keels over when you do that. Hence we need this quirk.
Can we include a reference to this part of the ACPI spec and some
details on which laptops have this issue?
I'm a little bit wary of changing the PCI core in a generic-looking
way on the basis of some unspecified buggy old BIOS. That feels like
something we're likely to break in the future.
> > Or if this is some i915-specific thing, maybe a pointer to history
> > like a lore or bugzilla reference.
>
> The two relevant commits I can find are:
>
> commit 54875571bbfd ("drm/i915: apply the PCI_D0/D3 hibernation
> workaround everywhere on pre GEN6")
> commit ab3be73fa7b4 ("drm/i915: gen4: work around hang during
> hibernation")
Thanks, this feels like important history to include somewhere.
> > IIUC this is a cleanup that doesn't fix any known problem? The
> > overall diffstat doesn't make it look like a simplification, although
> > it might certainly be cleaner somehow:
>
> My main concern is that using pci_save_state() might cause the pci
> code to deviate from the normal path in more ways than just skipping
> the D0->D3 transition. And then we might end up constantly chasing
> after driver/pci changes in order to match its behaviour.
>
> Not to mention that having the pci_save_state() in the driver code
> is clearly confusing a bunch of our developers.
I'm all in favor of removing pci_save_state() from drivers when
possible. I take it that this doesn't fix a functional issue.
Bjorn
More information about the Intel-gfx
mailing list