diff options
-rw-r--r-- | drivers/ata/libata-core.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 89fd0e9ed746..fd332612d64a 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -3373,14 +3373,20 @@ void ata_wait_after_reset(struct ata_port *ap, unsigned long deadline) | |||
3373 | * to clear 0xff after reset. For example, HHD424020F7SV00 | 3373 | * to clear 0xff after reset. For example, HHD424020F7SV00 |
3374 | * iVDR needs >= 800ms while. Quantum GoVault needs even more | 3374 | * iVDR needs >= 800ms while. Quantum GoVault needs even more |
3375 | * than that. | 3375 | * than that. |
3376 | * | ||
3377 | * Note that some PATA controllers (pata_ali) explode if | ||
3378 | * status register is read more than once when there's no | ||
3379 | * device attached. | ||
3376 | */ | 3380 | */ |
3377 | while (1) { | 3381 | if (ap->flags & ATA_FLAG_SATA) { |
3378 | u8 status = ata_chk_status(ap); | 3382 | while (1) { |
3383 | u8 status = ata_chk_status(ap); | ||
3379 | 3384 | ||
3380 | if (status != 0xff || time_after(jiffies, deadline)) | 3385 | if (status != 0xff || time_after(jiffies, deadline)) |
3381 | return; | 3386 | return; |
3382 | 3387 | ||
3383 | msleep(50); | 3388 | msleep(50); |
3389 | } | ||
3384 | } | 3390 | } |
3385 | } | 3391 | } |
3386 | 3392 | ||