On Sat, Jan 16, 2010 at 12:06:01PM +0100, congedete@voila.fr wrote:
Hello Kevin,
I can't give you the full log for the keyboard problem. I think this is a timeout issue: when I run Seabios in debuglevel=8, no problem, but if debuglevel=1 or even 4, my keyboard don't want to initialize most of the time. So, I suppose that sending debug data to the port gives time to the keyboard to initialize correctly.
The attachment files are the logs you asked me reporting the Vista booting error. Do you use DMA since version 0.5.1 to boot ?
Lets try a couple of things. For the keyboard, can you see if this change improves things? In either case, can you send the output it produces?
--- a/src/ps2port.c +++ b/src/ps2port.c @@ -62,7 +62,7 @@ i8042_flush(void) return 0; udelay(50); u8 data = inb(PORT_PS2_DATA); - dprintf(7, "i8042 flushed %x (status=%x)\n", data, status); + dprintf(1, "i8042 flushed %x (status=%x)\n", data, status); }
dprintf(1, "i8042 timeout on flush\n");
Your ps2 port has stale data in it, and I think that is causing the init process to get confused.
For the DMA issue, it looks like your drive isn't ready for it. Can you see if this change improves things?
--- a/src/ata.c +++ b/src/ata.c @@ -856,6 +856,15 @@ init_drive_ata(struct drive_s *dummy, u16 *buffer) // Register with bcv system. add_bcv_internal(drive_g);
+ // XXX - set dma mode + struct ata_pio_command cmd; + memset(&cmd, 0, sizeof(cmd)); + cmd.command = ATA_CMD_SET_FEATURES; + cmd.feature = 0x03; + cmd.sector_count = 0x22; // mwDMA mode 2 + ret = ata_cmd_nondata(drive_g, &cmd); + dprintf(1, "set drive=%p dma=%d\n", drive_g, ret); + return drive_g; }
Thanks, -Kevin