[coreboot] issues with seabios on the m2a-vm

Kevin O'Connor kevin at koconnor.net
Tue Feb 24 03:06:01 CET 2009

On Mon, Feb 23, 2009 at 05:13:12PM -0500, Ward Vandewege wrote:
> On Fri, Feb 20, 2009 at 10:41:17PM -0500, Kevin O'Connor wrote:
> > 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).
> The patch you sent assumed one GB of ram, right? I reduced the amount of ram
> in the system to 1GB.

Oh, you don't need to reduce memory.  Ideally, one would change the
value in tables.c to reflect the top of memory for the machine, but
even that isn't strictly necessary.

>The patch does not appear to help.

The patch didn't take:

Writing IRQ routing tables to 0xf0000...write_pirq_routing_table done.
ACPI: Writing ACPI tables at f0400...
ACPI:    * DSDT @ 000f0832 Length 267a
Payload is overwriting Coreboot tables.
Attempting to find coreboot table
init SMBIOS tables
Found 2 cpu(s)

Coreboot should have reported addresses in high-memory and SeaBIOS
should have reported something like:

Copying PIR from 3dff0000 to 000fad30
Copying ACPI RSDP from 3dff0400 to 000fade0

after the "Attempting to find coreboot table" report.

Did you rebuild from scratch after patching coreboot?  For example, I
use the following for epia-cn:

cd ~/src/coreboot/coreboot-v2/targets ; rm -r via/epia-cn/via_epia_cn ; ./buildtarget via/epia-cn/ ; cd via/epia-cn/via_epia_cn ; make ; cat ~/src/coreboot/tiny/tiny-cn/video.bios.bin coreboot.rom > coreboot.final.rom

> Logs here:
> Boot menu enabled (keeps printing the debug output indefinitely):
>   http://ward.vandewege.net/coreboot/m2a-vm/m2a-vm-seabios-menu-extra-kbd-logging-tables-patch.cap

Okay - I'm at a loss to explain what's going on.  I wonder if there is
a compiler bug.  Can you place the out/rom16.o and out/rom32.o files
somewhere where I can grab them?  Also, the patch below will help with


--- a/src/util.c
+++ b/src/util.c
@@ -193,10 +193,12 @@ usleep(u32 usec)
 static int
+    dprintf(1, "check_for_keystroke\n");
     struct bregs br;
     memset(&br, 0, sizeof(br));
     br.ah = 1;
     call16_int(0x16, &br);
+    dprintf(1, "check_for_keystroke fl=%x\n", br.flags);
     return !(br.flags & F_ZF);
@@ -204,9 +206,11 @@ check_for_keystroke()
 static int
+    dprintf(1, "get_raw_keystroke\n");
     struct bregs br;
     memset(&br, 0, sizeof(br));
     call16_int(0x16, &br);
+    dprintf(1, "get_raw_keystroke key=%x\n", br.ah);
     return br.ah;
@@ -215,10 +219,13 @@ int
 get_keystroke(int msec)
     for (;;) {
+        dprintf(1, "get_keystroke 1\n");
         if (check_for_keystroke())
             return get_raw_keystroke();
+        dprintf(1, "get_keystroke 2\n");
         if (msec <= 0)
             return -1;
+        dprintf(1, "get_keystroke 3 msec=%d\n", msec);
         msec -= 50;

More information about the coreboot mailing list