On Thu, Apr 06, 2006 at 12:44:30PM -0400, Jeff Garzik wrote: > >+ > >+ if (ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT)) { > >+ reason = "device not ready"; > >+ goto err; > >+ } > >+ > >+ /* SStatus is a bit sluggish (reports 0) on sil24, wait for it */ > >+ sil24_poll_register(port + PORT_SSTATUS, 0xf, 0x0, 10, 100); > > Its weird to poll BSY before polling SStatus. > It turned out that the above delay is not enough. SStatus oscillates between zero and valid status for short duration after hardreset resulting in weird messages like 'ata2: SATA link up <unknown> (SStatus 0 Scontrol 310)". I've added unconditional msleep(100) right afer hardreset and removed this code. > > >+ /* no classification, just return */ > > bad comment? How about... /* Sil24 hardreset doesn't report device signature, leave * classes[] alone. */ ? > >+ return 0; > > > >- /* sil24 doesn't report device signature after hard reset */ > >- return sata_std_hardreset(ap, &dummy_class); > >+ err: > >+ printk(KERN_ERR "ata%u: hardreset failed (%s)\n", ap->id, reason); > >+ return -EIO; > > } > > > > static int sil24_probe_reset(struct ata_port *ap, unsigned int *classes) > Thanks. -- tejun - : send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html