The patch titled VIA PATA fails on some ATAPI drives has been added to the -mm tree. Its filename is via-pata-fails-on-some-atapi-drives.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: VIA PATA fails on some ATAPI drives From: matthieu castet <castet.matthieu@xxxxxxx> I tried the 2.6.17-rc6-mm2 kernel with PATA VIA. The via controller still fails to set xfermode for an ATAPI drive plugged on a via controller (vt8235). Now only this drive is disabled instead both device on the same port. But the libata core tries various speed for the failling drive and sets this speed also for the good device. In my case, the ata core starts with UDMA/33, then tries UDMA/25 and finaly PIO0. And at the end ata4.00 is at PIO0 and ata4.01 disabled. Why not changing only the speed of ata4.01 ? I make a patch that seem to make work the drive. I don't know if is the correct thing to do. Cc: Alan Cox <alan@xxxxxxxxxxxxxxxxxxx> Cc: Jeff Garzik <jeff@xxxxxxxxxx> Cc: Tejun Heo <htejun@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- drivers/scsi/libata-core.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff -puN drivers/scsi/libata-core.c~via-pata-fails-on-some-atapi-drives drivers/scsi/libata-core.c --- a/drivers/scsi/libata-core.c~via-pata-fails-on-some-atapi-drives +++ a/drivers/scsi/libata-core.c @@ -4672,6 +4672,7 @@ inline unsigned int ata_host_intr (struc struct ata_queued_cmd *qc) { u8 status, host_stat = 0; + int i; VPRINTK("ata%u: protocol %d task_state %d\n", ap->id, qc->tf.protocol, ap->hsm_task_state); @@ -4718,9 +4719,25 @@ inline unsigned int ata_host_intr (struc } /* check altstatus */ - status = ata_altstatus(ap); - if (status & ATA_BUSY) - goto idle_irq; + if (qc->tf.command == ATA_CMD_SET_FEATURES && + qc->tf.feature == SETFEATURES_XFER) { + /* With some configurations (PATA VIA and CDR-6S48), the + * ata_altstatus take some times (~ 3us) to become not busy. + * Without this quirk, it is impossible to set the xfer mode. + */ + for (i = 0; ata_altstatus(ap) & ATA_BUSY; i++) { + if (i > 10) + goto idle_irq; + udelay(1); + } + + if (i) + ata_port_printk(ap, KERN_WARNING, "ata_altstatus take %dus\n", i); + } else { + status = ata_altstatus(ap); + if (status & ATA_BUSY) + goto idle_irq; + } /* check main status, clearing INTRQ */ status = ata_chk_status(ap); _ Patches currently in -mm which might be from castet.matthieu@xxxxxxx are pnpacpi-reject-acpi_producer-resources.patch via-pata-fails-on-some-atapi-drives.patch git-netdev-all.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html