[PATCH 07/11] USB: dwc3: clean up phy init error handling

Johan Hovold posted 11 patches 2 years, 10 months ago
[PATCH 07/11] USB: dwc3: clean up phy init error handling
Posted by Johan Hovold 2 years, 10 months ago
While there likely are no platforms out there that mix generic and
legacy PHYs the driver should still be able to handle that, if only for
consistency reasons.

Add the missing calls to shutdown any legacy PHYs if generic PHY
initialisation fails.

Note that we continue to happily ignore potential errors from the legacy
PHY callbacks...

Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
---
 drivers/usb/dwc3/core.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index de84e057d28b..15405f1f7aef 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -1031,15 +1031,14 @@ static int dwc3_core_init(struct dwc3 *dwc)
 
 	usb_phy_init(dwc->usb2_phy);
 	usb_phy_init(dwc->usb3_phy);
+
 	ret = phy_init(dwc->usb2_generic_phy);
 	if (ret < 0)
-		goto err0a;
+		goto err_shutdown_usb3_phy;
 
 	ret = phy_init(dwc->usb3_generic_phy);
-	if (ret < 0) {
-		phy_exit(dwc->usb2_generic_phy);
-		goto err0a;
-	}
+	if (ret < 0)
+		goto err_exit_usb2_phy;
 
 	ret = dwc3_core_soft_reset(dwc);
 	if (ret)
@@ -1215,11 +1214,12 @@ static int dwc3_core_init(struct dwc3 *dwc)
 	usb_phy_set_suspend(dwc->usb3_phy, 1);
 
 err1:
-	usb_phy_shutdown(dwc->usb2_phy);
-	usb_phy_shutdown(dwc->usb3_phy);
-	phy_exit(dwc->usb2_generic_phy);
 	phy_exit(dwc->usb3_generic_phy);
-
+err_exit_usb2_phy:
+	phy_exit(dwc->usb2_generic_phy);
+err_shutdown_usb3_phy:
+	usb_phy_shutdown(dwc->usb3_phy);
+	usb_phy_shutdown(dwc->usb2_phy);
 err0a:
 	dwc3_ulpi_exit(dwc);
 
-- 
2.39.2
Re: [PATCH 07/11] USB: dwc3: clean up phy init error handling
Posted by Thinh Nguyen 2 years, 10 months ago
On Tue, Apr 04, 2023, Johan Hovold wrote:
> While there likely are no platforms out there that mix generic and
> legacy PHYs the driver should still be able to handle that, if only for
> consistency reasons.
> 
> Add the missing calls to shutdown any legacy PHYs if generic PHY
> initialisation fails.
> 
> Note that we continue to happily ignore potential errors from the legacy
> PHY callbacks...
> 
> Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
> ---
>  drivers/usb/dwc3/core.c | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index de84e057d28b..15405f1f7aef 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -1031,15 +1031,14 @@ static int dwc3_core_init(struct dwc3 *dwc)
>  
>  	usb_phy_init(dwc->usb2_phy);
>  	usb_phy_init(dwc->usb3_phy);
> +
>  	ret = phy_init(dwc->usb2_generic_phy);
>  	if (ret < 0)
> -		goto err0a;
> +		goto err_shutdown_usb3_phy;
>  
>  	ret = phy_init(dwc->usb3_generic_phy);
> -	if (ret < 0) {
> -		phy_exit(dwc->usb2_generic_phy);
> -		goto err0a;
> -	}
> +	if (ret < 0)
> +		goto err_exit_usb2_phy;
>  
>  	ret = dwc3_core_soft_reset(dwc);
>  	if (ret)
> @@ -1215,11 +1214,12 @@ static int dwc3_core_init(struct dwc3 *dwc)
>  	usb_phy_set_suspend(dwc->usb3_phy, 1);
>  
>  err1:
> -	usb_phy_shutdown(dwc->usb2_phy);
> -	usb_phy_shutdown(dwc->usb3_phy);
> -	phy_exit(dwc->usb2_generic_phy);
>  	phy_exit(dwc->usb3_generic_phy);
> -
> +err_exit_usb2_phy:
> +	phy_exit(dwc->usb2_generic_phy);
> +err_shutdown_usb3_phy:
> +	usb_phy_shutdown(dwc->usb3_phy);
> +	usb_phy_shutdown(dwc->usb2_phy);
>  err0a:
>  	dwc3_ulpi_exit(dwc);
>  
> -- 
> 2.39.2
> 

Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>

Thanks,
Thinh