-----Original Message----- From: Kevin O'Connor [mailto:kevin@koconnor.net] Sent: Tuesday, February 17, 2009 9:23 PM To: Myles Watson Cc: coreboot@coreboot.org Subject: Re: [coreboot] slow load times
On Tue, Feb 17, 2009 at 07:51:46PM -0700, Myles Watson wrote:
Does it work consistently? If it still fails sometimes I'm confused on what it could be.
I'm not sure either. It's strange that SeaBIOS can load grub, but the kernel is confused later. Once it gets to the confused state, the
factory
kernel has to be loaded. A cold reboot isn't sufficient.
Hrmm. So SeaBIOS can consistently see the drives, but Linux can't?
I haven't dug into the driver enough to know the real answer. Linux can read things from the drive, modules get loaded, but it gets stuck continually trying to reset the drive when that driver is loaded. It may have something to do with a mode switch.
One more thing you can try - pull the latest SeaBIOS git and apply the patch below. This will dump all of the drive's identify information.
Sure. I expect that to be fine, since it seems fine when SeaBIOS comes up and reports the drives it finds, but no harm trying.
Thanks, Myles
-Kevin
--- a/src/ata.c +++ b/src/ata.c @@ -615,7 +615,7 @@ setup_translation(int driveid) static void extract_identify(int driveid, u16 *buffer) {
- dprintf(3, "Identify w0=%x w2=%x\n", buffer[0], buffer[2]);
hexdump(buffer, 512);
// Read model name char *model = ATA.devices[driveid].model;
@@ -753,7 +753,9 @@ ata_detect() break;
// Look for device
await_not_bsy(iobase1); outb(slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0, iobase1+ATA_CB_DH);
await_not_bsy(iobase1); outb(0x55, iobase1+ATA_CB_SC); outb(0xaa, iobase1+ATA_CB_SN); outb(0xaa, iobase1+ATA_CB_SC);