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-logg...
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 debugging.
-Kevin
--- a/src/util.c +++ b/src/util.c @@ -193,10 +193,12 @@ usleep(u32 usec) static int check_for_keystroke() { + 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 get_raw_keystroke() { + 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); usleep(50*1000); msec -= 50; }