]> git.hungrycats.org Git - linux/commitdiff
[libata] fix bugs in SATA reset code path
authorJeff Garzik <jgarzik@redhat.com>
Fri, 31 Oct 2003 04:54:37 +0000 (23:54 -0500)
committerJeff Garzik <jgarzik@redhat.com>
Fri, 31 Oct 2003 04:54:37 +0000 (23:54 -0500)
drivers/scsi/libata-core.c

index 06259aedd262b3f1d97f1fb6acad819e444a58eb..4906684e1f02588a26d9f4b1dc7a8d8136baf64b 100644 (file)
@@ -1086,6 +1086,11 @@ void sata_phy_reset(struct ata_port *ap)
        if (ap->flags & ATA_FLAG_PORT_DISABLED)
                return;
 
+       if (ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT)) {
+               ata_port_disable(ap);
+               return;
+       }
+
        ata_bus_reset(ap);
 }
 
@@ -1339,9 +1344,13 @@ void ata_bus_reset(struct ata_port *ap)
                outb(ap->ctl, ioaddr->ctl_addr);
 
        /* determine if device 0/1 are present */
-       dev0 = ata_dev_devchk(ap, 0);
-       if (slave_possible)
-               dev1 = ata_dev_devchk(ap, 1);
+       if (ap->flags & ATA_FLAG_SATA_RESET)
+               dev0 = 1;
+       else {
+               dev0 = ata_dev_devchk(ap, 0);
+               if (slave_possible)
+                       dev1 = ata_dev_devchk(ap, 1);
+       }
 
        if (dev0)
                devmask |= (1 << 0);