On Thu, Feb 21, 2019 at 03:56:57PM +0100, Stefan Sperling wrote: > On Thu, Feb 21, 2019 at 10:50:40AM +0100, Patrick Wildt wrote: > > Hi, > > > > on my i.MX8M machine which features a DWC3 xHCI 1.10 controller I have > > seen this error while installing base64.tgz or running fsck: > > > > umass0: Invalid CSW: sig 0x43425355 should be 0x53425355 > > > > As it turns out using a USB protocol analyzer, the transfers actually > > seem fine, the USB mass storage is not responding nonsense. By further > > looking into it I realized that our xhci(4) is told the transfer was > > completed, even though the buffer had not been touched. > > > > Further debugging revealed that the issue occured when a transfer that > > spans multiple TRBs loops over the ring. This means one TRB is using > > idx 254, the next TRB is the link TRB which does not contain data and > > sits at idx 255, and the following data TRB is using idx 0. > > > > Transfers that comprise of multiple TRBs must have the chain bit set in > > all but the last TRB. Now in this case the link TRB which sits in the > > middle does not get the chain bit set, and thus processing stops. > > > > Somewhere I have seen code that always sets the chain bit in the link > > TRB, so I'm wondering if we should follow that too. For now I think the > > easiest fix for this is to set the chain bit in the link TRB if the > > transfer spans multiple TRBs. > > > > Feedback? > > Is this why the #if 0 isochronous transfer code doesn't work? >
That's possible. Do you have a device you could test this with?
