linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] libata: Be a bit more slack about early devices
@ 2008-04-08 15:36 Alan Cox
  2008-04-12  4:35 ` Jeff Garzik
  0 siblings, 1 reply; 2+ messages in thread
From: Alan Cox @ 2008-04-08 15:36 UTC (permalink / raw)
  To: linux-ide, jeff, akpm

We have a certain number of 'ATA' emulations often on CF or other flash
devices that are at best "loosely based" on the CF 1.1 standard. These
devices report themselves as disk but don't support the ATA minimal
command set only the CF 1.1 set.

Relax the PIO checking for devices reporting ATA rev 0, or no iordy
support, or CFA. Rework the code a bit as it was already messy and this
made it quite ugly.

Signed-off-by: Alan Cox <alan@redhat.com>

diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-rc8-mm1/drivers/ata/libata-core.c linux-2.6.25-rc8-mm1/drivers/ata/libata-core.c
--- linux.vanilla-2.6.25-rc8-mm1/drivers/ata/libata-core.c	2008-04-08 11:34:51.000000000 +0100
+++ linux-2.6.25-rc8-mm1/drivers/ata/libata-core.c	2008-04-08 12:01:30.000000000 +0100
@@ -3342,16 +3342,21 @@
 	if (rc)
 		return rc;
 
-	/* Old CFA may refuse this command, which is just fine */
-	if (dev->xfer_shift == ATA_SHIFT_PIO && ata_id_is_cfa(dev->id))
-		ign_dev_err = 1;
-
-	/* Some very old devices and some bad newer ones fail any kind of
-	   SET_XFERMODE request but support PIO0-2 timings and no IORDY */
-	if (dev->xfer_shift == ATA_SHIFT_PIO && !ata_id_has_iordy(dev->id) &&
-			dev->pio_mode <= XFER_PIO_2)
-		ign_dev_err = 1;
-
+	if (dev->xfer_shift == ATA_SHIFT_PIO) {
+		/* Old CFA may refuse this command, which is just fine */
+		if (ata_id_is_cfa(dev->id))
+			ign_dev_err = 1;
+		/* Catch several broken garbage emulations plus some pre
+		   ATA devices */
+		if (ata_id_major_version(dev->id) == 0 &&
+					dev->pio_mode <= XFER_PIO_2)
+			ign_dev_err = 1;
+		/* Some very old devices and some bad newer ones fail
+		   any kind of SET_XFERMODE request but support PIO0-2
+		   timings and no IORDY */
+		if (!ata_id_has_iordy(dev->id) && dev->pio_mode <= XFER_PIO_2)
+			ign_dev_err = 1;
+	}
 	/* Early MWDMA devices do DMA but don't allow DMA mode setting.
 	   Don't fail an MWDMA0 set IFF the device indicates it is in MWDMA0 */
 	if (dev->xfer_shift == ATA_SHIFT_MWDMA &&

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] libata: Be a bit more slack about early devices
  2008-04-08 15:36 [PATCH] libata: Be a bit more slack about early devices Alan Cox
@ 2008-04-12  4:35 ` Jeff Garzik
  0 siblings, 0 replies; 2+ messages in thread
From: Jeff Garzik @ 2008-04-12  4:35 UTC (permalink / raw)
  To: Alan Cox; +Cc: linux-ide, akpm

Alan Cox wrote:
> We have a certain number of 'ATA' emulations often on CF or other flash
> devices that are at best "loosely based" on the CF 1.1 standard. These
> devices report themselves as disk but don't support the ATA minimal
> command set only the CF 1.1 set.
> 
> Relax the PIO checking for devices reporting ATA rev 0, or no iordy
> support, or CFA. Rework the code a bit as it was already messy and this
> made it quite ugly.
> 
> Signed-off-by: Alan Cox <alan@redhat.com>
> 
> diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-rc8-mm1/drivers/ata/libata-core.c linux-2.6.25-rc8-mm1/drivers/ata/libata-core.c
> --- linux.vanilla-2.6.25-rc8-mm1/drivers/ata/libata-core.c	2008-04-08 11:34:51.000000000 +0100
> +++ linux-2.6.25-rc8-mm1/drivers/ata/libata-core.c	2008-04-08 12:01:30.000000000 +0100
> @@ -3342,16 +3342,21 @@
>  	if (rc)
>  		return rc;
>  
> -	/* Old CFA may refuse this command, which is just fine */
> -	if (dev->xfer_shift == ATA_SHIFT_PIO && ata_id_is_cfa(dev->id))
> -		ign_dev_err = 1;
> -
> -	/* Some very old devices and some bad newer ones fail any kind of
> -	   SET_XFERMODE request but support PIO0-2 timings and no IORDY */
> -	if (dev->xfer_shift == ATA_SHIFT_PIO && !ata_id_has_iordy(dev->id) &&
> -			dev->pio_mode <= XFER_PIO_2)
> -		ign_dev_err = 1;
> -
> +	if (dev->xfer_shift == ATA_SHIFT_PIO) {
> +		/* Old CFA may refuse this command, which is just fine */
> +		if (ata_id_is_cfa(dev->id))
> +			ign_dev_err = 1;
> +		/* Catch several broken garbage emulations plus some pre
> +		   ATA devices */
> +		if (ata_id_major_version(dev->id) == 0 &&
> +					dev->pio_mode <= XFER_PIO_2)
> +			ign_dev_err = 1;
> +		/* Some very old devices and some bad newer ones fail
> +		   any kind of SET_XFERMODE request but support PIO0-2
> +		   timings and no IORDY */
> +		if (!ata_id_has_iordy(dev->id) && dev->pio_mode <= XFER_PIO_2)
> +			ign_dev_err = 1;
> +	}

applied



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-04-12  4:35 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-08 15:36 [PATCH] libata: Be a bit more slack about early devices Alan Cox
2008-04-12  4:35 ` Jeff Garzik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).