Re: System hangs when using USB 3.0 HD with on Ubuntu

Douglas Gilbert
2010-04-02T16:21:09Z

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