Re: Problem with xHCI; mass storage device not detected

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Jan 28, 2012 at 12:56:43AM +0200, Felipe Contreras wrote:
> Hi,
> 
> I just bought a USB 3.0 card, however, it doesn't seem to be detecting
> mass storage devices, other devices seem to work fine (HID).
> 
> They seem to be powered, and I see some activity in the kernel log,
> but that's it. No actual device node is created, and lsusb doesn't
> show the device either.
> 
> I am attaching the log with xhci debugging enabled [1]. This is with
> Linux 3.2.0.

Can you run `lspci -vvv`?  I'm interested in what PCI device vendor and
product this USB 3.0 host is.

> Any ideas?

This bit is odd:

Jan 27 23:06:50 dyfed kernel: [    1.098074] xhci_hcd 0000:02:00.0: Ext Cap ffffc900028c80b0, port offset = 1, count = 1, revision = 0x2
Jan 27 23:06:50 dyfed kernel: [    1.098078] xhci_hcd 0000:02:00.0: Ext Cap ffffc900028c80c0, port offset = 2, count = 4, revision = 0x3
Jan 27 23:06:50 dyfed kernel: [    1.098080] xhci_hcd 0000:02:00.0: Found 1 USB 2.0 ports and 4 USB 3.0 ports.
Jan 27 23:06:50 dyfed kernel: [    1.098081] xhci_hcd 0000:02:00.0: USB 2.0 port at index 0, addr = ffffc900028c8420
Jan 27 23:06:50 dyfed kernel: [    1.098082] xhci_hcd 0000:02:00.0: USB 3.0 port at index 1, addr = ffffc900028c8430
Jan 27 23:06:50 dyfed kernel: [    1.098084] xhci_hcd 0000:02:00.0: USB 3.0 port at index 2, addr = ffffc900028c8440
Jan 27 23:06:50 dyfed kernel: [    1.098085] xhci_hcd 0000:02:00.0: USB 3.0 port at index 3, addr = ffffc900028c8450
Jan 27 23:06:50 dyfed kernel: [    1.098086] xhci_hcd 0000:02:00.0: USB 3.0 port at index 4, addr = ffffc900028c8460

Usually USB 2.0 and USB 3.0 ports are paired together.  The blue USB 3.0
port you see actually contains both USB 2.0 and USB 3.0 wires.  Unless
your host really does have three USB 3.0-only ports, and one USB 2.0/3.0
port?  What kind of USB ports did the packaging advertise?

My suspicion is that they messed up their Extended Capabilities, and
they meant to say count = 4 in that first line.

The port registers show that the USB 3.0 ports are empty:
Jan 27 23:06:50 dyfed kernel: [    1.098683] xhci_hcd 0000:02:00.0: set port power, actual port 0 status  = 0x2a0
Jan 27 23:06:50 dyfed kernel: [    1.098689] xhci_hcd 0000:02:00.0: set port power, actual port 1 status  = 0x2a0
Jan 27 23:06:50 dyfed kernel: [    1.098695] xhci_hcd 0000:02:00.0: set port power, actual port 2 status  = 0x2a0
Jan 27 23:06:50 dyfed kernel: [    1.098701] xhci_hcd 0000:02:00.0: set port power, actual port 3 status  = 0x2a0

Then we get a connection on a USB 2.0 port:
Jan 27 23:06:50 dyfed kernel: [    1.198449] xhci_hcd 0000:02:00.0: get port status, actual port 0 status  = 0x400202e1
Jan 27 23:06:50 dyfed kernel: [    1.198453] xhci_hcd 0000:02:00.0: Get port status returned 0x10101
Jan 27 23:06:50 dyfed kernel: [    1.198458] hub 3-0:1.0: port 1: status 0101 change 0001
Jan 27 23:06:50 dyfed kernel: [    1.198466] xhci_hcd 0000:02:00.0: clear port connect change, actual port 0 status  = 0x400002e1

Found a USB 2.0 hub:
Jan 27 23:06:50 dyfed kernel: [    1.834010] usb 3-1: New USB device found, idVendor=2109, idProduct=0811
Jan 27 23:06:50 dyfed kernel: [    1.834013] usb 3-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
Jan 27 23:06:50 dyfed kernel: [    1.834016] usb 3-1: Product: USB2.0 Hub

Queued the interrupt transfer for the hub:
Jan 27 23:06:50 dyfed kernel: [    1.942338] xhci_hcd 0000:02:00.0: ep 0x81 - urb len = 0x1 (1), addr = 0x42b87e260, num_trbs = 1

A poll of the hub status shows it's not reporting any port status
changes:
Jan 27 23:06:50 dyfed kernel: [    2.238890] hub 3-1:1.0: state 7 ports 4 chg 0000 evt 0000

And then there's a long period of nothing, with a couple minutes of xHCI
polling logs.  The polling does shows that we did put the TRB
on the ring interrupt ring:

Jan 27 23:07:49 dyfed kernel: [   61.256918] xhci_hcd 0000:02:00.0: Dev 1 endpoint ring 2:
Jan 27 23:07:49 dyfed kernel: [   61.256920] xhci_hcd 0000:02:00.0: @000000000282b000 2b87e260 00000004 00000001 00000425
Jan 27 23:07:49 dyfed kernel: [   61.256921] xhci_hcd 0000:02:00.0: @000000000282b010 00000000 00000000 00000000 00000000

We just never got an event for the interrupt transfer completion.  So
your hub never notified us that there was a port status change (e.g.
device connect) on its ports.  Or it did notify the host and host HW
didn't tell the driver about it.  But we're getting interrupts for port
status changes and control transfer completions, so that's less likely.
You also said that HID devices work, so interrupt transfers for low
speed devices work.

Does your mass storage device contain a USB hub, or are you plugging the
mass storage device into the hub?

If you're plugging it into a hub, please try plugging it in directly to
the ports on your machine and see if that works.  Does it help to
connect the mass storage device to the hub before you plug in the hub,
or if you're doing that, does it help to wait until the hub is finished
enumerating (when it shows up in lsusb) and then plug in the mass
storage device?

Sarah Sharp
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux