tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Reboot resistant USB bug
Hello
On both netbsd-8 and -current, I have a problem with USB devices that
get stuck in a non-functionning state even after a reboot.
This happens after interrupting transfer with different NFC readers
from different vendors, and the only way to recover the device is
to power-cycle it. I wonder if there could be a missing step in the
way we initialize USB devices that could explain that situation.
Once I have a device in bad state, on reboot I get (usb0 chilren omitted):
xhci0 at pci0 dev 20 function 0: vendor 8086 product a36d (rev. 0x10)
xhci0: interrupting at msi0 vec 0
xhci0: xHCI version 1.10 not known to be supported
usb0 at xhci0: USB revision 3.0
usb1 at xhci0: USB revision 2.0
uhub1 at usb1: vendor 8086 (0x8086) xHCI Root Hub (0000), class 9/0, rev 2.00/1.00, addr 0
uhub1: 16 ports with 16 removable, self powered
uhub1: port 5, set config at addr 2 failed
uhub1: device problem, disabling port 5
I do not think the problem is specific to xhci, since I also observed it
on a uhci based system.
The calling stack leading to the set config failed is:
usbd_reattach_device() at netbsd:usbd_reattach_device
xhci_new_device() at netbsd:xhci_new_device+0xfb2
usbd_new_device() at netbsd:usbd_new_device+0x83
uhub_explore() at netbsd:uhub_explore+0xca3
usb_discover() at netbsd:usb_discover+0x82
usb_event_thread() at netbsd:usb_event_thread+0x55
I have a huge trace of usb/uhub/xhci debug output, where I can see
that the kernale is able to pull descriptors from the device:
000004.188673 usbd_reload_device_desc#4@1: bLength 18
000004.188673 usbd_reload_device_desc#4@1: bDescriptorType 1
000004.188673 usbd_reload_device_desc#4@1: bcdUSB 2.00
000004.188673 usbd_reload_device_desc#4@1: bDeviceClass 0
000004.188673 usbd_reload_device_desc#4@1: bDeviceSubClass 0
000004.188673 usbd_reload_device_desc#4@1: bDeviceProtocol 0
000004.188673 usbd_reload_device_desc#4@1: bMaxPacketSize0 8
000004.188673 usbd_reload_device_desc#4@1: idVendor 0xcc 0x4
000004.188673 usbd_reload_device_desc#4@1: idProduct 0x33 0x25
000004.188673 usbd_reload_device_desc#4@1: bcdDevice 1.00
000004.188673 usbd_reload_device_desc#4@1: iManufacturer 1
000004.188673 usbd_reload_device_desc#4@1: iProduct 2
000004.188673 usbd_reload_device_desc#4@1: iSerial 0
000004.188673 usbd_reload_device_desc#4@1: bNumConfigurations 1
But the trace finishes with:
000004.195189 usbd_get_config_desc#4@1: confidx=0, bad desc len=120 type=120
000004.195189 usbd_set_config_index#4@1: get_config_desc=4
000004.195189 usbd_probe_and_attach#2@1: port 5, set config at addr 2 failed, er
ror=4
Any hint?
--
Emmanuel Dreyfus
manu%netbsd.org@localhost
Home |
Main Index |
Thread Index |
Old Index