Re: xhci isoc : Not enough bandwidth for altsetting 6

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

 



Hello Sarah,

Monday, November 1, 2010, 6:50:34 PM, you wrote:

> On Thu, Oct 28, 2010 at 04:45:47PM +0200, Sander Eikelenboom wrote:
>> Hi Andiry / Sarah,
>> 
>> I got another webcam(microsoft hd 5000) to test with xhci today (UVC driver, usb2 device),
>> - On a usb2 controller this gives no problem and i can grab video.
>> - On the usb3/xhci nec controller i get  "Not enough bandwidth for altsetting 6" and can't grab video
>> 
>> I have attached:
>> - dmesg.txt
>> - dmesg-debug.txt
>> - lsusb.txt
>> 
>> in dmesg i have:
>>    - first plugged the device in the usb2 controller and started videograbbing, no problem
>>    - then unplugged and plugged into the usb3 controller and started videograbbing, which doesn't work and gives an  "Not enough bandwidth for altsetting 6", although some other appear as well.
>> 
>> in dmesg-debug-txt
>>    - rebooted with kernel config with xhci debug enabled
>>    - plugged the device in usb3 controller
>>    - tried to grab video

> Your log looks very odd to me.  I think it is a bug in the xHCI driver,
> but it's a very odd bug.  Possibly the USB core is handling a bad
> endpoint descriptor?  Here's why I'm wondering:

>> [   35.274513] xhci_hcd 0000:02:00.0: Allocating ring at ffff880079635b40

> 8 segments were allocated for the ring, so this code must have triggered
> in xhci_endpoint_init():
>         if (usb_endpoint_xfer_isoc(&ep->desc))
>                 virt_dev->eps[ep_index].new_ring =
>                         xhci_ring_alloc(xhci, 8, true, mem_flags);

>> [   35.274608] usb 9-3: ep 0x81 - rounding interval to 1 microframes
>> [   35.280701] xhci_hcd 0000:02:00.0: add ep 0x81, slot id 1, new drop flags = 0x0, new add flags = 0x8, new slot info = 0x18300000
>> [   35.280704] xhci_hcd 0000:02:00.0: xhci_check_bandwidth called for udev ffff880078b18000
>> [   35.280707] xhci_hcd 0000:02:00.0: New Input Control Context:
>> [   35.280710] xhci_hcd 0000:02:00.0: @ffff88007c3f9000 (virt) @7c3f9000 (dma) 0x000000 - drop flags
>> [   35.280713] xhci_hcd 0000:02:00.0: @ffff88007c3f9004 (virt) @7c3f9004 (dma) 0x000009 - add flags
>         - I don't know why this is adding slot context, that's probably a separate bug.

> This is the endpoint context that I think the host controller is complaining about:

>> [   35.280806] xhci_hcd 0000:02:00.0: Endpoint 02 Context:
>> [   35.280808] xhci_hcd 0000:02:00.0: @ffff88007c3f9080 (virt) @7c3f9080 (dma) 0x000000 - ep_info
>> [   35.280811] xhci_hcd 0000:02:00.0: @ffff88007c3f9084 (virt) @7c3f9084 (dma) 0x00022a - ep_info2

> The line above very odd.  It means:
>         - bus error is 1 (which only happens if we find an isoc endpoint
>           with usb_endpoint_xfer_isoc())
>         - but the endpoint type is 4, which means a *control* endpoint.
>         - max burst size is 2 - there's an endpoint in the lsusb output
>           with a wMaxPacketSize of
>                 0x0c00  2x 1024 bytes
>         so that's probably the endpoint we're adding.  The max burst is
>         only set if this is a high speed device with an isoc endpoint.
>         - max packet size is *0*  That's obviously a bug too.

> I'm puzzled how xhci_endpoint_init() determines the endpoint is an isoc
> endpoint, but xhci_get_endpoint_type() thinks it's a control endpoint,
> and they both use usb_endpoint_xfer_isoc().  Possibly something else is
> overwriting the fields later?

>> [   35.280960] xhci_hcd 0000:02:00.0: xhci_handle_event - calling handle_cmd_completion
>> [   35.280963] xhci_hcd 0000:02:00.0: Completed config ep cmd
>> [   35.280965] xhci_hcd 0000:02:00.0: Command ring deq = 0x78a3e080 (DMA)
>> [   35.280967] xhci_hcd 0000:02:00.0: xhci_handle_event - returned from handle_cmd_completion
>> [   35.280969] xhci_hcd 0000:02:00.0: Event ring deq = 0x78a3e660 (DMA)
>> [   35.280971] xhci_hcd 0000:02:00.0: In xhci_handle_event
>> [   35.280976] xhci_hcd 0000:02:00.0: `MEM_WRITE_DWORD(3'b000, 64'hffffc90000378638, 64'h78a3e668, 4'hf);
>> [   35.280982] xhci_hcd 0000:02:00.0: ERROR: unexpected command completion code 0x11.

> And the NEC host rejects the new endpoint, and rightly so.

> It's not obvious where the bug is, so I'm going to have to send you a
> patch to add more debugging.  I'm at the Kernel Summit right now, so the
> patch may be delayed a week, sorry.

Ok I will wait for you to prep a patch with extra debug info, have a good summit !

--

Sander

> Sarah Sharp



-- 
Best regards,
 Sander                            mailto:linux@xxxxxxxxxxxxxx

--
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