This is a note to let you know that I've just added the patch titled usb: musb: host: support DMA transfers greater than max channel length to my gregkh-2.6 tree which can be found in directory form at: http://www.kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/patches/ and in git form at: git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/patches.git The filename of this patch is: usb-musb-host-support-dma-transfers-greater-than-max-channel-length.patch The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.) If this patch meets the merge guidelines for a bugfix, it should be merged into Linus's tree before the next major kernel release. If not, it will be merged into Linus's tree during the next merge window. Either way, you will probably be copied on the patch when it gets sent to Linus for merging so that others can see what is happening in kernel development. If you have any questions about this process, please let me know. >From linux-usb-owner@xxxxxxxxxxxxxxx Tue Oct 5 13:30:06 2010 From: Felipe Balbi <balbi@xxxxxx> To: Greg KH <greg@xxxxxxxxx> Cc: Linux USB Mailing List <linux-usb@xxxxxxxxxxxxxxx>, "T. S., Anil Kumar" <anil@xxxxxx>, Felipe Balbi <balbi@xxxxxx> Subject: usb: musb: host: support DMA transfers greater than max channel length Date: Fri, 24 Sep 2010 13:44:09 +0300 Message-Id: <1285325055-1247-9-git-send-email-balbi@xxxxxx> From: T. S., Anil Kumar <anil@xxxxxx> Add support for MUSB Host DMA transfers greater than max channel length, so that such transfers won't be truncated. Signed-off-by: Anil Shetty <anil@xxxxxx> Signed-off-by: Felipe Balbi <balbi@xxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx> --- drivers/usb/musb/musb_host.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c @@ -1120,6 +1120,7 @@ void musb_host_tx(struct musb *musb, u8 u32 status = 0; void __iomem *mbase = musb->mregs; struct dma_channel *dma; + bool transfer_pending = false; musb_ep_select(mbase, epnum); tx_csr = musb_readw(epio, MUSB_TXCSR); @@ -1280,7 +1281,7 @@ void musb_host_tx(struct musb *musb, u8 offset = d->offset; length = d->length; } - } else if (dma) { + } else if (dma && urb->transfer_buffer_length == qh->offset) { done = true; } else { /* see if we need to send more data, or ZLP */ @@ -1293,6 +1294,7 @@ void musb_host_tx(struct musb *musb, u8 if (!done) { offset = qh->offset; length = urb->transfer_buffer_length - offset; + transfer_pending = true; } } } @@ -1312,7 +1314,7 @@ void musb_host_tx(struct musb *musb, u8 urb->actual_length = qh->offset; musb_advance_schedule(musb, urb, hw_ep, USB_DIR_OUT); return; - } else if (usb_pipeisoc(pipe) && dma) { + } else if ((usb_pipeisoc(pipe) || transfer_pending) && dma) { if (musb_tx_dma_program(musb->dma_controller, hw_ep, qh, urb, offset, length)) { if (is_cppi_enabled() || tusb_dma_omap()) -- 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