libata: implement ata_wait_after_reset()
authorTejun Heo <htejun@gmail.com>
Tue, 16 Oct 2007 21:21:24 +0000 (14:21 -0700)
committerJeff Garzik <jeff@garzik.org>
Mon, 29 Oct 2007 10:15:27 +0000 (06:15 -0400)
commit88ff6eafbb2a1c55f0f0e2e16d72e7b10d8ae8a5
treead6ab294a4f725540bfa24b7a451273b99fa71c1
parent054a5fbaceb2eb3a31ea843c1cf0b8e10b91478c
libata: implement ata_wait_after_reset()

On certain device/controller combination, 0xff status is asserted
after reset and doesn't get cleared during 150ms post-reset wait.  As
0xff status is interpreted as no device (for good reasons), this can
lead to misdetection on such cases.

This patch implements ata_wait_after_reset() which replaces the 150ms
sleep and waits upto ATA_TMOUT_FF_WAIT if status is 0xff.
ATA_TMOUT_FF_WAIT is currently 800ms which is enough for
HHD424020F7SV00 to get detected but not enough for Quantum GoVault
drive which is known to take upto 2s.

Without parallel probing, spending 2s on 0xff port would incur too
much delay on ata_piix's which use 0xff to indicate empty port and
doesn't have SCR register, so GoVault needs to wait till parallel
probing.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/ahci.c
drivers/ata/libata-core.c
drivers/ata/pata_scc.c
drivers/ata/sata_inic162x.c
include/linux/libata.h