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? 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.