无法从 D3 睡眠状态唤醒 pci 总线
Unable to wake pci bus form D3 sleep satate
在我的主板上(x86_64,Android Lollipop,内核:3.14),"pci bus" 进入 D3 睡眠状态,当我试图通过设置它唤醒它时D0 状态失败并显示消息:
错误日志:
拒绝更改电源状态,目前处于 D3。
在了解了pci架构之后,我开始知道我们不能将pci从D3hot初始化到D0,我们需要遵循类似的东西:
D3hot -> D0Uninitialized -> D0Initialized
但我不知道该怎么做,请帮我找到合适的解决方案
进一步调试后,我发现 pci 设备(即 D3 到 D0)的电源状态转换在 pci 驱动程序(即 pcieport)中请求时工作正常,但当我试图唤醒 pci 设备时通过面临上述问题的 iwlwifi 驱动程序,因为它无法将唤醒请求写入 pci 芯片。
任何帮助或任何线索将不胜感激。
经过大量研究我发现,如果任何设备想要使用 acpi 功能与 OS 通信,应该在 ACPI table.
中注册
在我的例子中,我的 wifi 芯片没有注册 ACPI table,因为它无法使用 ACPI 功能。
在我的主板上(x86_64,Android Lollipop,内核:3.14),"pci bus" 进入 D3 睡眠状态,当我试图通过设置它唤醒它时D0 状态失败并显示消息:
错误日志: 拒绝更改电源状态,目前处于 D3。
在了解了pci架构之后,我开始知道我们不能将pci从D3hot初始化到D0,我们需要遵循类似的东西: D3hot -> D0Uninitialized -> D0Initialized
但我不知道该怎么做,请帮我找到合适的解决方案
进一步调试后,我发现 pci 设备(即 D3 到 D0)的电源状态转换在 pci 驱动程序(即 pcieport)中请求时工作正常,但当我试图唤醒 pci 设备时通过面临上述问题的 iwlwifi 驱动程序,因为它无法将唤醒请求写入 pci 芯片。
任何帮助或任何线索将不胜感激。
经过大量研究我发现,如果任何设备想要使用 acpi 功能与 OS 通信,应该在 ACPI table.
中注册在我的例子中,我的 wifi 芯片没有注册 ACPI table,因为它无法使用 ACPI 功能。