[Bug 595822] Re: Hibernate does not power off the machine

Colin King 595822 at bugs.launchpad.net
Wed Jul 7 09:22:46 UTC 2010


The ACPI _PTS method (Prepare To Sleep) is proving to be the fault.  For
example, doing a shutdown the kernel executes
acpi_enter_sleep_state_prep() and this executes the ACPI _PTS method
from where it hangs and never returns.  Section 7.3.2 of the ACPI
specification states:

The _PTS control method is executed by the OS during the sleep transition process for S1, S2, S3, S4, and
for orderly S5 shutdown. The sleeping state value (For example, 1, 2, 3, 4 or 5 for the S5 soft-off state) is
passed to the _PTS control method. This method is called after OSPM has notified native device drivers of
the sleep state transition and before the OSPM has had a chance to fully prepare the system for a sleep state
transition. Thus, this control method can be executed a relatively long time before actually entering the
desired sleeping state

_PTS must return control to the OS. The fact that the machine hangs at
this point due to a bug in the ACPI AML code and/or the way it operates
with the embedded controller.

For a shutdown scenario,  _PTS should return so that the OS can execute
the ACPI _SST method and continue the shutdown.

I've disassembled the ACPI DSDT table and the AML code that implements
_PTS is as follows:

    Method (_PTS, 1, NotSerialized)
    {
        Store (Arg0, P80H)
        \_SB.PCI0.LPC0.H_EC.ECSV (0x01)
        \_SB.PCI0.LPC0.H_EC.ECSV (0x03)
    }

This looks dubious to me. The Method stores it's S state (argument0)
into the debug port (port 0x80) and then executes the ECSV method, and
I'm pretty sure it should be passing the S state down to the chain
rather than just stuffing it into a debug port.

As it is, this is the root cause to why S3, S4 and shutdown don't work.
The _PTS method is broken and the only way to fix the machine is to fix
the ACPI code.

Sorry to bring bad news.

Colin

-- 
Hibernate does not power off the machine
https://bugs.launchpad.net/bugs/595822
You received this bug notification because you are a member of Kernel
Bugs, which is subscribed to linux in ubuntu.




More information about the kernel-bugs mailing list