| From 41f2ae3ba1ab7c14aec129207a269112961bd201 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 18 Apr 2020 12:11:16 -0400 |
| Subject: usb: dwc3: gadget: don't enable interrupt when disabling endpoint |
| |
| [ Upstream commit c5353b225df9b2d0cf881873eef6f680e43c9aa2 ] |
| |
| Since we're disabling the endpoint anyway, we don't worry about |
| getting endpoint command completion interrupt. |
| |
| Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/usb/dwc3/gadget.c | 14 ++++++++------ |
| 1 file changed, 8 insertions(+), 6 deletions(-) |
| |
| diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c |
| index 7b8b463676ad6..019aee3a79568 100644 |
| --- a/drivers/usb/dwc3/gadget.c |
| +++ b/drivers/usb/dwc3/gadget.c |
| @@ -688,12 +688,13 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, unsigned int action) |
| return 0; |
| } |
| |
| -static void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force); |
| +static void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force, |
| + bool interrupt); |
| static void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep) |
| { |
| struct dwc3_request *req; |
| |
| - dwc3_stop_active_transfer(dep, true); |
| + dwc3_stop_active_transfer(dep, true, false); |
| |
| /* - giveback all requests to gadget driver */ |
| while (!list_empty(&dep->started_list)) { |
| @@ -1416,7 +1417,7 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, |
| } |
| if (r == req) { |
| /* wait until it is processed */ |
| - dwc3_stop_active_transfer(dep, true); |
| + dwc3_stop_active_transfer(dep, true, true); |
| |
| if (!r->trb) |
| goto out0; |
| @@ -2366,7 +2367,7 @@ static void dwc3_gadget_endpoint_transfer_in_progress(struct dwc3_ep *dep, |
| dwc3_gadget_ep_cleanup_completed_requests(dep, event, status); |
| |
| if (stop) { |
| - dwc3_stop_active_transfer(dep, true); |
| + dwc3_stop_active_transfer(dep, true, true); |
| dep->flags = DWC3_EP_ENABLED; |
| } |
| |
| @@ -2488,7 +2489,8 @@ static void dwc3_reset_gadget(struct dwc3 *dwc) |
| } |
| } |
| |
| -static void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force) |
| +static void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force, |
| + bool interrupt) |
| { |
| struct dwc3 *dwc = dep->dwc; |
| struct dwc3_gadget_ep_cmd_params params; |
| @@ -2532,7 +2534,7 @@ static void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force) |
| |
| cmd = DWC3_DEPCMD_ENDTRANSFER; |
| cmd |= force ? DWC3_DEPCMD_HIPRI_FORCERM : 0; |
| - cmd |= DWC3_DEPCMD_CMDIOC; |
| + cmd |= interrupt ? DWC3_DEPCMD_CMDIOC : 0; |
| cmd |= DWC3_DEPCMD_PARAM(dep->resource_index); |
| memset(¶ms, 0, sizeof(params)); |
| ret = dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms); |
| -- |
| 2.20.1 |
| |