On 09/14/2014 01:52 AM, Mike Mammarella wrote: > On Sat, 26 Jul 2014, Mike Mammarella wrote: > >> On Fri, 4 Jul 2014, Mathias Nyman wrote: >> >>> On 07/01/2014 09:07 AM, Mike Mammarella wrote: >>>>> Hi >>>>> >>>>> Can you add xhci debugging by enabling CONFIG_DYNAMIC_DEBUG, and run >>>>> `echo -n 'module xhci_hcd =p' > /sys/kernel/debug/dynamic_debug/control` >>>>> as root, >>>>> and send me the output of dmesg. >>>>> >>>>> Without debugging info it's hard to guess what's going on. >>>>> >>>>> The microframe rounding look a bit suspicious: >>>>> [12864.453456] usb 3-4: ep 0x81 - rounding interval to 128 microframes, >>>>> ep desc says 255 microframes >>>>> >>>>> xhci specs says it needs the interval rounded to nearest 2^(X) value, >>>>> which would be 256, not 128. I'll take a look at that. >>>>> >>>>> An other possibility is that it's related to how xhci handles halted >>>>> endpoints. I got some untested code to fix this, It needs a lot of >>>>> cleanup but can be tested. >>>>> >>>>> If you are able to test my ep_reset_halt_test branch (with xhci >>>>> debugging) I'd be interested to know if it helps. >>>>> >>>>> Code is at: >>>>> git://git.kernel.org/pub/scm/linux/kernel/git/mnyman/xhci.git >>>>> ep_reset_halt_test >>>>> >>>>> -Mathias >>>> >>>> Thanks! I've built a kernel from fb58633e with CONFIG_DYNAMIC_DEBUG >>>> enabled. >>>> (I also had to mount debugfs, it turns out.) The scanner does not work in >>>> this configuration. I've posted the logs here: >>>> >>>> http://spark.crystalorb.net/mikem/dmesg.log >>>> http://spark.crystalorb.net/mikem/scanadf.log >>>> >>>> dmesg seems to have much more information than what showed up on the >>>> console (which showed only MATTU messages); it may be relevant when >>>> sifting through that output that the root file system is also on USB. >>>> >>> >>> Thanks, >>> >>> Took a quick look, but can't find any obvious reason why it fails. >>> I'll be out of office next week, but I'll try to take a better look again >>> when I return >>> >>> usbmon traces of this could give some hint on what is happening >>> >>> -Mathias >>> >> >> Sorry for the delay getting back to you - I've captured traces with EHCI >> (works) and XHCI (fails). In both cases the scanner is device 10 on bus 1. >> The kernel is the Debian 3.14.12 kernel (so, in particular, not your >> ep_reset_halt_test branch), in case that's important for these traces. >> >> http://spark.crystalorb.net/mikem/usbmon-success.log >> http://spark.crystalorb.net/mikem/usbmon-failure.log >> >> I appreciate your help looking into this! >> >> Mike > > Hi, just curious if these traces were useful? Is there any other information > I could collect that would help? > > Thanks! > > Mike
I haven't had time to dig into the usbmon traces, but I just got another report from Gunter Köningsmann about similar scanner problem, and I just noticed that in both cases we round the interval for high speed bulk _IN_ endpoint, which should not have interval set at all. The interval value should be ignored by host, but maybe setting it still could cause some issues. I don't have high hopes for this patch, but it's worth a shot. Can you try this out and see if it makes any difference? -Mathias diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c index 8936211..7f21b77 100644 --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c @@ -1291,7 +1291,8 @@ static unsigned int xhci_get_endpoint_interval(struct usb_device *udev, /* Max NAK rate */ if (usb_endpoint_xfer_control(&ep->desc) || usb_endpoint_xfer_bulk(&ep->desc)) { - interval = xhci_parse_microframe_interval(udev, ep); + if (!usb_endpoint_dir_in(&ep->desc)) + interval = xhci_parse_microframe_interval(udev, ep); break; } /* Fall through - SS and HS isoc/int have same decoding */ -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html