Subject: Re: mini iPod gets no device in NetBSD 2.0-BETA
To: Christian Palomino <zakhrin@freeshell.org>
From: None <cube@cubidou.net>
List: tech-kern
Date: 09/14/2004 10:00:55
On Tue, Sep 14, 2004 at 09:26:43AM +0200, Christian Palomino wrote:
> On Mon, 13 Sep 2004 11:21:37 +0200
> cube@cubidou.net wrote:
>
>
> > Could you post the relevant part of dmesg(1) output?
> >
> > Quentin Garnier.
>
> Sure, I get:
> umass0 at uhub3 port 3 configuration 1 interface 0
> umass0: Apple iPod mini, rev 2.00/0.01, addr 2
> umass0: using SCSI over Bulk-Only
> scsibus0 at umass0: 2 targets, 1 lun per target
>
> And nothing else.
That's what I suspected. I have the same issue with a DiskOnKey
device (lent by a friend), and while I understand what happens, so
far I couldn't find a solution.
It's likely to be a bug in our USB stack.
Here are my observations so far (hence I'm CC-ing tech-kern):
o the device behaves the same way in ohci and uhci. However, I made
intense debugging only with a uhci system.
o when plugged into a ehci-only (there should not be such thing, but
there is one port on my laptop where nothing seems to attach as
USB<2, so interpret ehci-only as ehci-very-friendly), the port gets
an error, and sometimes ends up disconnected.
The actual sequence of event is the following:
o umass attachment starts. It detects it should be using bulk-only
transfers.
o umass code reads the number of LUNs. This is a BBB command. This
command succeeds, and will usually return 1 (or actually 0, the
maximum index).
o umass attaches a scsibus device.
o scsibus scans the bus, and finds one device
o scsibus code sends an INQUIRY command
o umass code starts the transfer
o uhci code handles the bulk transfer
A bulk transfer consists of three steps:
o the host sends a CBW structure containing the command and a header
o the data transfers happen (it can be in one way or another, in our
case it's an IN one, from the device to the host)
o the host receives a CSW structure, indicating the status of the
command
What happens in NetBSD for such devices is the following:
o the CBW is correctly sent, and the interrupt confirming it is
correctly generated and handled
o the data transfer doesn't happen. Instead, in the buffer that
supposedly contains the data, we get the CSW structure.
o the data is improperly parsed, and the INQUIRY commands fails.
Thus, no scsi device ever gets attached.
I got a trace from a Linux host (everything works fine) and from a Windows
host, and I get the expected results. So far I don't see why we're not
getting the correct data at the relevant point of the transfer.
First I would have suspected a uhci issue, since the controller code handles
the whole transfer, but since the same seems to happen with ohci, I suspect
it is a more general issue that only shows up in that case.
In any way, I'm interested in getting a trace with an ohci controller, if you
have such one. I want the full thing, with umassdebug at 0xffffffff, usbdebug
at a large value (say, 0xffff) and ohcidebug at a large value too.
Of course, I'm interested in the uhci trace for the mini iPod too, in case you
don't have an ohci controller.
Quentin Garnier.