Message ID | 20230404072524.19014-2-johan+linaro@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 9a8ad10c9f2e0925ff26308ec6756b93fc2f4977 |
Headers | show |
Series | USB: dwc3: error handling fixes and cleanups | expand |
On Tue, Apr 04, 2023, Johan Hovold wrote: > Make sure not to suspend the device when probe fails to avoid disabling > clocks and phys multiple times. > > Fixes: 328082376aea ("usb: dwc3: fix runtime PM in error path") > Cc: stable@vger.kernel.org # 4.8 > Cc: Roger Quadros <rogerq@ti.com> > Signed-off-by: Johan Hovold <johan+linaro@kernel.org> > --- > drivers/usb/dwc3/core.c | 14 +++++--------- > 1 file changed, 5 insertions(+), 9 deletions(-) > > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c > index 476b63618511..5058bd8d56ca 100644 > --- a/drivers/usb/dwc3/core.c > +++ b/drivers/usb/dwc3/core.c > @@ -1883,13 +1883,11 @@ static int dwc3_probe(struct platform_device *pdev) > spin_lock_init(&dwc->lock); > mutex_init(&dwc->mutex); > > + pm_runtime_get_noresume(dev); > pm_runtime_set_active(dev); > pm_runtime_use_autosuspend(dev); > pm_runtime_set_autosuspend_delay(dev, DWC3_DEFAULT_AUTOSUSPEND_DELAY); > pm_runtime_enable(dev); > - ret = pm_runtime_get_sync(dev); > - if (ret < 0) > - goto err1; > > pm_runtime_forbid(dev); > > @@ -1954,12 +1952,10 @@ static int dwc3_probe(struct platform_device *pdev) > dwc3_free_event_buffers(dwc); > > err2: > - pm_runtime_allow(&pdev->dev); > - > -err1: > - pm_runtime_put_sync(&pdev->dev); > - pm_runtime_disable(&pdev->dev); > - > + pm_runtime_allow(dev); > + pm_runtime_disable(dev); > + pm_runtime_set_suspended(dev); > + pm_runtime_put_noidle(dev); > disable_clks: > dwc3_clk_disable(dwc); > assert_reset: > -- > 2.39.2 > Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> Thanks, Thinh
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 476b63618511..5058bd8d56ca 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -1883,13 +1883,11 @@ static int dwc3_probe(struct platform_device *pdev) spin_lock_init(&dwc->lock); mutex_init(&dwc->mutex); + pm_runtime_get_noresume(dev); pm_runtime_set_active(dev); pm_runtime_use_autosuspend(dev); pm_runtime_set_autosuspend_delay(dev, DWC3_DEFAULT_AUTOSUSPEND_DELAY); pm_runtime_enable(dev); - ret = pm_runtime_get_sync(dev); - if (ret < 0) - goto err1; pm_runtime_forbid(dev); @@ -1954,12 +1952,10 @@ static int dwc3_probe(struct platform_device *pdev) dwc3_free_event_buffers(dwc); err2: - pm_runtime_allow(&pdev->dev); - -err1: - pm_runtime_put_sync(&pdev->dev); - pm_runtime_disable(&pdev->dev); - + pm_runtime_allow(dev); + pm_runtime_disable(dev); + pm_runtime_set_suspended(dev); + pm_runtime_put_noidle(dev); disable_clks: dwc3_clk_disable(dwc); assert_reset:
Make sure not to suspend the device when probe fails to avoid disabling clocks and phys multiple times. Fixes: 328082376aea ("usb: dwc3: fix runtime PM in error path") Cc: stable@vger.kernel.org # 4.8 Cc: Roger Quadros <rogerq@ti.com> Signed-off-by: Johan Hovold <johan+linaro@kernel.org> --- drivers/usb/dwc3/core.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-)