On Fri, Jul 19, 2013 at 2:23 PM, Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> wrote: > 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? That was work in progress. You may wish to look at this patch http://permalink.gmane.org/gmane.linux.usb.general/79858 If a device sends 513 bytes to a musb device. 512 bytes will be received in DMA mode and 1 byte in FIFO mode. FIFO will always handle data < 512. > >> >> >> 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