Takashi Iwai c2c827
From 2d7b78f59e020b07fc6338eefe286f54ee2d6773 Mon Sep 17 00:00:00 2001
Takashi Iwai c2c827
From: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Takashi Iwai c2c827
Date: Wed, 27 Nov 2019 13:10:54 -0800
Takashi Iwai c2c827
Subject: [PATCH] usb: dwc3: ep0: Clear started flag on completion
Takashi Iwai c2c827
Git-commit: 2d7b78f59e020b07fc6338eefe286f54ee2d6773
Takashi Iwai c2c827
Patch-mainline: v5.5-rc2
Takashi Iwai c2c827
References: bsc#1051510
Takashi Iwai c2c827
Takashi Iwai c2c827
Clear ep0's DWC3_EP_TRANSFER_STARTED flag if the END_TRANSFER command is
Takashi Iwai c2c827
completed. Otherwise, we can't start control transfer again after
Takashi Iwai c2c827
END_TRANSFER.
Takashi Iwai c2c827
Takashi Iwai c2c827
Cc: stable@vger.kernel.org
Takashi Iwai c2c827
Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
Takashi Iwai c2c827
Signed-off-by: Felipe Balbi <balbi@kernel.org>
Takashi Iwai c2c827
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai c2c827
Takashi Iwai c2c827
---
Takashi Iwai c2c827
 drivers/usb/dwc3/ep0.c | 8 ++++++++
Takashi Iwai c2c827
 1 file changed, 8 insertions(+)
Takashi Iwai c2c827
Takashi Iwai c2c827
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
Takashi Iwai c2c827
index 3996b9c4ff8d..fd1b100d2927 100644
Takashi Iwai c2c827
--- a/drivers/usb/dwc3/ep0.c
Takashi Iwai c2c827
+++ b/drivers/usb/dwc3/ep0.c
Takashi Iwai c2c827
@@ -1117,6 +1117,9 @@ static void dwc3_ep0_xfernotready(struct dwc3 *dwc,
Takashi Iwai c2c827
 void dwc3_ep0_interrupt(struct dwc3 *dwc,
Takashi Iwai c2c827
 		const struct dwc3_event_depevt *event)
Takashi Iwai c2c827
 {
Takashi Iwai c2c827
+	struct dwc3_ep	*dep = dwc->eps[event->endpoint_number];
Takashi Iwai c2c827
+	u8		cmd;
Takashi Iwai c2c827
+
Takashi Iwai c2c827
 	switch (event->endpoint_event) {
Takashi Iwai c2c827
 	case DWC3_DEPEVT_XFERCOMPLETE:
Takashi Iwai c2c827
 		dwc3_ep0_xfer_complete(dwc, event);
Takashi Iwai c2c827
@@ -1129,7 +1132,12 @@ void dwc3_ep0_interrupt(struct dwc3 *dwc,
Takashi Iwai c2c827
 	case DWC3_DEPEVT_XFERINPROGRESS:
Takashi Iwai c2c827
 	case DWC3_DEPEVT_RXTXFIFOEVT:
Takashi Iwai c2c827
 	case DWC3_DEPEVT_STREAMEVT:
Takashi Iwai c2c827
+		break;
Takashi Iwai c2c827
 	case DWC3_DEPEVT_EPCMDCMPLT:
Takashi Iwai c2c827
+		cmd = DEPEVT_PARAMETER_CMD(event->parameters);
Takashi Iwai c2c827
+
Takashi Iwai c2c827
+		if (cmd == DWC3_DEPCMD_ENDTRANSFER)
Takashi Iwai c2c827
+			dep->flags &= ~DWC3_EP_TRANSFER_STARTED;
Takashi Iwai c2c827
 		break;
Takashi Iwai c2c827
 	}
Takashi Iwai c2c827
 }
Takashi Iwai c2c827
-- 
Takashi Iwai c2c827
2.16.4
Takashi Iwai c2c827