From f3dae06c15296e35890e10f8f355b31ac740b30a Mon Sep 17 00:00:00 2001 From: AKASH KUMAR Date: Mon, 13 Mar 2023 13:43:08 +0530 Subject: [PATCH] dwc3: Add check for sg queued trbs while reclaiming If we're in the middle of series of chained TRBs, DWC3 will avoid clearing HWO and SW has to do it manually. We are doing it while reclaiming trbs for sg transfers. Add check for sg queued trb and reclaim it as DWC3 skips clearing HWO bit during sg transfers. Change-Id: I200254728c0549da6534aea51daad94be6b6295e Signed-off-by: AKASH KUMAR --- drivers/usb/dwc3/gadget.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index f25bf76dafe3..a8caaab0eb52 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -3277,7 +3277,13 @@ static int dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep, * processed by the core. Hence do not reclaim it until * it is processed by the core. */ - if (req->trb->ctrl & DWC3_TRB_CTRL_HWO) { + /* + * If sg transfer are in progress, avoid checking + * HWO bit here as these will get cleared during + * ep reclaim. + */ + if ((req->trb->ctrl & DWC3_TRB_CTRL_HWO) + && (req->num_queued_sgs == 0)) { dbg_event(0xFF, "PEND TRB", dep->number); return 1; }