aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/ahci.c
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2006-11-01 03:19:18 -0500
committerJeff Garzik <jeff@garzik.org>2006-11-01 04:20:45 -0500
commit1244a19cde42c268aa159d264fc2df072a3ff82f (patch)
tree8ec73ccd9bc59b221d8bd9b315656ad3b521cfb6 /drivers/ata/ahci.c
parent30574b61611ccd29677989097f8c8a5d9a73d873 (diff)
[PATCH] ahci: fix status register check in ahci_softreset
ahci_softreset() used to use ahci_tf_read() which reads D2H_REG area to check for the Status register. However, this area is zeroed on initialization and not set by initial signature FIS. Replace it with ahci_check_status(). This bug prevented CLO code from being activated whenever BSY and/or DRQ is set prior to softreset. This fix makes AHCI_FLAG_RESET_NEEDS_CLO flag redundant. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata/ahci.c')
-rw-r--r--drivers/ata/ahci.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index cef2e70d64f8..988f8bbd14ff 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -736,8 +736,7 @@ static int ahci_softreset(struct ata_port *ap, unsigned int *class)
736 } 736 }
737 737
738 /* check BUSY/DRQ, perform Command List Override if necessary */ 738 /* check BUSY/DRQ, perform Command List Override if necessary */
739 ahci_tf_read(ap, &tf); 739 if (ahci_check_status(ap) & (ATA_BUSY | ATA_DRQ)) {
740 if (tf.command & (ATA_BUSY | ATA_DRQ)) {
741 rc = ahci_clo(ap); 740 rc = ahci_clo(ap);
742 741
743 if (rc == -EOPNOTSUPP) { 742 if (rc == -EOPNOTSUPP) {