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?

Reply via email to