Re: Semi-working patch for amd64 suspend/resume

[ Available lists | Index of freebsd-acpi | Month of Nov 2008 | Week of 30 Nov 2008 | Raw email | View thread | Wrap long lines | Reply | Tag ]
From
Alexander Motin <mav@FreeBSD.org>
Date
30 Nov 2008 20:10:57
Subject
Re: Semi-working patch for amd64 suspend/resume
Message-ID
4932F34C.1040804@FreeBSD.org


[ Hide this part ]
Hi.

Alexander Motin wrote:
> Jung-uk Kim wrote:
>> I was working on suspend/resume support for amd64 and this is the
>> result. It works with a modified QEMU (QEMU does not support S3) but
>> real boxes that I have don't seem to like it (e.g., broken BIOSes).
>> If there is someone interested in finishing it off or giving it a try,
>> the patch is here:
>>
>> http://people.freebsd.org/~jkim/amd64_suspend.diff
>
> I have tried it on my Acer TM6292. S1/S2 are unsupported. On S3 system
> successfully got down, but on wakeup button, two seconds after power up,
> even without video initialization, it shut down, reset and then started
> usual boot. I have tried both original and updated BIOS, without any
> difference.
>
> Can I give you any other help?

I have spent a day investigating the problem. I was inserting empty
infinite loop into the different points of wakeup process trying to find
the place where system reboots. I just haven't found any other feedback
channel as video is not initialized and beeper is not working for some
reason.

As result, I have found, that if I am inserting:
qqq:

jmp qqq
lines before line 98 of acpi_switch.S:
movl $MSR_MTRRdefType, %ecx

movl WAKEUP_CTX(mtrr), %eax

wrmsr
system hangs, but if I insert it just after them - system reboots.

With just commenting this three lines I was able to get successful
suspend/resume with UP amd64 kernel!!!

Here is problems I still have now:
- SMP kernel resume is not working, system reboots while doing
acpi_wakeup_cpus();
- SATA controller does not resumes correctly, it dies for some reason,
reporting timeouts on any request;
- text mode video does not restores on resume, while Xorg graphic one
does. hw.acpi.reset_video=1 does not help, it just hanging resume process.

--
Alexander Motin

Elapsed time: 0.727 seconds