Re: Potential issue with pci_prepare_to_sleep if there's no platform support for D3cold transition

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Apr 22, 2025 at 8:28 AM Lukas Wunner <lukas@xxxxxxxxx> wrote:
>
> [cc += Rafael, linux-acpi]
>
> On Mon, Apr 21, 2025 at 10:05:59PM +0200, Heiner Kallweit wrote:
> > If there's no platform support for transition to D3cold, then
> > pci_set_power_state(dev, D3cold) still returns 0, even though
> > power state is transitioned to D3hot only. We called
> > pci_enable_wake(dev, D3cold, wakeup) before, therefore PME for
> > D3hot may not be enabled. Is this a bug?

On platforms using ACPI, no it isn't.

Internally, pci_enable_wake() evaluates _DSW and it doesn't
distinguish between D3hot and D3cold as per the spec.

> > Background:
> > In __pci_set_power_state we have the following:
> >
> > error = pci_set_low_power_state(dev, PCI_D3hot, locked);
> > if (pci_platform_power_transition(dev, PCI_D3cold))
> >       return error;
> >
> > The acpi_pci_set_power_state() stub returns -ENODEV.
> > Therefore, if error=0,  __pci_set_power_state() will
> > return 0 if pci_platform_power_transition() fails.
>
> pci_prepare_to_sleep() calls pci_target_state() right at the top.
>
> If wakeup is supported and enabled, pci_target_state() is supposed
> to find the deepest power state supporting wakeup.  If D3cold doesn't
> support wakeup, D3hot or a shallower state is returned.
>
> Hence I don't quite understand how the scenario you're describing
> could occur in practice.  Are you seeing actual issues and have tracked
> them down to incorrect handling in pci_prepare_to_sleep()?





[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]
  Powered by Linux