USB: dwc3: clean up phy init error handling
authorJohan Hovold <johan+linaro@kernel.org>
Tue, 4 Apr 2023 07:25:20 +0000 (09:25 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 20 Apr 2023 08:18:22 +0000 (10:18 +0200)
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...

Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
Link: https://lore.kernel.org/r/20230404072524.19014-8-johan+linaro@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/dwc3/core.c

index e9cba095394c5ac63d8bb6f844b764ddd00d1cea..c2326a37cd74be022a7421635b6da99159785efa 100644 (file)
@@ -1041,15 +1041,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)
@@ -1225,11 +1224,12 @@ err2:
        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);