[coreboot] elf payload legacybios - boots on v3 in qemu

Myles Watson mylesgw at gmail.com
Wed May 14 15:56:23 CEST 2008



> On Tue, May 13, 2008 at 08:48:59AM -0600, Myles Watson wrote:
> > Could we do something simple like not use the CMOS for Coreboot, but
> > use a place in the EBDA to be "CMOS"?  I realize that we won't be able
> > to set it permanently like real CMOS, but we could configure it from a
> > libpayload payload.  If we put the cmos section above the ata_s
> > structure it would be in a fixed place, which would probably help.
> 
> The inb/outb_cmos functions are used for other functions besides
> accessing nvram.  Redirecting these functions would cause the clock
> functions to cease working.

I'm surprised.  It seems like as long as we redirect them to storage that's
initialized correctly the BIOS wouldn't care where it was stored.

> Most of the uses of nvram in "legacybios" is as a mechanism to pass
> data from the emulator to the guest.
> 
> There are only two nvram variables that are read and written by
> "legacybios":
> 
> CMOS_RESET_CODE (0x0f) - this is used to implement some sort of
>     "resume" functionality.  However, since the bios doesn't implement
>     the corresponding "suspend", I'm not sure it's really useful.
> 
> CMOS_CENTURY (0x32) - this stores part of the date that doesn't fit in
>     the rtc - the '20' in 2008.  I suppose we could hard code this if
>     we really didn't want to store it in the nvram.
> 
> There are several nvram values that are only read by "legacybios":
> 
> CMOS_FLOPPY_DRIVE_TYPE (0x10) - this appears to be a standard - even
>     linux uses it.
> 
> CMOS_EQUIPMENT_INFO (0x14) - I think we can remove this dependency -
>     almost everything in it is already auto-detected.
> 
> CMOS_BIOS_DISKTRANSFLAG (0x39) - This controls how the bios maps disk
>     CHS calls to LBA.  I think this may be auto-detected - if not, it
>     can be passed in via coreboot.
> 
> CMOS_DISK_DATA (0x12)
> hd geometry (0x19 - 0x2c) - These settings can and should be
>     auto-detected from the ide drive.
> 
> CMOS_MEM_EXTMEM_LOW   (0x30)
> CMOS_MEM_EXTMEM_HIGH  (0x31)
> CMOS_MEM_EXTMEM2_LOW  (0x34)
> CMOS_MEM_EXTMEM2_HIGH (0x35)
>     - These are used as a mechanism for passing system memory size.
> 
> CMOS_BIOS_BOOTFLAG1 (0x38)
> CMOS_BIOS_BOOTFLAG2 (0x3d)
>     - These are used to control boot flags and boot order.

Great summary, thanks.

 
> So, I think "legacybios" should have a simple test at startup - when
> in bochs/qemu mode read the above nvram variables and store them in
> internal storage; when in coreboot mode gather the info from coreboot
> and store them in internal storage and avoid using nvram.

Yes.

Have you looked at libpayload at all?  I was looking at coreinfo, and it
seems to have access to all the information we need.

Thanks,
Myles





More information about the coreboot mailing list