Commit b1353e4f authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik

sata_via: apply magic FIFO fix to vt6420 too

vt6420 has the same FIFO overflow problem as vt6421 when combined with
certain devices.  This patch applies the magic fix to vt6420 too.
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Reported-by: default avatarMartin Qvist <q@maq.dk>
Reported-by: default avatarPeter Zijlstra <peterz@infradead.org>
Cc: Joseph Chan <JosephChan@via.com.tw>
Cc: stable@kernel.org
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 589136bf
...@@ -538,7 +538,7 @@ static int vt8251_prepare_host(struct pci_dev *pdev, struct ata_host **r_host) ...@@ -538,7 +538,7 @@ static int vt8251_prepare_host(struct pci_dev *pdev, struct ata_host **r_host)
return 0; return 0;
} }
static void svia_configure(struct pci_dev *pdev) static void svia_configure(struct pci_dev *pdev, int board_id)
{ {
u8 tmp8; u8 tmp8;
...@@ -577,7 +577,7 @@ static void svia_configure(struct pci_dev *pdev) ...@@ -577,7 +577,7 @@ static void svia_configure(struct pci_dev *pdev)
} }
/* /*
* vt6421 has problems talking to some drives. The following * vt6420/1 has problems talking to some drives. The following
* is the fix from Joseph Chan <JosephChan@via.com.tw>. * is the fix from Joseph Chan <JosephChan@via.com.tw>.
* *
* When host issues HOLD, device may send up to 20DW of data * When host issues HOLD, device may send up to 20DW of data
...@@ -596,8 +596,9 @@ static void svia_configure(struct pci_dev *pdev) ...@@ -596,8 +596,9 @@ static void svia_configure(struct pci_dev *pdev)
* *
* https://bugzilla.kernel.org/show_bug.cgi?id=15173 * https://bugzilla.kernel.org/show_bug.cgi?id=15173
* http://article.gmane.org/gmane.linux.ide/46352 * http://article.gmane.org/gmane.linux.ide/46352
* http://thread.gmane.org/gmane.linux.kernel/1062139
*/ */
if (pdev->device == 0x3249) { if (board_id == vt6420 || board_id == vt6421) {
pci_read_config_byte(pdev, 0x52, &tmp8); pci_read_config_byte(pdev, 0x52, &tmp8);
tmp8 |= 1 << 2; tmp8 |= 1 << 2;
pci_write_config_byte(pdev, 0x52, tmp8); pci_write_config_byte(pdev, 0x52, tmp8);
...@@ -652,7 +653,7 @@ static int svia_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -652,7 +653,7 @@ static int svia_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
if (rc) if (rc)
return rc; return rc;
svia_configure(pdev); svia_configure(pdev, board_id);
pci_set_master(pdev); pci_set_master(pdev);
return ata_host_activate(host, pdev->irq, ata_bmdma_interrupt, return ata_host_activate(host, pdev->irq, ata_bmdma_interrupt,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment