Re: [PATCH 1/2] usb: add helper to extract bits 12:11 of wMaxPacketSize

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

 



Hi,

Felipe Balbi <felipe.balbi@xxxxxxxxxxxxxxx> writes:
> Hi,
>
> Bin Liu <b-liu@xxxxxx> writes:
>>> > >> > Does this mean the issue of isoc high bandwidth transfer was fixed by
>>> > >> > this patchset per your test?
>>> > >> 
>>> > >> No, I couldn't get g_webcam to work yet.
>>> > >
>>> > > In mainline, g_webcam is broken with DWC3. Also these two patches don't
>>> > > fix the issue on v4.4.21.
>>> > 
>>> > care to send tracepoint output? Best if you could cherry pick my latest
>>> > tracepoint changes so we have the best output possible.
>>> > 
>>> > I have also built a branch with v4.4.21 + all dwc3 patches (except for
>>> > device properties and PCI stuff) which you could use for testing. If you
>>> > run with that, then I can get proper trace output and I can try to
>>> > figure out what's missing.
>>> > 
>>> > Branch is here:
>>> > 
>>> >   git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git usb/v4.4.21+dwc3
>>> 
>>> This branch does not generate the isoch traffic (on ep2in). ftrace
>>> attached (dwc3-g_webcam-v4.4.21+tp.ftrace).
>>> 
>>> I also attached the ftrace log for v4.4.21 tag
>>> (dwc3-g_webcam-v4.4.21.ftrace) for comparison, which has ep2in isoch
>>> traffic, but only one transaction per SOF.
>>
>> Sorry, I didn't realize the ftrace file size is huge. Attached the
>> tarball here.
>
> looking at webcam.c, it'll set wMaxPacket correctly (to 0x1400) if you
> pass streaming_maxpacket=3072. So that's one thing.
>
> I'll look at this log with more detail tomorrow, though.

here's a bug in composite.c because of a bug in usb_endpoint_maxp().

diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 32176f779861..f6a7583ab6d1 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -197,7 +197,7 @@ int config_ep_by_speed(struct usb_gadget *g,
 
 ep_found:
        /* commit results */
-       _ep->maxpacket = usb_endpoint_maxp(chosen_desc);
+       _ep->maxpacket = usb_endpoint_maxp(chosen_desc) & 0x7ff;
        _ep->desc = chosen_desc;
        _ep->comp_desc = NULL;
        _ep->maxburst = 0;

We have to fix it like this, at least for now, because changing
usb_endpoint_maxp() involves doing a complete audit of all call sites of
usb_endpoint_maxp(). I'll do that for v4.10 merge window.

Can you check that if this helps in any way?

-- 
balbi

Attachment: signature.asc
Description: PGP signature


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

  Powered by Linux