> +++ linux-powerpc-git.mod/drivers/ata/pata_scc.c 2007-07-10 17:13:01.000000000 +0900 > @@ -238,6 +238,12 @@ static void scc_set_dmamode (struct ata_ > else > offset = 0; /* 100MHz */ > > + /* errata A308 workaround: limit ATAPI UDMA mode to UDMA4 */ > + if (adev->class == ATA_DEV_ATAPI && speed > XFER_UDMA_4) { > + printk(KERN_INFO "%s: limit ATAPI UDMA to UDMA4\n", DRV_NAME); > + speed = XFER_UDMA_4; > + } > + NAK You should not be modifying the speed you set in set_dmamode. Use the mode_filter hook to mask the higher modes for ATAPI instead. > + /* errata A252,A308 workaround: Step4 */ > + if (ata_altstatus(ap) & ATA_ERR && int_status & INTSTS_INTRQ) Can we have more brackets here for clarity ? > + /* We don't check ATAPI DMA because it is limited to UDMA4 */ > + if ((qc->tf.protocol == ATA_PROT_DMA && > + qc->dev->xfer_mode > XFER_UDMA_4)) { > + if (!(int_status & INTSTS_ACTEINT)) { > + printk(KERN_WARNING "ata%u: data lost occurred. (ACTEINT==0, retry:%d)\n", > + ap->print_id, retry); "data loss occurred", and even that sounds veyr scary so we should probably try a more friendly message indicating that the user data has not been lost but that the operation failed > + host_stat |= ATA_DMA_ERR; > + if (retry++) > + ap->udma_mask >>= 1; NAK - you don't know that you can safely mess with modes this way. udma_mask might contain holes. You need to do ap->udma_mask &= ~(1 << current UDMA mode); Alan - To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html