Thread (3 messages) 3 messages, 2 authors, 2021-11-30

Re: [PATCH] usb: dwc3: gadget: Support Multi-Stream Transfer

From: Felipe Balbi <balbi@kernel.org>
Date: 2021-11-30 07:26:34

Hi Thinh,

Thinh Nguyen [off-list ref] writes:
Synopsys introduced a new enhancement to DWC_usb32 called Multi-Stream
Transfer (MST) to improve bulk streams performance for SuperSpeed and
SuperSpeed Plus. This enhancement allows the controller to look ahead
and process multiple bulk streams.
Finally!! This is a great improvement to the core :-)
Previously, to initiate a bulk stream transfer, the driver has to issue
Start Transfer command and wait for the stream to complete before
initiating a new stream. As a result, the controller does not process
TRBs beyond a single stream. With the enhancement, as long as there are
new requests, the dwc3 driver can keep preparing new TRBs and the
controller can keep caching and processing them without waiting for the
transfer completion.

The programming flow is similar to regular bulk endpoint with a few
additional rules:

1) Chained TRBs of the same stream must have a matching stream ID
2) The last TRB of a stream must have CHN=0
3) All the TRBs with LST=0 must have CSP=1

Depends on the application and usage, internal tests show significant
performance improvement in UASP transfers with this enhancement.
Does this mean that we can now issue Start Transfer for each of the
streams on the same endpoint? Should we start having per-stream TRBs,
then? Maybe we don't need a full 256 TRBs for each stream, perhaps 16 to
32 TRBs for each stream ought to be enough?

-- 
balbi
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help