This patch doesn't apply to the .36 stable tree If someone wants it applied there, please email the backport to [email protected]
thanks, greg k-h > commit: 31c9909b512aa4c97cffc40627c255070fe0bc78 > From: Ming Lei <[email protected]> > Date: Tue, 19 Oct 2010 19:08:25 -0500 > Subject: [PATCH] USB: musb: gadget: fix MUSB_TXMAXP and MUSB_RXMAXP > configuration > > Commit 9f445cb29918dc488b7a9a92ef018599cce33df7[USB: musb: disable > double buffering for older RTL versions] tries to disable double > buffer mode by writing endpoint hw max packet size to TXMAP/RXMAP. > > First the approach can break full speed and cause overflow problems. > We should always set those registers with the actual max packet size > from endpoint descriptor. > > Second, the problem describe by commit > 9f445cb29918dc488b7a9a92ef018599cce33df7 > was caused by musb gadget driver; nothing to do with RTL revision as > originaly suspected. > > The real fix to the problem is to always use actual max packet > size from endpoint descriptor to config TXMAP/RXMAP registers. > > Cc: Cliff Cai <[email protected]> > Cc: David Brownell <[email protected]> > Cc: Anand Gadiyar <[email protected]> > Cc: Mike Frysinger <[email protected]> > Cc: Sergei Shtylyov <[email protected]> > Cc: [email protected] > Signed-off-by: Ming Lei <[email protected]> > Signed-off-by: Felipe Balbi <[email protected]> > --- > drivers/usb/musb/musb_gadget.c | 13 +++---------- > 1 files changed, 3 insertions(+), 10 deletions(-) > > diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c > index ba22e4a..f37b859 100644 > --- a/drivers/usb/musb/musb_gadget.c > +++ b/drivers/usb/musb/musb_gadget.c > @@ -926,13 +926,9 @@ static int musb_gadget_enable(struct usb_ep *ep, > * likewise high bandwidth periodic tx > */ > /* Set TXMAXP with the FIFO size of the endpoint > - * to disable double buffering mode. Currently, It seems that > double > - * buffering has problem if musb RTL revision number < 2.0. > + * to disable double buffering mode. > */ > - if (musb->hwvers < MUSB_HWVERS_2000) > - musb_writew(regs, MUSB_TXMAXP, hw_ep->max_packet_sz_tx); > - else > - musb_writew(regs, MUSB_TXMAXP, musb_ep->packet_sz | > (musb_ep->hb_mult << 11)); > + musb_writew(regs, MUSB_TXMAXP, musb_ep->packet_sz | > (musb_ep->hb_mult << 11)); > > csr = MUSB_TXCSR_MODE | MUSB_TXCSR_CLRDATATOG; > if (musb_readw(regs, MUSB_TXCSR) > @@ -968,10 +964,7 @@ static int musb_gadget_enable(struct usb_ep *ep, > /* Set RXMAXP with the FIFO size of the endpoint > * to disable double buffering mode. > */ > - if (musb->hwvers < MUSB_HWVERS_2000) > - musb_writew(regs, MUSB_RXMAXP, hw_ep->max_packet_sz_rx); > - else > - musb_writew(regs, MUSB_RXMAXP, musb_ep->packet_sz | > (musb_ep->hb_mult << 11)); > + musb_writew(regs, MUSB_RXMAXP, musb_ep->packet_sz | > (musb_ep->hb_mult << 11)); > > /* force shared fifo to OUT-only mode */ > if (hw_ep->is_shared_fifo) { > > _______________________________________________ > stable mailing list > [email protected] > http://linux.kernel.org/mailman/listinfo/stable _______________________________________________ stable mailing list [email protected] http://linux.kernel.org/mailman/listinfo/stable
