Tejas Joglekar <tejas.joglekar@xxxxxxxxxxxx> writes: > In stream mode, when fast-forwarding TRBs, the stream number > is not cleared causing the new stream to not get assigned. So > we don't want controller to carry on transfers when short packet > is received. So disable the CSP for stream capable endpoint. > > This is based on the 3.30a Programming guide, where table 3-1 > device descriptor structure field definitions says for CSP bit > If this bit is 0, the controller generates an XferComplete event > and remove the stream. So if we keep CSP as 1 then switching between > streams would not happen as in stream mode, when fast-forwarding > TRBs, the stream number is not cleared causing the new stream to not get > assigned. > > Signed-off-by: Tejas Joglekar <joglekar@xxxxxxxxxxxx> > --- > drivers/usb/dwc3/gadget.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c > index f1089ec..0d2afc1 100644 > --- a/drivers/usb/dwc3/gadget.c > +++ b/drivers/usb/dwc3/gadget.c > @@ -986,9 +986,15 @@ static void __dwc3_prepare_one_trb(struct dwc3_ep *dep, struct dwc3_trb *trb, > usb_endpoint_type(dep->endpoint.desc)); > } > > - /* always enable Continue on Short Packet */ > + /* > + * Enable Continue on Short Packet > + * when endpoint is not a stream capable > + */ > if (usb_endpoint_dir_out(dep->endpoint.desc)) { > - trb->ctrl |= DWC3_TRB_CTRL_CSP; > + if (dep->stream_capable) > + trb->ctrl &= ~DWC3_TRB_CTRL_CSP; Is this necessary? Or would it be enough to have this as: if (!dep->stream_capable) trb->ctrl |= DWC3_TRB_CTRL_CSP; -- balbi
Attachment:
signature.asc
Description: PGP signature