Commit 09c7ad79 authored by Alan Cox's avatar Alan Cox Committed by Jeff Garzik

[PATCH] libata: Fix a drive detection problem

The current code follows the spec but uses an overlong delay. This would
be great if the hardware did. Several vendors however forget the D7
pulldown. Fortunately 0xFF isnt a sane reset state so we can use it to
skip detection as is done in drivers/ide. (ie this is a tested solution
over a long time)
Signed-off-by: default avatarAlan Cox <alan@redhat.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 7c74ffd0
...@@ -2001,9 +2001,19 @@ static unsigned int ata_bus_softreset(struct ata_port *ap, ...@@ -2001,9 +2001,19 @@ static unsigned int ata_bus_softreset(struct ata_port *ap,
* status is checked. Because waiting for "a while" before * status is checked. Because waiting for "a while" before
* checking status is fine, post SRST, we perform this magic * checking status is fine, post SRST, we perform this magic
* delay here as well. * delay here as well.
*
* Old drivers/ide uses the 2mS rule and then waits for ready
*/ */
msleep(150); msleep(150);
/* Before we perform post reset processing we want to see if
the bus shows 0xFF because the odd clown forgets the D7 pulldown
resistor */
if (ata_check_status(ap) == 0xFF)
return 1; /* Positive is failure for some reason */
ata_bus_post_reset(ap, devmask); ata_bus_post_reset(ap, devmask);
return 0; return 0;
......
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