Re: [PATCH] pata_scc.c: Workaround for errata A308

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> +++ 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

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux