From: Tejun Heo <tj@kernel.org>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: 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, linux-ide@vger.kernel.org, m.nov4k@gmail.com
Subject: Re: [PATCH #upstream-fixes] libata: implement and use HORKAGE_NOSETXFER
Date: Mon, 25 May 2009 12:10:19 +0900 [thread overview]
Message-ID: <4A1A0C1B.7020801@kernel.org> (raw)
In-Reply-To: <49648C41.6030002@kernel.org>
[-- Attachment #1: Type: text/plain, Size: 2326 bytes --]
Reviving an old thread and quoting whole body for new reporter.
Tejun Heo wrote:
> Alan Cox wrote:
>>>> Sorry you can't just blindly do this because some of the controllers snoop
>>>> the SETXFER command to set their timings and whether they expect DMA. Also
>>>> we've no idea if this is a bug in a specific firmware revision, a quirky
>>>> pata/sata bridge or a timing problem of some sort.
>>> I think it'll generally be okay for SATA unless it's bridged over to
>>> PATA controller. Any other ideas?
>> We seem to have one report, from one user, with one configuration, on one
>> controller, using one firmware set.
>
> There are two more reports linked from the thread.
>
> http://ubuntuforums.org/showthread.php?t=986871
> https://bugs.launchpad.net/ubuntu/+source/linux/+bug/299865
>
> And all of them are showing the same problem. This being a slim SATA
> drive for a laptop, I don't really expect to see the drive in varied
> configurations. The problem might as well be limited to certain OEM
> drive(s).
>
>> That to me isn't meaningful evidence of anything that needs a workaround,
>> beyond maybe doing what old IDE does and if a setxfer times out
>> continuing in hope.
>
> So, as far as the validity of the report goes, I think it's at
> reasonable level. Add to that my general trigger happiness toward
> quirks and the machine is a VAIO and to me quirking it doesn't seem
> too careless.
>
>> (We should of course then re-read the identify pages and check the mode
>> in use)
>
> Of course, whether the workaround is proper is a completely separate
> issue but unless other devices with the same problem creep up and the
> device is happy with the quirk, I don't really think we should modify
> the default configuration sequence for devices like this.
>
> That said, Moritz, can you please post the output of "hdparm -I" with
> and without the quirk applied? And can you please use a preoper mail
> address?
Martin Novak (cc'd) is reporting the same problem. I really think
doing nothing is the worst choice here. Given the rarity of the
issue, I don't think we need worry too much about long term impact of
the quirk.
Anyways, Martin, can you please post what I asked Moritz - the output
of "hdparm -I" with and without the quirk applied? Quirk patch is
attached.
Thanks.
--
tejun
[-- Attachment #2: horkage-notsetxfer.patch --]
[-- Type: text/x-patch, Size: 2101 bytes --]
libata: implement and use HORKAGE_NOSETXFER
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 c924230..5dcdcb4 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -3390,14 +3390,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;
@@ -4292,6 +4295,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
/* Devices which aren't very happy with higher link speeds */
{ "WD My Book", NULL, ATA_HORKAGE_1_5_GBPS, },
+ /* 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 3d501db..2b641af 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -385,6 +385,7 @@ enum {
not multiple of 16 bytes */
ATA_HORKAGE_FIRMWARE_WARN = (1 << 12), /* firmware update warning */
ATA_HORKAGE_1_5_GBPS = (1 << 13), /* force 1.5 Gbps */
+ ATA_HORKAGE_NOSETXFER = (1 << 14),
/* DMA mask for user DMA control: User visible values; DO NOT
renumber */
next prev parent reply other threads:[~2009-05-25 3:11 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 ` [PATCH #upstream-fixes] libata: implement and use HORKAGE_NOSETXFER Tejun Heo
2009-01-07 9:40 ` 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 [this message]
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=4A1A0C1B.7020801@kernel.org \
--to=tj@kernel.org \
--cc=alan@lxorguk.ukuu.org.uk \
--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=m.nov4k@gmail.com \
--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.