diff options
author | Tejun Heo <tj@kernel.org> | 2010-06-03 05:35:03 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2010-06-07 16:03:08 -0400 |
commit | b475a3b83a7709e16a734ef2b8ead4d50f885427 (patch) | |
tree | 9104b15848f68b8cc44fb414e115eabd3395d986 /drivers/ata | |
parent | 386f40c86d6c8d5b717ef20620af1a750d0dacb4 (diff) |
sata_via: explain the magic fix
Add Joseph Chan's explanation of the problem and workaround to the
VT6421 magic fix.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Joseph Chan <JosephChan@via.com.tw>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/sata_via.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c index 0ecd0f6aa2c0..4730c42a5ee5 100644 --- a/drivers/ata/sata_via.c +++ b/drivers/ata/sata_via.c | |||
@@ -578,10 +578,24 @@ static void svia_configure(struct pci_dev *pdev) | |||
578 | 578 | ||
579 | /* | 579 | /* |
580 | * vt6421 has problems talking to some drives. The following | 580 | * vt6421 has problems talking to some drives. The following |
581 | * is the magic fix from Joseph Chan <JosephChan@via.com.tw>. | 581 | * is the fix from Joseph Chan <JosephChan@via.com.tw>. |
582 | * Please add proper documentation if possible. | 582 | * |
583 | * When host issues HOLD, device may send up to 20DW of data | ||
584 | * before acknowledging it with HOLDA and the host should be | ||
585 | * able to buffer them in FIFO. Unfortunately, some WD drives | ||
586 | * send upto 40DW before acknowledging HOLD and, in the | ||
587 | * default configuration, this ends up overflowing vt6421's | ||
588 | * FIFO, making the controller abort the transaction with | ||
589 | * R_ERR. | ||
590 | * | ||
591 | * Rx52[2] is the internal 128DW FIFO Flow control watermark | ||
592 | * adjusting mechanism enable bit and the default value 0 | ||
593 | * means host will issue HOLD to device when the left FIFO | ||
594 | * size goes below 32DW. Setting it to 1 makes the watermark | ||
595 | * 64DW. | ||
583 | * | 596 | * |
584 | * https://bugzilla.kernel.org/show_bug.cgi?id=15173 | 597 | * https://bugzilla.kernel.org/show_bug.cgi?id=15173 |
598 | * http://article.gmane.org/gmane.linux.ide/46352 | ||
585 | */ | 599 | */ |
586 | if (pdev->device == 0x3249) { | 600 | if (pdev->device == 0x3249) { |
587 | pci_read_config_byte(pdev, 0x52, &tmp8); | 601 | pci_read_config_byte(pdev, 0x52, &tmp8); |