[coreboot] issues with seabios on the m2a-vm

Kevin O'Connor kevin at koconnor.net
Sat Feb 21 04:41:17 CET 2009


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...




More information about the coreboot mailing list