On 07/19/2013 10:26 AM, Rajaram R wrote: > We program the DMA only when we receive RX interrupt and when the > length of data is known. When you submit URB for RX the flow would be > something like musb_start_urb==>musb_ep_program, Note here we do not > program the DMA. DMA is programmed musb_host_rx using > "channel_program" callback. Note here we pass the length of data > received. > > Now in ux500_dma file 'ux500_dma_is_compatible' fails the dma > operation and the driver switches to FIFO mode in the same function > (musb_host_rx). Okay. This is completely different from what I expected. That means while the URB is submitting you only program the musb controller for receive and nothing else. The next interrupt will notify that the musb's endpoint fifo is filled with X bytes and you program the dma engine to transfer X bytes. And then you wait for another interrupt which says DMA transfer completed. So in that case you don't have that problem I though you do. Thank you for clearing that up. ux500_dma_is_compatible() is testing "length < 512" and "length & 3". This looks like the fifo can be filled with more than 512 bytes. Do you know on top of your head how much that can be? > > > Cheers Sebastian -- 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