]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
sata_via: magic vt6421 fix for transmission problems w/ WD drives
authorTejun Heo <tj@kernel.org>
Mon, 31 May 2010 14:26:48 +0000 (16:26 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 5 Jul 2010 18:11:05 +0000 (11:11 -0700)
commit 8b27ff4cf6d15964aa2987aeb58db4dfb1f87a19 upstream.

vt6421 has problems talking to recent WD drives.  It causes a lot of
transmission errors while high bandwidth transfer as reported in the
following bugzilla entry.

  https://bugzilla.kernel.org/show_bug.cgi?id=15173

Joseph Chan provided the following fix.  I don't have any idea what it
does but I can verify the issue is gone with the patch applied.

Signed-off-by: Tejun Heo <tj@kernel.org>
Originally-from: Joseph Chan <JosephChan@via.com.tw>
Reported-by: Jorrit Tijben <sjorrit@gmail.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/ata/sata_via.c

index 02efd9a83d26a06df084d5fffeaf1860d7aa859f..e35596b97853bd624c95c2d9ff8f399def6fb533 100644 (file)
@@ -558,6 +558,19 @@ static void svia_configure(struct pci_dev *pdev)
                tmp8 |= NATIVE_MODE_ALL;
                pci_write_config_byte(pdev, SATA_NATIVE_MODE, tmp8);
        }
+
+       /*
+        * vt6421 has problems talking to some drives.  The following
+        * is the magic fix from Joseph Chan <JosephChan@via.com.tw>.
+        * Please add proper documentation if possible.
+        *
+        * https://bugzilla.kernel.org/show_bug.cgi?id=15173
+        */
+       if (pdev->device == 0x3249) {
+               pci_read_config_byte(pdev, 0x52, &tmp8);
+               tmp8 |= 1 << 2;
+               pci_write_config_byte(pdev, 0x52, tmp8);
+       }
 }
 
 static int svia_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)