diff options
author | Tejun Heo <htejun@gmail.com> | 2007-02-02 15:29:52 +0900 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-02-09 17:39:39 -0500 |
commit | fe334602a83463aff59ae24c4b3e808d650a3c80 (patch) | |
tree | 044c48cd68d7b14f270310ab68c9f710c00b78b9 /drivers | |
parent | 34fee227dd13af593be599b19683464ac4dd4c8b (diff) | |
download | op-kernel-dev-fe334602a83463aff59ae24c4b3e808d650a3c80.zip op-kernel-dev-fe334602a83463aff59ae24c4b3e808d650a3c80.tar.gz |
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 <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ata/sata_inic162x.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c index 170a10a..c5335f4 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"); |