Commit 1244a19c authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik

[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: default avatarTejun Heo <htejun@gmail.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 30574b61
...@@ -736,8 +736,7 @@ static int ahci_softreset(struct ata_port *ap, unsigned int *class) ...@@ -736,8 +736,7 @@ static int ahci_softreset(struct ata_port *ap, unsigned int *class)
} }
/* check BUSY/DRQ, perform Command List Override if necessary */ /* check BUSY/DRQ, perform Command List Override if necessary */
ahci_tf_read(ap, &tf); if (ahci_check_status(ap) & (ATA_BUSY | ATA_DRQ)) {
if (tf.command & (ATA_BUSY | ATA_DRQ)) {
rc = ahci_clo(ap); rc = ahci_clo(ap);
if (rc == -EOPNOTSUPP) { if (rc == -EOPNOTSUPP) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment