Patchwork Don't use UDMA on VIA UDMA33 controller with Transcend SSD

login
register
mail settings
Submitter Bartlomiej Zolnierkiewicz
Date Jan. 14, 2010, 3:49 p.m.
Message ID <201001141649.13073.bzolnier@gmail.com>
Download mbox | patch
Permalink /patch/42911/
State Not Applicable
Delegated to: David Miller
Headers show

Comments

Bartlomiej Zolnierkiewicz - Jan. 14, 2010, 3:49 p.m.
On Thursday 05 November 2009 02:25:21 am Mikulas Patocka wrote:
> Hi
> 
> Here is another patch for SSD for VIA UDMA33. Alan, please backport it 
> into libata.
> 
> Mikulas
> 
> ---
> 
> Don't use UDMA on VIA UDMA33 controller with Transcend SSD
> 
> The computer locks up if Transcend SSD runs in any of UDMA modes.
> It doesn't lockup with different brand SSD, so this is specific to Transcend.
> 
> Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>

FWIW the following modified version of your patch is now in my atang tree:

From: Mikulas Patocka <mpatocka@redhat.com>
Subject: [PATCH] via82cxxx: don't use UDMA on VIA UDMA33 controller with Transcend SSD

Don't use UDMA on VIA UDMA33 controller with Transcend SSD.

The computer locks up if Transcend SSD runs in any of UDMA modes.
It doesn't lockup with different brand SSD, so this is specific to Transcend.

bzolnier:
- limit it to VT82C586A/B + TS64GSSD25-M (per commit 10734fc) for now
- add warning message

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Cc: David Miller <davem@davemloft.net>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
 drivers/ide/via82cxxx.c |   19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Alan Cox - Jan. 14, 2010, 7:24 p.m.
> The computer locks up if Transcend SSD runs in any of UDMA modes.
> It doesn't lockup with different brand SSD, so this is specific to Transcend.
> 
> bzolnier:
> - limit it to VT82C586A/B + TS64GSSD25-M (per commit 10734fc) for now
> - add warning message

Looks good to me.


> +		printk(KERN_WARNING "%s: disabling UDMA mode due to reported "
> +			"lockups with this device.\n", drive->name);

That sounds odd - I think I'd have put ": not using UDMA mode as lockups
have been reported with this device" or similar.

Ackity-ack
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bartlomiej Zolnierkiewicz - Jan. 14, 2010, 8:17 p.m.
On Thursday 14 January 2010 08:24:10 pm Alan Cox wrote:
> > The computer locks up if Transcend SSD runs in any of UDMA modes.
> > It doesn't lockup with different brand SSD, so this is specific to Transcend.
> > 
> > bzolnier:
> > - limit it to VT82C586A/B + TS64GSSD25-M (per commit 10734fc) for now
> > - add warning message
> 
> Looks good to me.

Thanks.

> > +		printk(KERN_WARNING "%s: disabling UDMA mode due to reported "
> > +			"lockups with this device.\n", drive->name);
> 
> That sounds odd - I think I'd have put ": not using UDMA mode as lockups
> have been reported with this device" or similar.

For compatibility reasons the warning message has been kept identical to
the one used by pata_via driver (please see commit 10734fc for details 8)..

--
Bartlomiej Zolnierkiewicz
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

Index: b/drivers/ide/via82cxxx.c
===================================================================
--- a/drivers/ide/via82cxxx.c
+++ b/drivers/ide/via82cxxx.c
@@ -195,6 +195,24 @@  static void via_set_pio_mode(ide_drive_t
 	via_set_drive(drive, XFER_PIO_0 + pio);
 }
 
+static u8 via_udma_filter(ide_drive_t *drive)
+{
+	ide_hwif_t *hwif = drive->hwif;
+	struct pci_dev *dev = to_pci_dev(hwif->dev);
+	struct ide_host *host = pci_get_drvdata(dev);
+	struct via82cxxx_dev *vdev = host->host_priv;
+	char *m = (char *)&drive->id[ATA_ID_PROD];
+
+	if (vdev->via_config->id == PCI_DEVICE_ID_VIA_82C586_0 &&
+	    strcmp(m, "TS64GSSD25-M") == 0) {
+		printk(KERN_WARNING "%s: disabling UDMA mode due to reported "
+			"lockups with this device.\n", drive->name);
+		return 0;
+	}
+
+	return hwif->ultra_mask;
+}
+
 static struct via_isa_bridge *via_config_find(struct pci_dev **isa)
 {
 	struct via_isa_bridge *via_config;
@@ -372,6 +390,7 @@  static const struct ide_port_ops via_por
 	.set_pio_mode		= via_set_pio_mode,
 	.set_dma_mode		= via_set_drive,
 	.cable_detect		= via82cxxx_cable_detect,
+	.udma_filter		= via_udma_filter,
 };
 
 static const struct ide_port_info via82cxxx_chipset __devinitdata = {