summaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3
diff options
context:
space:
mode:
authorKrishna Kurapati <quic_kriskura@quicinc.com>2023-05-10 13:22:51 +0530
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-05-13 19:00:18 +0900
commit813f44d57e19ccaa7330e829bd913515be42719d (patch)
tree137d6b556e282810387405935ff637ee88f8a0e7 /drivers/usb/dwc3
parentada050c69108bc34be13ecc11f7fad0f20ebadc4 (diff)
downloadlinux-stable-813f44d57e19ccaa7330e829bd913515be42719d.tar.gz
linux-stable-813f44d57e19ccaa7330e829bd913515be42719d.tar.bz2
linux-stable-813f44d57e19ccaa7330e829bd913515be42719d.zip
usb: dwc3: gadget: Bail out in pullup if soft reset timeout happens
If the core soft reset timeout happens, avoid setting up event buffers and starting gadget as the writes to these registers may not reflect when in reset and setting the run stop bit can lead the controller to access wrong event buffer address resulting in a crash. Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com> Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> Link: https://lore.kernel.org/r/20230510075252.31023-2-quic_kriskura@quicinc.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/dwc3')
-rw-r--r--drivers/usb/dwc3/gadget.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 7163d5d0eea0..5965796bc5d5 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2746,13 +2746,16 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
* device-initiated disconnect requires a core soft reset
* (DCTL.CSftRst) before enabling the run/stop bit.
*/
- dwc3_core_soft_reset(dwc);
+ ret = dwc3_core_soft_reset(dwc);
+ if (ret)
+ goto done;
dwc3_event_buffers_setup(dwc);
__dwc3_gadget_start(dwc);
ret = dwc3_gadget_run_stop(dwc, true);
}
+done:
pm_runtime_put(dwc->dev);
return ret;