On Wed, Sep 14, 2011 at 07:45:59AM -0400, Amos Kong wrote:
The size of bios.bin compiled from seabios
only apply patch1: 256K
only apply patch2: 128K
patch1: add 6 slot(only slot6 has 8 funcs) to the table
can hotplug/hot-remove a multifunc device to slot 6 successfully
patch2: add 31 slot(with 8 funcs) to the table
could not boot up guest.
I found there is a special process for large bios.bin in qemu,
problem maybe exist here, I'm driving into it...
/* map the last 128KB of the BIOS in ISA space */
isa_bios_size = bios_size;
if (isa_bios_size > (128 * 1024))
isa_bios_size = 128 * 1024;
This is probably a regression since seabios commit 87b533bf. Prior to
that commit, seabios did not mark the early 32bit initialization code
as init code. However, a side effect of marking that code
(handle_post) as init code is that it is more likely the linker could
place the code at an address less than 0xe0000.
I'm guesing the patch below (just a hack) would cover up the issue.
@@ -336,7 +336,7 @@ reloc_init(void)
// Start of Power On Self Test (POST) - the BIOS initilization phase.
// This function does the setup needed for code relocation, and then
// invokes the relocation and main setup code.
@@ -356,6 +356,14 @@ handle_post(void)
// Allow writes to modify bios area (0xf0000)
+ void handle_post2(void);
HaveRunPost = 1;
// Detect ram and setup internal malloc.