On Fri, 20 Aug 2010, Maulik Mankad wrote: > The USB stack maps the buffer for DMA if the controller supports DMA. > MUSB controller can perform DMA as well as PIO transfers. > The buffer needs to be unmapped before CPU can perform > PIO data transfers. > > Signed-off-by: Maulik Mankad <x0082077@xxxxxx> > Cc: Felipe Balbi <felipe.balbi@xxxxxxxxx> > --- > Based on 2.6.36-rc1 > Index: mainline/drivers/usb/musb/musb_host.c > =================================================================== > --- mainline.orig/drivers/usb/musb/musb_host.c > +++ mainline/drivers/usb/musb/musb_host.c > @@ -41,6 +41,7 @@ > #include <linux/errno.h> > #include <linux/init.h> > #include <linux/list.h> > +#include <linux/dma-mapping.h> > > #include "musb_core.h" > #include "musb_host.h" > @@ -1326,6 +1327,15 @@ void musb_host_tx(struct musb *musb, u8 > */ > if (length > qh->maxpacket) > length = qh->maxpacket; > + /* Unmap the buffer so that CPU can use it */ > + if (urb->transfer_flags & URB_DMA_MAP_PAGE) { > + dma_unmap_page(musb->controller, > + urb->transfer_dma, > + urb->transfer_buffer_length, > + DMA_FROM_DEVICE); > + > + urb->transfer_flags &= ~URB_DMA_MAP_PAGE; > + } I can't tell if it would be correct here, but have you considered just calling unmap_urb_for_dma() instead? (You'd have to make that routine non-static and EXPORT it first.) Alan Stern -- 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