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... -- coreboot mailing list: [email protected] http://www.coreboot.org/mailman/listinfo/coreboot

