On 4/8/2021 1:46 PM, Artur Petrosyan wrote: > When dwc2 core is in partial power down mode > loading driver again causes driver fail. Because in > that mode registers are not accessible. > > Added a flow of exiting the partial power down mode > to avoid the driver reload failure. > > Signed-off-by: Artur Petrosyan <Arthur.Petrosyan@xxxxxxxxxxxx> Acked-by: Minas Harutyunyan <Minas.Harutyunyan@xxxxxxxxxxxx> > --- > Changes in v3: > - None > Changes in v2: > - None > > drivers/usb/dwc2/platform.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c > index 5f18acac7406..b28b8cd45799 100644 > --- a/drivers/usb/dwc2/platform.c > +++ b/drivers/usb/dwc2/platform.c > @@ -316,6 +316,15 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg) > static int dwc2_driver_remove(struct platform_device *dev) > { > struct dwc2_hsotg *hsotg = platform_get_drvdata(dev); > + int ret = 0; > + > + /* Exit Partial Power Down when driver is removed. */ > + if (hsotg->in_ppd) { > + ret = dwc2_exit_partial_power_down(hsotg, 0, true); > + if (ret) > + dev_err(hsotg->dev, > + "exit partial_power_down failed\n"); > + } > > dwc2_debugfs_exit(hsotg); > if (hsotg->hcd_enabled) > @@ -334,7 +343,7 @@ static int dwc2_driver_remove(struct platform_device *dev) > reset_control_assert(hsotg->reset); > reset_control_assert(hsotg->reset_ecc); > > - return 0; > + return ret; > } > > /** >