All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: linux--ide-momail.e4ward.com-linux--ide-vger.kernel.org-CDD-6w99-4@reply.e4ward.com,
	Jeff Garzik <jeff@garzik.org>, Robert Hancock <hancockr@shaw.ca>,
	peter.klotz@aon.at
Cc: linux-ide@vger.kernel.org
Subject: [PATCH #upstream-fixes] libata: implement and use HORKAGE_NOSETXFER
Date: Wed, 07 Jan 2009 11:01:05 +0900	[thread overview]
Message-ID: <49640CE1.6070808@kernel.org> (raw)
In-Reply-To: <1231282276.6376.13.camel@Thutmosis>

PIONEER DVD-RW DVRTD08 times out SETXFER if no media is present.  The
device is SATA and simply skipping SETXFER works around the problem.
Implement ATA_HORKAGE_NOSETXFER and apply it to the device.

Reported by Moritz Rigler in the following thread.

  http://thread.gmane.org/gmane.linux.ide/36790

Signed-off-by: Tejun Heo <tj@kernel.org>
---
 drivers/ata/libata-core.c |   10 ++++++++--
 include/linux/libata.h    |    1 +
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index fecca42..eceaace 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -3310,14 +3310,17 @@ static int ata_dev_set_mode(struct ata_device *dev)
 	struct ata_eh_context *ehc = &dev->link->eh_context;
 	const char *dev_err_whine = "";
 	int ign_dev_err = 0;
-	unsigned int err_mask;
+	unsigned int err_mask = 0;
 	int rc;
 
 	dev->flags &= ~ATA_DFLAG_PIO;
 	if (dev->xfer_shift == ATA_SHIFT_PIO)
 		dev->flags |= ATA_DFLAG_PIO;
 
-	err_mask = ata_dev_set_xfermode(dev);
+	if (!(dev->horkage & ATA_HORKAGE_NOSETXFER))
+		err_mask = ata_dev_set_xfermode(dev);
+	else
+		dev_err_whine = " (SET_XFERMODE skipped)";
 
 	if (err_mask & ~AC_ERR_DEV)
 		goto fail;
@@ -4207,6 +4210,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
 	/* Devices that do not need bridging limits applied */
 	{ "MTRON MSP-SATA*",		NULL,	ATA_HORKAGE_BRIDGE_OK, },
 
+	/* Devices which choke on SETXFER.  Presumably SATA only. */
+	{ "PIONEER DVD-RW  DVRTD08",	"1.00",	ATA_HORKAGE_NOSETXFER },
+
 	/* End Marker */
 	{ }
 };
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 3449de5..e78dc6b 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -377,6 +377,7 @@ enum {
 	ATA_HORKAGE_ATAPI_MOD16_DMA = (1 << 11), /* use ATAPI DMA for commands
 						    not multiple of 16 bytes */
 	ATA_HORKAGE_FIRMWARE_WARN = (1 << 12),	/* firwmare update warning */
+	ATA_HORKAGE_NOSETXFER	= (1 << 13),
 
 	 /* DMA mask for user DMA control: User visible values; DO NOT
 	    renumber */

  reply	other threads:[~2009-01-07  2:01 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-21 21:18 PIONEER DVD-RW DVRTD08 is disabled if there is no disc present at boot time linux-ide
2008-12-22  0:22 ` Robert Hancock
2008-12-22 10:02   ` Tejun Heo
2008-12-22 12:13     ` linux-ide
2008-12-23  3:03       ` Tejun Heo
2008-12-24 13:40         ` linux-ide
2008-12-29  8:14           ` Tejun Heo
2008-12-29 21:32             ` linux-ide
2009-01-06 22:51               ` linux-ide
2009-01-07  2:01                 ` Tejun Heo [this message]
2009-01-07  9:40                   ` [PATCH #upstream-fixes] libata: implement and use HORKAGE_NOSETXFER Alan Cox
2009-01-07 10:27                     ` Tejun Heo
2009-01-07 10:53                       ` Alan Cox
2009-01-07 11:04                         ` Tejun Heo
2009-05-25  3:10                           ` Tejun Heo
2009-05-25  8:11                             ` Alan Cox
2009-07-08  8:00                               ` Tejun Heo
2009-07-08 10:14                                 ` Alan Cox
2009-07-08 11:16                                   ` Tejun Heo
2009-07-08 12:21                                     ` Alan Cox
2009-07-08 23:07                                       ` Tejun Heo
2009-07-08 14:53                                   ` Sergei Shtylyov
2009-07-08 15:06                                     ` Alan Cox
2008-12-29 22:11             ` PIONEER DVD-RW DVRTD08 is disabled if there is no disc present at boot time Peter Klotz
2008-12-22 11:57   ` linux-ide
  -- strict thread matches above, loose matches on Subject: below --
2009-01-07 14:15 [PATCH #upstream-fixes] libata: implement and use HORKAGE_NOSETXFER Moritz Rigler
2009-01-07 14:23 ` Alan Cox
2009-01-09  0:11   ` Robert Hancock
2009-01-15  5:48   ` Tejun Heo
2009-01-15  9:45     ` Alan Cox
2009-01-15 10:06       ` Tejun Heo
2009-01-15 13:48         ` Tejun Heo
2009-01-07 14:18 Moritz Rigler

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=49640CE1.6070808@kernel.org \
    --to=tj@kernel.org \
    --cc=hancockr@shaw.ca \
    --cc=jeff@garzik.org \
    --cc=linux--ide-momail.e4ward.com-linux--ide-vger.kernel.org-CDD-6w99-4@reply.e4ward.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=peter.klotz@aon.at \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.