[SeaBIOS] Proper support for PCI-based option rom loading (was Re: [Qemu-devel] Re: qdev property bug?)

Anthony Liguori anthony at codemonkey.ws
Tue Dec 15 18:35:51 CET 2009

Avi Kivity wrote:
> On 12/15/2009 04:20 PM, Anthony Liguori wrote:
>> Anthony Liguori wrote:
>>> The bios gets mapped in 0xe0000 .. 0x100000 so if SeaBIOS fills the 
>>> 0xc0000-0xf0000 space it will write over half of the bios.
>> I'm a little confused by this.  SeaBIOS seems to assume that it only 
>> has to deal with the 0xf0000 .. 0x100000 space as the bios which is 
>> certainly true (i don't think there's anything special about the 
>> 0xe0000 .. 0xf0000 region).
>> I'm not sure why we load the 128K worth of bios instead of just 
>> loading 64K.
> bochs bios required all 128kB, so this is probably a leftover.

This is apparently well defined in the PIIX spec.  There is a bit of a 
difference between the lower half and upper half of the BIOS region 
though and I expect this is part of what the problem is.  FYI, the 
following patch works.  Surprisingly, we only need to restore the 
0xe8000..0xe8fff region.  Still trying to understand what's happening.

diff --git a/src/shadow.c b/src/shadow.c
index f0f97c5..860f461 100644
--- a/src/shadow.c
+++ b/src/shadow.c
@@ -29,7 +29,8 @@ __make_bios_writable(u16 bdf)
     int clear = 0;
     int i;
     for (i=0; i<6; i++) {
+        /* need to copy 0xe8000 bios region for qemu */
+        if (i==5) {
             int reg = pci_config_readb(bdf, 0x5a + i);
             if ((reg & 0x11) != 0x11) {
                 // Need to copy optionroms to work around qemu 


Anthony Liguori

More information about the SeaBIOS mailing list