Message ID | 20220725201136.7989-1-quic_wcheng@quicinc.com |
---|---|
State | Superseded |
Headers | show |
Series | usb: dwc3: gadget: Avoid duplicate requests to enable Run/Stop | expand |
On Mon, Jul 25, 2022 at 01:11:36PM -0700, Wesley Cheng wrote: > Relocate the pullups_connected check until after it is ensured that there > are no runtime PM transitions. If another context triggered the DWC3 > core's runtime resume, it may have already enabled the Run/Stop. Do not > re-run the entire pullup sequence again, as it may issue a core soft > reset while Run/Stop is already set. > > Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com> What commit does this fix? How far back should it go to stable kernels? thanks, greg k-h
Hi Greg, On 7/26/2022 8:43 AM, Greg KH wrote: > On Mon, Jul 25, 2022 at 01:11:36PM -0700, Wesley Cheng wrote: >> Relocate the pullups_connected check until after it is ensured that there >> are no runtime PM transitions. If another context triggered the DWC3 >> core's runtime resume, it may have already enabled the Run/Stop. Do not >> re-run the entire pullup sequence again, as it may issue a core soft >> reset while Run/Stop is already set. >> >> Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com> > > What commit does this fix? > > How far back should it go to stable kernels? > Let met add a fixes tag and resubmit. Thanks! Thanks Wesley Cheng
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index aeeec751c53c..67b1039c664c 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2539,9 +2539,6 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) is_on = !!is_on; - if (dwc->pullups_connected == is_on) - return 0; - dwc->softconnect = is_on; /* @@ -2566,6 +2563,9 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) return 0; } + if (dwc->pullups_connected == is_on) + return 0; + if (!is_on) { ret = dwc3_gadget_soft_disconnect(dwc); } else {
Relocate the pullups_connected check until after it is ensured that there are no runtime PM transitions. If another context triggered the DWC3 core's runtime resume, it may have already enabled the Run/Stop. Do not re-run the entire pullup sequence again, as it may issue a core soft reset while Run/Stop is already set. Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com> --- drivers/usb/dwc3/gadget.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)