linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Albert Lee <albertcc@tw.ibm.com>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: Linux IDE <linux-ide@vger.kernel.org>,
	Doug Maxey <dwm@maxeymade.com>,
	Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Subject: [PATCH 3/3] libata-dev: Fix pdc2027x ATAPI DMA lost irq problem
Date: Fri, 05 Aug 2005 01:39:57 +0800	[thread overview]
Message-ID: <42F252ED.8020206@tw.ibm.com> (raw)
In-Reply-To: <42F24DBE.0@tw.ibm.com>

[-- Attachment #1: Type: text/plain, Size: 843 bytes --]

Jeff,

Patch 3/3: Fix pdc2027x ATAPI DMA lost irq problem

Description:
   Sometimes pdc2027x will lost irq after ATAPI DMA data transfer.
   With the previous rule (cmd->request_bufflen % 256), the ATAPI DMA irq lost
problem still occurs during the test.

   Root cause for the irq lost is unknown. I've tried your ATAPI DMA alignment
patch, but the problem still occurs, even the buffer is aligned. I guess it is pdc2027x hardware problem.

   The following workarounds are adapted from the Promise pdc618 GPL driver.
They seems know about the problem and has the workaround.

Changes:
   - Only turn on ATAPI DMA for READ, WRITE, READ_CD and READ_DVD_STRUCTURE commands.
   - For WRITE_10, if LBA -45150 (FFFF4FA2h) to  -1 (FFFFFFFFh) then use PIO mode.

For your review, thanks.

Albert

Signed-off-by: Albert Lee <albertcc@tw.ibm.com>




[-- Attachment #2: pdc3.diff --]
[-- Type: text/plain, Size: 1290 bytes --]

--- 02_pdc_micro/drivers/scsi/pata_pdc2027x.c	2005-08-03 15:44:16.000000000 +0800
+++ 03_pdc_atapi_dma/drivers/scsi/pata_pdc2027x.c	2005-08-05 00:41:53.000000000 +0800
@@ -29,7 +29,7 @@
 #include <asm/io.h>
 
 #define DRV_NAME	"pata_pdc2027x"
-#define DRV_VERSION	"0.71"
+#define DRV_VERSION	"0.72"
 #undef PDC_DEBUG
 
 #ifdef PDC_DEBUG
@@ -467,11 +467,40 @@
 static int pdc2027x_check_atapi_dma(struct ata_queued_cmd *qc)
 {
 	struct scsi_cmnd *cmd = qc->scsicmd;
-	int rc = 0;
+	u8 *scsicmd = cmd->cmnd;
+	int rc = 1; /* atapi dma off by default */
+	u32 lba;
 
-	/* pdc2027x can only do ATAPI DMA for specific buffer size */
-	if (cmd->request_bufflen % 256)
-		rc = 1;
+	/*
+	 * pdc2027x might lost irq if ATAPI DMA is used
+	 * for commands not in the white list.
+	 */
+	switch (scsicmd[0]) {
+	case READ_10:
+	case READ_12:
+	case READ_6:
+	case WRITE_12:
+	case WRITE_6:
+	case 0xad: /* READ_DVD_STRUCTURE */
+	case 0xbe: /* READ_CD */
+		/* ATAPI DMA is ok */
+		rc = 0;
+		break;
+	case WRITE_10:
+		/* LBA -45150 (FFFF4FA2h) to 
+		 * -1 (FFFFFFFFh) shall use PIO mode
+		 */
+		lba = (scsicmd[2] << 24) | (scsicmd[3] << 16) |
+			(scsicmd[4] << 8) | scsicmd[5]; 
+
+		if (lba < 0xffff4fa2)
+			/* ATAPI DMA is ok */
+			rc = 0;
+
+		break;
+	default:
+		;
+	}
 
 	return rc;
 }

  parent reply	other threads:[~2005-08-04 17:40 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-08-04 17:17 [PATCH 0/3] libata-dev: pdc2027x fixes Albert Lee
2005-08-04 17:32 ` [PATCH 1/3] libata-dev: Convert pdc2027x from PIO to MMIO Albert Lee
2005-08-04 19:40   ` Brett Russ
2005-08-09 11:04     ` Albert Lee
2005-08-11  2:37     ` Jeff Garzik
2005-08-11  3:03   ` Jeff Garzik
2005-08-11  9:49     ` Albert Lee
2005-08-11 17:49       ` Jeff Garzik
2005-08-04 17:34 ` [PATCH 2/3] libata-dev: pdc2027x mdelay() problem fix for power5 micro-partitioning Albert Lee
2005-08-07  9:18   ` Benjamin Herrenschmidt
2005-08-11  3:04   ` Jeff Garzik
2005-08-11  8:36     ` Benjamin Herrenschmidt
2005-08-11  9:52       ` Albert Lee
2005-08-04 17:39 ` Albert Lee [this message]
2005-08-04 18:41   ` [PATCH 3/3] libata-dev: Fix pdc2027x ATAPI DMA lost irq problem Doug Maxey
2005-08-11  3:05   ` Jeff Garzik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=42F252ED.8020206@tw.ibm.com \
    --to=albertcc@tw.ibm.com \
    --cc=bzolnier@gmail.com \
    --cc=dwm@maxeymade.com \
    --cc=jgarzik@pobox.com \
    --cc=linux-ide@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).