On Tue, 19 Feb 2019, Stanislaw Gruszka wrote: > It would be interesting why urb->num_sgs = 0 & urb->sg cause > the troubles. This is how usb_sg_init() submit urbs for sg_tablesize = 0 > controllers. So either are there are some requirement on urb->sg > mapped via dma_map_page() (which mt76usb does not meet) not needed > for urb->transfer_buffer mapped via dma_map_single() or there > is something wrong in dwc2 with sg and this driver will not > work with urb_sg_init() as well. I don't have hardware to investigate > this and don't want to bother you with more patches. urb->sg != NULL and urb->num_sgs == 0 means that the transfer buffer must fit into a single page, which is pointed to by the first element of the scatterlist. But now that I look at the code in usb_sg_init(), it seems odd that the !use_sg case doesn't increment sg during each loop iteration. I don't see how that could possibly work -- it looks like a bug! Alan Stern