On Fri, Feb 20, 2009 at 05:18:00PM -0500, Ward Vandewege wrote:
If I use seabios as a payload and leave CONFIG_BOOTMENU enabled, seabios hangs on boot - but it's not entirely dead as pushing num lock, caps lock or scroll lock results in this on the serial console:
i8042 ctr old=00000061 new=00000060 i8042 ctr old=00000061 new=00000060
I tracked the hang down to the line
while (get_keystroke(0) >= 0) ;
Okay - that's a new one. Something went wrong in the keyboard code. Can you increase the keyboard debug level by setting the following in src/config.h:
#define DEBUG_ISR_09 1 #define DEBUG_HDL_16 1
I wonder if something corrupted the BDA. Have you tried with option roms disabled?
If I disable CONFIG_BOOTMENU, seabios does not hang but things go pretty badly:
http://ward.vandewege.net/coreboot/m2a-vm/m2a-vm-seabios-no-menu.cap
The IRQs seem to be messed up, and there seem to be some serious SATA issues with the AHCI driver segfaulting and no sata drives being properly detected by the kernel.
The IRQs are probably messed up because the bios tables aren't being copied. Please apply the patch below to coreboot (after adjusting the memory size for your machine).
-Kevin
--- src/arch/i386/boot/tables.c (revision 3955) +++ src/arch/i386/boot/tables.c (working copy) @@ -43,8 +43,8 @@ unsigned long low_table_start, low_table_end, new_low_table_end; unsigned long rom_table_start, rom_table_end;
- rom_table_start = 0xf0000; - rom_table_end = 0xf0000; + rom_table_start = ((1024-32)*1024*1024) - 64*1024; + rom_table_end = rom_table_start; /* Start low addr at 16 bytes instead of 0 because of a buglet * in the generic linux unzip code, as it tests for the a20 line. */ @@ -68,9 +68,10 @@ post_code(0x96);
/* The smp table must be in 0-1K, 639K-640K, or 960K-1M */ - new_low_table_end = write_smp_table(low_table_end); // low_table_end is 0x10 at this point + rom_table_end = write_smp_table(rom_table_end); + rom_table_end = (rom_table_end+1023) & ~1023;
-#if HAVE_MP_TABLE==1 +#if 0 // HAVE_MP_TABLE==1 /* Don't write anything in the traditional x86 BIOS data segment, * for example the linux kernel smp need to use 0x467 to pass reset vector * or use 0x40e/0x413 for EBDA finding...