Hi Felipie/Greg On Tue, Oct 30, 2012 at 6:17 PM, Felipe Balbi <balbi@xxxxxx> wrote: > Hi Greg, > > Judging by how things are going, this is likely to be my last pull request > for v3.7-rc cycle, unless someone finds a big regression which we really must > fix during v3.7-rc. > > It's rather small; just a revert, a Kconfig change and the addition of a > variable to a function. In fact, it's so small that I've added the full > combined diff below FYI. > > Let me know if you want me to change anything. > > cheers > > The following changes since commit 1cb60156defa4f23d5318ea1ddd400f25b2d0ce5: > > usb: renesas_usbhs: fixup dma transfer stall (2012-10-23 09:44:37 +0300) > > are available in the git repository at: > > git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git tags/fixes-for-v3.7-rc4 > > for you to fetch changes up to f6bc8c29383456b89ac1b6f1aa768d195670fb53: > > usb: otg: Fix build errors if USB_MUSB_OMAP2PLUS is selected as module (2012-10-30 14:37:07 +0200) > > ---------------------------------------------------------------- > usb: fixes for v3.7-rc4 > > We're reverting MUSB Mode 1 DMA patch which caused many regressions. Meanwhile > Roger is cooking a better version of that patch, which will hopefully be ready > for v3.8 merge window. > > We also fix an undeclared error in ux5000_remove() and another build error > when we try to build USB_MUSB_OMAP2PLUS as a module. > > ---------------------------------------------------------------- > Felipe Balbi (1): > Revert "usb: musb: use DMA mode 1 whenever possible" > > Roger Quadros (1): > usb: otg: Fix build errors if USB_MUSB_OMAP2PLUS is selected as module > > Wei Yongjun (1): > usb: musb: ux500: fix 'musbid' undeclared error in ux500_remove() This patch is incorrect. Please dont merge this patch. > > drivers/usb/musb/musb_gadget.c | 30 ++++++++++++++++++++++++++---- > drivers/usb/musb/ux500.c | 2 +- > drivers/usb/otg/Kconfig | 4 ++-- > 3 files changed, 29 insertions(+), 7 deletions(-) > > diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c > index d0b87e7..b6b84da 100644 > --- a/drivers/usb/musb/musb_gadget.c > +++ b/drivers/usb/musb/musb_gadget.c > @@ -707,11 +707,12 @@ static void rxstate(struct musb *musb, struct musb_request *req) > fifo_count = musb_readw(epio, MUSB_RXCOUNT); > > /* > - * use mode 1 only if we expect data of at least ep packet_sz > - * and have not yet received a short packet > + * Enable Mode 1 on RX transfers only when short_not_ok flag > + * is set. Currently short_not_ok flag is set only from > + * file_storage and f_mass_storage drivers > */ > - if ((request->length - request->actual >= musb_ep->packet_sz) && > - (fifo_count >= musb_ep->packet_sz)) > + > + if (request->short_not_ok && fifo_count == musb_ep->packet_sz) > use_mode_1 = 1; > else > use_mode_1 = 0; > @@ -727,6 +728,27 @@ static void rxstate(struct musb *musb, struct musb_request *req) > c = musb->dma_controller; > channel = musb_ep->dma; > > + /* We use DMA Req mode 0 in rx_csr, and DMA controller operates in > + * mode 0 only. So we do not get endpoint interrupts due to DMA > + * completion. We only get interrupts from DMA controller. > + * > + * We could operate in DMA mode 1 if we knew the size of the tranfer > + * in advance. For mass storage class, request->length = what the host > + * sends, so that'd work. But for pretty much everything else, > + * request->length is routinely more than what the host sends. For > + * most these gadgets, end of is signified either by a short packet, > + * or filling the last byte of the buffer. (Sending extra data in > + * that last pckate should trigger an overflow fault.) But in mode 1, > + * we don't get DMA completion interrupt for short packets. > + * > + * Theoretically, we could enable DMAReq irq (MUSB_RXCSR_DMAMODE = 1), > + * to get endpoint interrupt on every DMA req, but that didn't seem > + * to work reliably. > + * > + * REVISIT an updated g_file_storage can set req->short_not_ok, which > + * then becomes usable as a runtime "use mode 1" hint... > + */ > + > /* Experimental: Mode1 works with mass storage use cases */ > if (use_mode_1) { > csr |= MUSB_RXCSR_AUTOCLEAR; > diff --git a/drivers/usb/musb/ux500.c b/drivers/usb/musb/ux500.c > index d62a91f..0e62f50 100644 > --- a/drivers/usb/musb/ux500.c > +++ b/drivers/usb/musb/ux500.c > @@ -65,7 +65,7 @@ static int __devinit ux500_probe(struct platform_device *pdev) > struct platform_device *musb; > struct ux500_glue *glue; > struct clk *clk; > - > + int musbid; > int ret = -ENOMEM; > > glue = kzalloc(sizeof(*glue), GFP_KERNEL); > diff --git a/drivers/usb/otg/Kconfig b/drivers/usb/otg/Kconfig > index d8c8a42..6223062 100644 > --- a/drivers/usb/otg/Kconfig > +++ b/drivers/usb/otg/Kconfig > @@ -58,7 +58,7 @@ config USB_ULPI_VIEWPORT > > config TWL4030_USB > tristate "TWL4030 USB Transceiver Driver" > - depends on TWL4030_CORE && REGULATOR_TWL4030 > + depends on TWL4030_CORE && REGULATOR_TWL4030 && USB_MUSB_OMAP2PLUS > select USB_OTG_UTILS > help > Enable this to support the USB OTG transceiver on TWL4030 > @@ -68,7 +68,7 @@ config TWL4030_USB > > config TWL6030_USB > tristate "TWL6030 USB Transceiver Driver" > - depends on TWL4030_CORE && OMAP_USB2 > + depends on TWL4030_CORE && OMAP_USB2 && USB_MUSB_OMAP2PLUS > select USB_OTG_UTILS > help > Enable this to support the USB OTG transceiver on TWL6030 > -- > 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 -- 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