sata_inic162x: fix a few glitches in hardreset
authorTejun Heo <htejun@gmail.com>
Fri, 2 Feb 2007 06:29:52 +0000 (15:29 +0900)
committerJeff Garzik <jeff@garzik.org>
Fri, 9 Feb 2007 22:39:39 +0000 (17:39 -0500)
* 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 <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/sata_inic162x.c

index 170a10ad478ffa923d27c143d049099dff4ef361..c5335f422801f85200003812ba82aa0f9a9b23a4 100644 (file)
@@ -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");