diff options
author | Tejun Heo <tj@kernel.org> | 2010-05-31 10:26:48 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2010-06-02 13:49:50 -0400 |
commit | 8b27ff4cf6d15964aa2987aeb58db4dfb1f87a19 (patch) | |
tree | 0a93cd9655ee7eb94ce163f31e7f611bcef5928e /drivers/ata/sata_via.c | |
parent | 67a3e12b05e055c0415c556a315a3d3eb637e29e (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/ata/sata_via.c')
-rw-r--r-- | drivers/ata/sata_via.c | 13 |
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 | ||
580 | static int svia_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | 593 | static int svia_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) |