Semi-working patch for amd64 suspend/resume

Alexander Motin mav at FreeBSD.org
Sun Nov 30 12:10:57 PST 2008


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


More information about the freebsd-amd64 mailing list