On Wednesday 25 March 2009, Ming Lei wrote: > I also find such issues in other hardware(surely not use Mentor IP). Another observation is that for some reason, all USB peripheral hardware I've seen has a hard time getting OUT transfers to work cleanly. Especially with DMA. Double buffering support in hardware helps, but there always seem to be some extra troublesome corner cases with OUT cases that don't show up with IN. It's not just short packet terminations on transfers; there are a lot of other strange interactions. > I use Mentor's dma and don't enable CPPI, and find the > similar problem with CONFIG_MUSB_PIO_ONLY=y. PIO_ONLY would be *without* Mentor's DMA. :) I'm not sure anyone actually turned on the double buffering support in the musb_hdrc driver. I tried it at one point and didn't have much success. Having that would help. > I guess the reason is related with PING for the poor bulk out > performance compared with bulk in. Bulk in transfer can > move data from sdram to udc fifo before incoming in token, but > bulk out can not receive data in advance, so it is very quick to fill > udc fifo with incoming data and leads to continuous PING packets > from host until unloading all data from fifo to sdram. ... unless double buffering is in use, yes. Having that work would be the single biggest performance improvement one could make in musb_hdrc peripheral behavior, I suspect. - Dave -- 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