Alan wrote:
@@ -5142,6 +5174,20 @@
        status = ata_chk_status(ap);
        if (unlikely(status & ATA_BUSY))
                goto idle_irq;
+               
+ if (unlikely(qc->tf.command == ATA_CMD_SET_FEATURES && + qc->tf.feature == SETFEATURES_XFER)) {
+               /* Let the timings change settle and the drive catch up as
+                  some hardware needs up to 10uS to get its brain back in
+                  gear. Taken from the workarounds in drivers/ide done by
+                  Matthew Faupel/Niccolo Rigacci */
+               for (i = 0; i < 10; i++) {
+                       if ((status & (ATA_BUSY | ATA_DRQ | ATA_ERR)) == 0)
+                               break;
+                       udelay(1);
+                       status = ata_chk_status(ap);
+               }


Looks like you should use ata_busy_wait() here, rather than reproducing the same code again.

        Jeff


-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to