aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2010-05-31 10:26:48 -0400
committerJeff Garzik <jgarzik@redhat.com>2010-06-02 13:49:50 -0400
commit8b27ff4cf6d15964aa2987aeb58db4dfb1f87a19 (patch)
tree0a93cd9655ee7eb94ce163f31e7f611bcef5928e /drivers
parent67a3e12b05e055c0415c556a315a3d3eb637e29e (diff)
sata_via: magic vt6421 fix for transmission problems w/ WD drives
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> Cc: stable@kernel.org Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/ata/sata_via.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c
index 101d8c219caf..0ecd0f6aa2c0 100644
--- a/drivers/ata/sata_via.c
+++ b/drivers/ata/sata_via.c
@@ -575,6 +575,19 @@ static void svia_configure(struct pci_dev *pdev)
575 tmp8 |= NATIVE_MODE_ALL; 575 tmp8 |= NATIVE_MODE_ALL;
576 pci_write_config_byte(pdev, SATA_NATIVE_MODE, tmp8); 576 pci_write_config_byte(pdev, SATA_NATIVE_MODE, tmp8);
577 } 577 }
578
579 /*
580 * vt6421 has problems talking to some drives. The following
581 * is the magic fix from Joseph Chan <JosephChan@via.com.tw>.
582 * Please add proper documentation if possible.
583 *
584 * https://bugzilla.kernel.org/show_bug.cgi?id=15173
585 */
586 if (pdev->device == 0x3249) {
587 pci_read_config_byte(pdev, 0x52, &tmp8);
588 tmp8 |= 1 << 2;
589 pci_write_config_byte(pdev, 0x52, tmp8);
590 }
578} 591}
579 592
580static int svia_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) 593static int svia_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)