Patchwork [#upstream-fixes] sata_via: explain the magic fix

login
register
mail settings
Submitter Tejun Heo
Date June 3, 2010, 9:35 a.m.
Message ID <4C077747.4050006@kernel.org>
Download mbox | patch
Permalink /patch/54471/
State Not Applicable
Delegated to: David Miller
Headers show

Comments

Tejun Heo - June 3, 2010, 9:35 a.m.
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>
---
 drivers/ata/sata_via.c |   18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jeff Garzik - June 7, 2010, 8:08 p.m.
On 06/03/2010 05:35 AM, Tejun Heo wrote:
> 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>
> ---
>   drivers/ata/sata_via.c |   18 ++++++++++++++++--
>   1 file changed, 16 insertions(+), 2 deletions(-)

applied


--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c
index 0ecd0f6..4730c42 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)

 	/*
 	 * 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.
+	 * is the fix from Joseph Chan <JosephChan@via.com.tw>.
+	 *
+	 * When host issues HOLD, device may send up to 20DW of data
+	 * before acknowledging it with HOLDA and the host should be
+	 * able to buffer them in FIFO.  Unfortunately, some WD drives
+	 * send upto 40DW before acknowledging HOLD and, in the
+	 * default configuration, this ends up overflowing vt6421's
+	 * FIFO, making the controller abort the transaction with
+	 * R_ERR.
+	 *
+	 * Rx52[2] is the internal 128DW FIFO Flow control watermark
+	 * adjusting mechanism enable bit and the default value 0
+	 * means host will issue HOLD to device when the left FIFO
+	 * size goes below 32DW.  Setting it to 1 makes the watermark
+	 * 64DW.
 	 *
 	 * https://bugzilla.kernel.org/show_bug.cgi?id=15173
+	 * http://article.gmane.org/gmane.linux.ide/46352
 	 */
 	if (pdev->device == 0x3249) {
 		pci_read_config_byte(pdev, 0x52, &tmp8);