Skip to contentSkip to conversation

Acer TM 661 does not wake up from STR

DISCUSSION Mirko Werneke 2 participants 4 messages Aug 25, 2004 – Aug 26, 2004 2 messages not in the archive ACPI

lore
Share & tools
lore
#0 lore raw

Hi list!

I'm using kernel 2.6.8.1 with ACPI 20040715

I've a really big problem with my Acer Travelmate 661 laptop: Once suspended to ram, it won't wake up again! The laptop seems to suspend corretly (no error messages while suspending; Power LED switches from green to orange). But after a key press to wake it up the only reaction the laptop shows is switching the power led to green again. Nothing more happens. I've to press the power button for 4 seconds to switch the laptop completely off. After that i can reboot normally.

Besides from playing around withh several parameters ("noapic", "pci=routeirq", "acpi_sleep=s3_bios"/"s3_mode") i tried with help from Stefan Dösinger the following:

I compiled a minimal kernel (without usb/wlan drivers, etc.) with a little patch in wakeup.S.
I inserted after .code16 the line "lcall $0xffff,$0". This should - according to Stefan - immediatly call the BIOS reset code after the kernel gets control back from BIOS. But the situation did not change (no "automatic" reboot after resume). So we came to the conclusion, that the kernel does not get the control back when the system wakes up. So i think that there is a problem with the BIOS or the kernel does something wrong while suspending.

Any ideas how i can get a sign of life after waking up the laptop or continiue debug the problem?

Let me know if you need more information.

Regards
Mirko Werneke

-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media 100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33 Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285

A message that is not in the archive (sent off-list or not yet received): [email protected]

#2 lore raw
Quoted 7 lines · Mirko Werneke

I've a really big problem with my Acer Travelmate 661 laptop: Once suspended to ram, it won't wake up again! The laptop seems to suspend corretly (no error messages while suspending; Power LED switches from green to orange). But after a key press to wake it up the only reaction the laptop shows is switching the power led to green again. Nothing more happens. I've to press the power button for 4 seconds to switch the laptop completely off. After that i can reboot normally.

Besides from playing around withh several parameters ("noapic", "pci=routeirq", "acpi_sleep=s3_bios"/"s3_mode") i tried with help from Stefan Dösinger the following:

I compiled a minimal kernel (without usb/wlan drivers, etc.) with a little patch in wakeup.S.
I inserted after .code16 the line "lcall $0xffff,$0". This should - according to Stefan - immediatly call the BIOS reset code after the kernel gets control back from BIOS. But the situation did not change (no "automatic" reboot after resume). So we came to the conclusion, that the kernel does not get the control back when the system wakes up. So i think that there is a problem with the BIOS or the kernel does something wrong while suspending.

So the BIOS is not calling the wake vector. I've been wondering about several deviations from the spec in the sleep path (hwsleep.c).

I think _GTS should be run immediately before writing the sleep value in EnterSleepState (not Prep). Section 7.3.3: "OSPM will set the sleep enable (SLP_EN) bit in the PM1 control register immediately following the execution of the _GTS control method without performing any other physical I/O or allowing any interrupt servicing."

I'm suspicious of writing the SLP_TYP and SLP_EN on separate passes. The sample code in the spec (7.3.4) writes this in one pass. If there are systems that require multi-pass write, we should leave this as an option, disabled by default, since I think most systems do this correctly.

We should check the return value of \_WAK and at least print the result code if non-zero. (7.3.5)

One non-standard thing is that I think LeaveSleepState should read values from \\_S0 and if this method is present, write those to slp reg A/B in the resume path.

Signature · 8 lines
Nate


-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media
100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285

A message that is not in the archive (sent off-list or not yet received): [email protected]

#4 lore raw
Quoted 8 lines · Nate Lawson
Quoted 3 lines · Mirko Werneke

I compiled a minimal kernel (without usb/wlan drivers, etc.) with a little patch in wakeup.S.
I inserted after .code16 the line "lcall $0xffff,$0". This should - according to Stefan - immediatly call the BIOS reset code after the kernel gets control back from BIOS. But the situation did not change (no "automatic" reboot after resume). So we came to the conclusion, that the kernel does not get the control back when the system wakes up. So i think that there is a problem with the BIOS or the kernel does something wrong while suspending.

So the BIOS is not calling the wake vector.

But why? Because i don't know very much about acpi and there is no error message i simply don't know where to start to solve the problem.

Quoted 4 lines

I've been wondering about several deviations from the spec in the sleep path (hwsleep.c).

I think _GTS should be run immediately before writing the sleep value in EnterSleepState (not Prep). [...] I'm suspicious of writing the SLP_TYP and SLP_EN on separate passes. The sample code in the spec (7.3.4) writes this in one pass.

Do you think that this deviations are responsible for the problems i encounter? My laptop does not have a _GTS method and writing SLP_TYP and SLP_EN in one pass does not make any difference.

best wishes
Mirko

-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media 100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33 Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285

#5 lore raw
In reply to a message not in the archive

I forgot that we also need to call \_BFS immediately, not after _SST and the S0 write. (I was mistaken in my previous email, acpi-ca does do the \_S0 stuff).

7.3.1: "_BFS is an optional control method. If it exists, OSPM must execute the _BFS method immediately following wake from any sleeping state S1, S2, S3, or S4. _BFS allows ACPI system firmware to perform any required system specific functions when returning a system sleep state. OSPM will execute the _BFS control method before performing any other physical I/O or enabling any interrupt servicing upon returning from a sleeping state."

Signature · 8 lines
Nate


-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media
100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285