linux-kernelpower-managementpci-bus

Unable to wake pci bus form D3 sleep satate


On my board (x86_64, Android Lollipop, kernel: 3.14), "pci bus" goes in D3 sleep state and when I'm trying to wake it up by setting it D0 state it's failing with message:

Error log: Refused to change power state, currently in D3.

After going through pci architecture, I came to know that we cannot bring up pci from D3hot to D0 initialized, we need to follow something like: D3hot -> D0Uninitialized -> D0Initialized

But I'm unable to figure out how to do that, please help me to find out appropriate solution

After debugging further, I figured out that, power state transition for pci device (i.e. D3 to D0) is working fine when it's requested within pci driver (i.e. pcieport) but as I'm trying to wake up pci device through iwlwifi driver facing above mentioned problem, as it's not able to write wake request to pci chip.

Any help or any clue will be much appreciated.


Solution

  • After a lot of research I found that, If any device wants to use acpi features to communicate to OS, should be registered in ACPI table.

    In my case my wifi chip was not registered with ACPI table, because of it was unable to use ACPI features.