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++) { - if (CONFIG_OPTIONROMS_DEPLOYED) { + /* 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 implementation
Regards,
Anthony Liguori