> +++ 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 [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html