Hi, Bin Liu <b-liu@xxxxxx> writes: > On Wed, Sep 28, 2016 at 04:05:36PM +0300, Felipe Balbi wrote: >> We have introduced a helper to calculate multiplier >> value from wMaxPacketSize. Start using it. >> >> Cc: Bin Liu <b-liu@xxxxxx> >> Signed-off-by: Felipe Balbi <felipe.balbi@xxxxxxxxxxxxxxx> >> --- >> drivers/usb/musb/musb_gadget.c | 6 +++--- >> drivers/usb/musb/musb_host.c | 2 +- >> 2 files changed, 4 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c >> index bff4869a57cd..8a0882cc446d 100644 >> --- a/drivers/usb/musb/musb_gadget.c >> +++ b/drivers/usb/musb/musb_gadget.c >> @@ -974,8 +974,8 @@ static int musb_gadget_enable(struct usb_ep *ep, >> goto fail; >> >> /* REVISIT this rules out high bandwidth periodic transfers */ >> - tmp = usb_endpoint_maxp(desc); > > The bit 10~0 in tmp is also needed in the original code, no it's not >> - if (tmp & ~0x07ff) { >> + tmp = usb_endpoint_maxp_mult(desc) - 1; > > but here bit 10~0 is lost. here's the whole thing unpatched: > /* REVISIT this rules out high bandwidth periodic transfers */ > tmp = usb_endpoint_maxp(desc); > if (tmp & ~0x07ff) { so, if we have a mult setting > int ok; > > if (usb_endpoint_dir_in(desc)) > ok = musb->hb_iso_tx; > else > ok = musb->hb_iso_rx; > > if (!ok) { > musb_dbg(musb, "no support for high bandwidth ISO"); > goto fail; > } > musb_ep->hb_mult = (tmp >> 11) & 3; then we save the zero-based value in hb_mult > } else { > musb_ep->hb_mult = 0; otherwise, set it to 0. IOW, this could be rewritten as: int ok; [...] /* REVISIT this rules out high bandwidth periodic transfers */ tmp = usb_endpoint_maxp_mult(desc) - 1; if (usb_endpoint_dir_in(desc)) ok = musb->hb_iso_tx & tmp; else ok = musb->hb_iso_rx & tmp; if (!ok) { musb_dbg(musb, "no support for high bandwidth ISO"); goto fail; } musb_ep->hb_mult = tmp; And nothing would change. There is, however, one small problem with this patch, but that's a few lines after this chunk. Here's the incremental patch to fix it: diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index 0e3404ce9465..47304560f105 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c @@ -992,7 +992,7 @@ static int musb_gadget_enable(struct usb_ep *ep, musb_ep->hb_mult = 0; } - musb_ep->packet_sz = tmp & 0x7ff; + musb_ep->packet_sz = usb_endpoint_maxp(desc); tmp = musb_ep->packet_sz * (musb_ep->hb_mult + 1); /* enable the interrupts for the endpoint, set the endpoint And here's an entire new version: 8<------------------------------------------------------------------------------ From 9eec4692ab28bfd4336e2a5846f7fc5d90cd66e8 Mon Sep 17 00:00:00 2001 From: Felipe Balbi <felipe.balbi@xxxxxxxxxxxxxxx> Date: Wed, 28 Sep 2016 13:40:40 +0300 Subject: [PATCH] usb: musb: make use of new usb_endpoint_maxp_mult() We have introduced a helper to calculate multiplier value from wMaxPacketSize. Start using it. Cc: Bin Liu <b-liu@xxxxxx> Signed-off-by: Felipe Balbi <felipe.balbi@xxxxxxxxxxxxxxx> --- drivers/usb/musb/musb_gadget.c | 8 ++++---- drivers/usb/musb/musb_host.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index 4042ea017985..47304560f105 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c @@ -974,8 +974,8 @@ static int musb_gadget_enable(struct usb_ep *ep, goto fail; /* REVISIT this rules out high bandwidth periodic transfers */ - tmp = usb_endpoint_maxp(desc); - if (tmp & ~0x07ff) { + tmp = usb_endpoint_maxp_mult(desc) - 1; + if (tmp) { int ok; if (usb_endpoint_dir_in(desc)) @@ -987,12 +987,12 @@ static int musb_gadget_enable(struct usb_ep *ep, musb_dbg(musb, "no support for high bandwidth ISO"); goto fail; } - musb_ep->hb_mult = (tmp >> 11) & 3; + musb_ep->hb_mult = tmp; } else { musb_ep->hb_mult = 0; } - musb_ep->packet_sz = tmp & 0x7ff; + musb_ep->packet_sz = usb_endpoint_maxp(desc); tmp = musb_ep->packet_sz * (musb_ep->hb_mult + 1); /* enable the interrupts for the endpoint, set the endpoint diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c index 53bc4ceefe89..f6cdbad00dac 100644 --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c @@ -2237,7 +2237,7 @@ static int musb_urb_enqueue( * Some musb cores don't support high bandwidth ISO transfers; and * we don't (yet!) support high bandwidth interrupt transfers. */ - qh->hb_mult = 1 + ((qh->maxpacket >> 11) & 0x03); + qh->hb_mult = usb_endpoint_maxp_mult(epd); if (qh->hb_mult > 1) { int ok = (qh->type == USB_ENDPOINT_XFER_ISOC); -- 2.10.1 -- balbi
Attachment:
signature.asc
Description: PGP signature