* [PATCH 3/3] usb: dwc3: xilinx: fix error handling in zynqmp init error paths [not found] <20260511160814.2904882-1-radhey.shyam.pandey@amd.com> @ 2026-05-11 16:08 ` Radhey Shyam Pandey 2026-05-14 1:43 ` Thinh Nguyen 0 siblings, 1 reply; 2+ messages in thread From: Radhey Shyam Pandey @ 2026-05-11 16:08 UTC (permalink / raw) To: Thinh.Nguyen, gregkh, michal.simek, p.zabel Cc: linux-usb, linux-arm-kernel, linux-kernel, git, Radhey Shyam Pandey, stable Fix error handling and resource cleanup i.e remove invalid phy_exit() after failed phy_init(), route failures through proper cleanup paths and return 0 explicitly on success. Fixes: 84770f028fab ("usb: dwc3: Add driver for Xilinx platforms") Cc: stable@vger.kernel.org Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com> --- drivers/usb/dwc3/dwc3-xilinx.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/drivers/usb/dwc3/dwc3-xilinx.c b/drivers/usb/dwc3/dwc3-xilinx.c index 94458b3da1a0..b832505e1b04 100644 --- a/drivers/usb/dwc3/dwc3-xilinx.c +++ b/drivers/usb/dwc3/dwc3-xilinx.c @@ -176,15 +176,13 @@ static int dwc3_xlnx_init_zynqmp(struct dwc3_xlnx *priv_data) } ret = phy_init(priv_data->usb3_phy); - if (ret < 0) { - phy_exit(priv_data->usb3_phy); + if (ret < 0) goto err; - } ret = reset_control_deassert(apbrst); if (ret < 0) { dev_err(dev, "Failed to release APB reset\n"); - goto err; + goto err_phy_exit; } if (priv_data->usb3_phy) { @@ -200,26 +198,24 @@ static int dwc3_xlnx_init_zynqmp(struct dwc3_xlnx *priv_data) ret = reset_control_deassert(crst); if (ret < 0) { dev_err(dev, "Failed to release core reset\n"); - goto err; + goto err_phy_exit; } ret = reset_control_deassert(hibrst); if (ret < 0) { dev_err(dev, "Failed to release hibernation reset\n"); - goto err; + goto err_phy_exit; } ret = phy_power_on(priv_data->usb3_phy); - if (ret < 0) { - phy_exit(priv_data->usb3_phy); - goto err; - } + if (ret < 0) + goto err_phy_exit; /* ulpi reset via gpio-modepin or gpio-framework driver */ reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); if (IS_ERR(reset_gpio)) { - return dev_err_probe(dev, PTR_ERR(reset_gpio), - "Failed to request reset GPIO\n"); + ret = PTR_ERR(reset_gpio); + goto err_phy_power_off; } if (reset_gpio) { @@ -229,6 +225,13 @@ static int dwc3_xlnx_init_zynqmp(struct dwc3_xlnx *priv_data) } dwc3_xlnx_set_coherency(priv_data, XLNX_USB_TRAFFIC_ROUTE_CONFIG); + + return 0; + +err_phy_power_off: + phy_power_off(priv_data->usb3_phy); +err_phy_exit: + phy_exit(priv_data->usb3_phy); err: return ret; } -- 2.44.4 ^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 3/3] usb: dwc3: xilinx: fix error handling in zynqmp init error paths 2026-05-11 16:08 ` [PATCH 3/3] usb: dwc3: xilinx: fix error handling in zynqmp init error paths Radhey Shyam Pandey @ 2026-05-14 1:43 ` Thinh Nguyen 0 siblings, 0 replies; 2+ messages in thread From: Thinh Nguyen @ 2026-05-14 1:43 UTC (permalink / raw) To: Radhey Shyam Pandey Cc: Thinh Nguyen, gregkh@linuxfoundation.org, michal.simek@amd.com, p.zabel@pengutronix.de, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, git@amd.com, stable@vger.kernel.org On Mon, May 11, 2026, Radhey Shyam Pandey wrote: > Fix error handling and resource cleanup i.e remove invalid > phy_exit() after failed phy_init(), route failures through > proper cleanup paths and return 0 explicitly on success. > > Fixes: 84770f028fab ("usb: dwc3: Add driver for Xilinx platforms") > Cc: stable@vger.kernel.org > Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com> > --- > drivers/usb/dwc3/dwc3-xilinx.c | 27 +++++++++++++++------------ > 1 file changed, 15 insertions(+), 12 deletions(-) > > diff --git a/drivers/usb/dwc3/dwc3-xilinx.c b/drivers/usb/dwc3/dwc3-xilinx.c > index 94458b3da1a0..b832505e1b04 100644 > --- a/drivers/usb/dwc3/dwc3-xilinx.c > +++ b/drivers/usb/dwc3/dwc3-xilinx.c > @@ -176,15 +176,13 @@ static int dwc3_xlnx_init_zynqmp(struct dwc3_xlnx *priv_data) > } > > ret = phy_init(priv_data->usb3_phy); > - if (ret < 0) { > - phy_exit(priv_data->usb3_phy); > + if (ret < 0) > goto err; > - } > > ret = reset_control_deassert(apbrst); > if (ret < 0) { > dev_err(dev, "Failed to release APB reset\n"); > - goto err; > + goto err_phy_exit; > } > > if (priv_data->usb3_phy) { > @@ -200,26 +198,24 @@ static int dwc3_xlnx_init_zynqmp(struct dwc3_xlnx *priv_data) > ret = reset_control_deassert(crst); > if (ret < 0) { > dev_err(dev, "Failed to release core reset\n"); > - goto err; > + goto err_phy_exit; > } > > ret = reset_control_deassert(hibrst); > if (ret < 0) { > dev_err(dev, "Failed to release hibernation reset\n"); > - goto err; > + goto err_phy_exit; > } > > ret = phy_power_on(priv_data->usb3_phy); > - if (ret < 0) { > - phy_exit(priv_data->usb3_phy); > - goto err; > - } > + if (ret < 0) > + goto err_phy_exit; > > /* ulpi reset via gpio-modepin or gpio-framework driver */ > reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); > if (IS_ERR(reset_gpio)) { > - return dev_err_probe(dev, PTR_ERR(reset_gpio), > - "Failed to request reset GPIO\n"); > + ret = PTR_ERR(reset_gpio); > + goto err_phy_power_off; > } > > if (reset_gpio) { > @@ -229,6 +225,13 @@ static int dwc3_xlnx_init_zynqmp(struct dwc3_xlnx *priv_data) > } > > dwc3_xlnx_set_coherency(priv_data, XLNX_USB_TRAFFIC_ROUTE_CONFIG); > + > + return 0; > + > +err_phy_power_off: > + phy_power_off(priv_data->usb3_phy); > +err_phy_exit: > + phy_exit(priv_data->usb3_phy); > err: > return ret; > } > -- > 2.44.4 > This fix should be a separate patch from this cleanup series. Thanks, Thinh ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-05-14 1:43 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260511160814.2904882-1-radhey.shyam.pandey@amd.com>
2026-05-11 16:08 ` [PATCH 3/3] usb: dwc3: xilinx: fix error handling in zynqmp init error paths Radhey Shyam Pandey
2026-05-14 1:43 ` Thinh Nguyen
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox