[SeaBIOS] S3 resume is broken on QEMU

Gleb Natapov gleb at redhat.com
Fri Jan 20 15:17:09 CET 2012


On Fri, Jan 20, 2012 at 08:48:39AM -0500, Kevin O'Connor wrote:
> On Fri, Jan 20, 2012 at 01:50:15PM +0200, Gleb Natapov wrote:
> > On Thu, Jan 19, 2012 at 08:40:45PM -0500, Kevin O'Connor wrote:
> > > Further, no spec I've seen says an option rom must handle being
> > > executed a second time.  The option rom can self modify - re-running a
> > > modified rom may crash it.  Thinking about this further, the vgabios
> > > in the seabios repo wont handle being executed twice properly (which,
> > > of course, should be fixed).
> > > 
> > Not sure how thing works on real HW, but on QEMU S3 actually invokes HW
> > reset. The same reset that is done on reboot, so option rom should be
> > reset to its pristine state. I expect that on real HW things should be
> > similar if device powered down on S3.
> 
> I'm 99% sure that wont work.  Option roms have to be copied from PCI
You 99% sure it wont work on real HW or on QEMU? IIRC QEMU puts vgabios
into 0xc0000 directly.

> bars to low memory.  If seabios copies the option rom again (to reset
> its state) then all option roms would need to be copied (the initial
> option rom size could be larger than the final option rom size).
> Running all option roms again is surely going to break something.
> 
I do not think I ever talked about running all option roms :)

> > > To be clear, I really don't know the exact interactions between an off
> > > the shelf BIOS and a "real world" vga bios on resume.  If someone can
> > > find a spec or document clarifying that - I'd be happy to conform to
> > > it.
> > > 
> > I am not asking to change how Seabios works on real HW. What it does
> > currently on real HW has a lot of sense and models behaviour of real
> > BIOSes as far as I can tell.
> 
> I understand your point about requesting QEMU specific code.  I really
> prefer to keep things general where ever possible, however.  I think
> both projects are better off if the most code possible can be shared.
> If QEMU *always* needed this setting, I could see adding it to the
> init phase of seabios. 
I think we can do both. Share the code and be QEMU specific. We can do
it like this:

S3ResumeVgaInit = romfile_loadint("etc/s3-resume-vga-init", !CONFIG_COREBOOT);

This way default will be different on QEMU and if QEMU will ever need to
disable the option (for vga path through may be) it will be able to do
so.
>                         However, Windows doesn't seem to need it, and
> it's unclear what VGA pass-through would require (though granted, that
> has many other hurdles).
> 
Windows is actually smart. It knows that it can support S3 resume on
generic VGA so it does not allow you to do S3 suspend when one is in
use. We managed to trick WindowsXP + cirrus to allow S3 suspend by DSDT
magic, but after resume GUI is not usable. Still good enough for running
WHQL. The only way S3 works on all Windowses is by using QXL device and
driver that supports S3.

--
			Gleb.



More information about the SeaBIOS mailing list