Hi, Bin Liu <[email protected]> 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 <[email protected]> >> Signed-off-by: Felipe Balbi <[email protected]> >> --- >> 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 <[email protected]>
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 <[email protected]>
Signed-off-by: Felipe Balbi <[email protected]>
---
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
signature.asc
Description: PGP signature
