From mboxrd@z Thu Jan 1 00:00:00 1970 From: Douglas Gilbert Date: Fri, 02 Apr 2010 16:21:09 +0000 Subject: Re: System hangs when using USB 3.0 HD with on Ubuntu Message-Id: <4BB61975.1070406@interlog.com> List-Id: References: <4BB61237.5030000@ru.mvista.com> In-Reply-To: <4BB61237.5030000@ru.mvista.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Sergei Shtylyov Cc: Alan Stern , James Bottomley , Jonas Schwertfeger , Kay Sievers , David Zeuthen , linux-hotplug@vger.kernel.org, Sarah Sharp , linux-usb@vger.kernel.org, USB Storage List , Matthew Dharm , linux-scsi@vger.kernel.org, Lennart Poettering , mlord@pobox.com Sergei Shtylyov wrote: > Hello. > > Alan Stern wrote: > >>>> Best guess (and it's a guess only) would be that the USB bridge SAT >>>> layer doesn't implement ATA_16 and so fails in interesting ways when it >>>> comes in. Does the ATA_12 version of IDENTIFY DEVICE succeed? >>>> >>> It does. And in between the two is an ATA_16 SET FEATURES command >>> which also (apparently) succeeds. That is, there is no error >>> indication from the device -- but goodness knows if it actually carries >>> out the command. >>> >> >> Incidentally, there's a discussion of this problem with input from an >> engineer at the company that makes the bridge chip here: >> >> https://bugs.launchpad.net/ubuntu/+source/linux-fsl-imx51/+bug/431963 >> >> See comment #25 and later. He claims that the ATA pass-through command >> contains a SECTOR COUNT field of 0 even though it asks for 512 bytes of >> IDENTIFY data. This invalid parameter combination causes the bridge >> chip to get confused, and instead of failing gracefully, it messes up >> the USB protocol. >> > > IDENTIFY DEVICE command always returns 512 bytes of data, regardless > of any value in the sector count register. > >> Does anybody know where to find out why hdparm is sending an IDENTIFY >> command with invalid parameters? >> > > IDENTIFY DEVICE command has *no* parameters. Confirming that, what is put in the ATA_16 sector count field is what the ATA command (IDENTIFY DEVICE) expects in its count field. And according to ACS-2 (rev 2) for IDENTIFY DEVICE that is "N/A" which I would interpret as zero. Mark Lord is the author of hdparm and I have added him to the cc list. Using SAT that IDENTIFY DEVICE response can be obtained in one of three ways: - the SCSI ATA PASS-THROUGH(12) command - the SCSI ATA PASS-THROUGH(16) command - SCSI ATA Information VPD page (89h) The latter can be fetched via a SCSI INQUIRY command. Now vendors can screw up on any or all of the above ways. I would like to suggest to Mark to have some way of using the VPD page technique with hdparm. The idea of SAT is to use the SCSI equivalent command and then, as a last resort, use the ATA PASS-THROUGH commands. A really good SAT implementation might block the pass-through commands (they are optional). Doug Gilbert