Hello, On 7/23/2020 4:05 PM, Jun Li wrote: > Tejas Joglekar <Tejas.Joglekar@xxxxxxxxxxxx> 于2020年5月27日周三 下午7:54写道: >> >> The Synopsys xHC has an internal TRB cache of size TRB_CACHE_SIZE for >> each endpoint. The default value for TRB_CACHE_SIZE is 16 for SS and 8 >> for HS. The controller loads and updates the TRB cache from the >> transfer ring in system memory whenever the driver issues a start >> transfer or update transfer command. >> >> For chained TRBs, the Synopsys xHC requires that the total amount of >> bytes for all TRBs loaded in the TRB cache be greater than or equal to >> 1 MPS. Or the chain ends within the TRB cache (with a last TRB). >> >> If this requirement is not met, the controller will not be able to >> send or receive a packet and it will hang causing a driver timeout and >> error. > > Hi Tejas Joglekar > > I am debugging a similar issue on Synipsys XHC, it's not the same case > but I am wondering if it also linked to this HW limitation. > > My Synopsys XHC based host enable UAS, when enumerates a UAS > HDD, one BULK-IN EP with stream enabled will not generate event for > trb(with stream ID 1) after a 16/4096 bytes(with stream ID 2) finished in > previous trb. > > If I change the last OK urb/trb's buffer length from 4096 to 512, the issue > will gone. > > following is the sequence of the question EP-IN: > > <idle>-0 [000] d.h1 154.961710: xhci_urb_giveback: ep3in-bulk: > urb ffff0001775f6f00 pipe 3221324672 slot 1 length 36/36 sgs 1/1 > stream 1 flags 00040200 > <idle>-0 [000] d.h1 154.962023: xhci_urb_giveback: ep3in-bulk: > urb ffff000177d00400 pipe 3221324672 slot 1 length 96/96 sgs 1/1 > stream 1 flags 00040200 > <idle>-0 [000] d.h1 154.970395: xhci_urb_giveback: ep3in-bulk: > urb ffff000177d00400 pipe 3221324672 slot 1 length 11/255 sgs 1/1 > stream 1 flags 00040200 > <idle>-0 [000] d.h1 154.970562: xhci_urb_giveback: ep3in-bulk: > urb ffff000177d00400 pipe 3221324672 slot 1 length 20/255 sgs 1/1 > stream 1 flags 00040200 > <idle>-0 [000] d.h1 154.970786: xhci_urb_giveback: ep3in-bulk: > urb ffff000177d00400 pipe 3221324672 slot 1 length 60/255 sgs 1/1 > stream 1 flags 00040200 > <idle>-0 [000] d.h1 155.851600: xhci_urb_giveback: ep3in-bulk: > urb ffff000177d00200 pipe 3221324672 slot 1 length 16/4096 sgs 1/1 > stream 2 flags 00040200 > > /* then the next ep3-in trb will not generate event and stopped, so > driver timeout in the end */ > kworker/u8:2-349 [003] d..3 155.851987: xhci_urb_enqueue: > ep3in-bulk: urb ffff000170492400 pipe 3221324672 slot 1 length 0/32 > sgs 1/1 stream 1 flags 00040200 > kworker/u8:2-349 [003] d..4 155.851989: xhci_queue_trb: STREAM: > Buffer 00000000c19cf000 length 32 TD size 0 intr 0 type 'Normal' flags > b:i:I:c:s:I:e:c > kworker/u8:2-349 [003] d..4 155.851991: xhci_inc_enq: STREAM > ffff000177f86f80: enq 0x00000000be0eb060(0x00000000be0eb000) deq > 0x00000000be0eb050(0x00000000be0eb000) segs 2 stream 1 free_trbs 508 > bounce 1024 cycle 1 > > Do you have any ideas? > >From initial observation of your issue it seems to be unrelated with the changes in my patch. But could you please provide, USB analyzer trace logs for the working and non-working case? Also it would be helpful if you can provide device details which you are testing. > thanks > Li Jun Thanks & Regards, Tejas Joglekar