From fe334602a83463aff59ae24c4b3e808d650a3c80 Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Fri, 2 Feb 2007 15:29:52 +0900 Subject: [PATCH] sata_inic162x: fix a few glitches in hardreset * Hardreset must not exit without actually performing reset regardless of link status. We're resetting the link after all. * Minor message update. * 150ms delay is meaningful iff link is online after reset is complete. Signed-off-by: Tejun Heo Signed-off-by: Jeff Garzik --- drivers/ata/sata_inic162x.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c index 170a10ad478f..c5335f422801 100644 --- a/drivers/ata/sata_inic162x.c +++ b/drivers/ata/sata_inic162x.c @@ -429,11 +429,6 @@ static int inic_hardreset(struct ata_port *ap, unsigned int *class) /* hammer it into sane state */ inic_reset_port(port_base); - if (ata_port_offline(ap)) { - *class = ATA_DEV_NONE; - return 0; - } - val = readw(idma_ctl); writew(val | IDMA_CTL_RST_ATA, idma_ctl); readw(idma_ctl); /* flush */ @@ -443,16 +438,17 @@ static int inic_hardreset(struct ata_port *ap, unsigned int *class) rc = sata_phy_resume(ap, timing); if (rc) { ata_port_printk(ap, KERN_WARNING, "failed to resume " - "link for reset (errno=%d)\n", rc); + "link after reset (errno=%d)\n", rc); return rc; } - msleep(150); - *class = ATA_DEV_NONE; if (ata_port_online(ap)) { struct ata_taskfile tf; + /* wait a while before checking status */ + msleep(150); + if (ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT)) { ata_port_printk(ap, KERN_WARNING, "device busy after hardreset\n");