FAILED: patch "[PATCH] usb: chipidea: ci_hdrc_imx: implement usb_phy_init() error" failed to apply to 5.10-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.10.y
git checkout FETCH_HEAD
git cherry-pick -x 8c531e0a8c2d82509ad97c6d3a1e6217c7ed136d
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2025042856-rotten-chatty-2573@gregkh' --subject-prefix 'PATCH 5.10.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 8c531e0a8c2d82509ad97c6d3a1e6217c7ed136d Mon Sep 17 00:00:00 2001
From: Fedor Pchelkin <[email protected]>
Date: Sun, 16 Mar 2025 13:26:56 +0300
Subject: [PATCH] usb: chipidea: ci_hdrc_imx: implement usb_phy_init() error
handling
usb_phy_init() may return an error code if e.g. its implementation fails to prepare/enable some clocks. And properly rollback on probe error path by calling the counterpart usb_phy_shutdown().
Found by Linux Verification Center (linuxtesting.org).
drivers/usb/chipidea/ci_hdrc_imx.c +10 -3
@@ -484,7 +484,11 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev) of_usb_get_phy_mode(np) == USBPHY_INTERFACE_MODE_ULPI) { pdata.flags |=CI_HDRC_OVERRIDE_PHY_CONTROL ; data->override_phy_control = true; -usb_phy_init (pdata.usb_phy); + ret =usb_phy_init (pdata.usb_phy); +if (ret) { +dev_err (dev,"Failed to init phy\n" ); + goto err_clk; + } }if (pdata.flags &CI_HDRC_SUPPORTS_RUNTIME_PM )
@@ -493,7 +497,7 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev) ret =imx_usbmisc_init (data->usbmisc_data);if (ret) {dev_err (dev,"usbmisc init failed, ret=%d\n" , ret); - goto err_clk; + goto phy_shutdown; } data->ci_pdev = ci_hdrc_add_device(dev,
@@ -502,7 +506,7 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)if (IS_ERR (data->ci_pdev)) { ret =PTR_ERR (data->ci_pdev);dev_err_probe (dev, ret,"ci_hdrc_add_device failed\n" ); - goto err_clk; + goto phy_shutdown; }if (data->usbmisc_data) {
@@ -536,6 +540,9 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev) disable_device:ci_hdrc_remove_device (data->ci_pdev); +phy_shutdown: +if (data->override_phy_control) +usb_phy_shutdown (data->phy); err_clk:clk_disable_unprepare (data->clk_wakeup); err_wakeup_clk: