Message ID | 65c3070c666cd6b8beeee62d7f8e3e704ebf2d32.1619134559.git.Thinh.Nguyen@synopsys.com |
---|---|
State | New |
Headers | show |
Series | usb: dwc3: gadget: Check new capability | expand |
Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes: > DWC_usb32 IP introduces a new behavior when handling NoStream event for > IN endpoints. If the controller is capable of DEV_TXF_FLUSH_BYPASS, then > the driver does not need to force to restart stream for IN endpoints. > The controller will generate ERDY and restart the stream periodically. > > Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> so we still need to force restart for RX? Just making sure. Other than that: Acked-by: Felipe Balbi <balbi@kernel.org>
Felipe Balbi wrote: > Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes: > >> DWC_usb32 IP introduces a new behavior when handling NoStream event for >> IN endpoints. If the controller is capable of DEV_TXF_FLUSH_BYPASS, then >> the driver does not need to force to restart stream for IN endpoints. >> The controller will generate ERDY and restart the stream periodically. >> >> Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> > > so we still need to force restart for RX? Just making sure. Other than > that: > > Acked-by: Felipe Balbi <balbi@kernel.org> > Yes, it's only for Tx. Same behavior remains for Rx. We have some updates to simplify our design handling Tx direction. Thanks, Thinh
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index b678200cc51e..b1e875c58f20 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h @@ -379,6 +379,9 @@ #define DWC3_GHWPARAMS7_RAM1_DEPTH(n) ((n) & 0xffff) #define DWC3_GHWPARAMS7_RAM2_DEPTH(n) (((n) >> 16) & 0xffff) +/* Global HWPARAMS9 Register */ +#define DWC3_GHWPARAMS9_DEV_TXF_FLUSH_BYPASS BIT(0) + /* Global Frame Length Adjustment Register */ #define DWC3_GFLADJ_30MHZ_SDBND_SEL BIT(7) #define DWC3_GFLADJ_30MHZ_MASK 0x3f diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 90f4f9e69b22..dd80e5ca8c78 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -730,8 +730,16 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, unsigned int action) * All stream eps will reinitiate stream on NoStream * rejection until we can determine that the host can * prime after the first transfer. + * + * However, if the controller is capable of + * TXF_FLUSH_BYPASS, then IN direction endpoints will + * automatically restart the stream without the driver + * initiation. */ - dep->flags |= DWC3_EP_FORCE_RESTART_STREAM; + if (!dep->direction || + !(dwc->hwparams.hwparams9 & + DWC3_GHWPARAMS9_DEV_TXF_FLUSH_BYPASS)) + dep->flags |= DWC3_EP_FORCE_RESTART_STREAM; } }
DWC_usb32 IP introduces a new behavior when handling NoStream event for IN endpoints. If the controller is capable of DEV_TXF_FLUSH_BYPASS, then the driver does not need to force to restart stream for IN endpoints. The controller will generate ERDY and restart the stream periodically. Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> --- drivers/usb/dwc3/core.h | 3 +++ drivers/usb/dwc3/gadget.c | 10 +++++++++- 2 files changed, 12 insertions(+), 1 deletion(-)