55 lines
1.9 KiB
Diff
55 lines
1.9 KiB
Diff
From git@z Thu Jan 1 00:00:00 1970
|
|
Subject: [PATCH v13 2/35] phy: rockchip: usbdp: Update mode_change after
|
|
error handling
|
|
From: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
Date: Tue, 14 Jul 2026 21:26:03 +0200
|
|
Message-Id: <20260714-rockchip-usbdp-cleanup-v13-2-6cb3e769d4c5@collabora.com>
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset="utf-8"
|
|
Content-Transfer-Encoding: 7bit
|
|
|
|
If rk_udphy_init() or rk_udphy_setup() fails, the reinit will not be
|
|
tried again. Fix this by only updating the variable after all potential
|
|
errors have been handled.
|
|
|
|
Note, that no errors have been seen on real hardware and failures would
|
|
most likely be fatal and require at least a full reboot as the function
|
|
already asserts the PHY reset lines. So this is more of a theoretical
|
|
issue.
|
|
|
|
Fixes: 2f70bbddeb45 ("phy: rockchip: add usbdp combo phy driver")
|
|
Reported-by: Sashiko <sashiko-bot@kernel.org>
|
|
Closes: https://lore.kernel.org/linux-phy/20260612163835.8D5471F000E9@smtp.kernel.org/
|
|
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
---
|
|
drivers/phy/rockchip/phy-rockchip-usbdp.c | 4 ++--
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
|
|
--- a/drivers/phy/rockchip/phy-rockchip-usbdp.c
|
|
+++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c
|
|
@@ -1000,15 +1000,14 @@ static int rk_udphy_power_on(struct rk_u
|
|
}
|
|
|
|
if (udphy->status == UDPHY_MODE_NONE) {
|
|
- udphy->mode_change = false;
|
|
ret = rk_udphy_setup(udphy);
|
|
if (ret)
|
|
return ret;
|
|
|
|
if (udphy->mode & UDPHY_MODE_USB)
|
|
rk_udphy_u3_port_disable(udphy, false);
|
|
- } else if (udphy->mode_change) {
|
|
udphy->mode_change = false;
|
|
+ } else if (udphy->mode_change) {
|
|
udphy->status = UDPHY_MODE_NONE;
|
|
if (udphy->mode == UDPHY_MODE_DP)
|
|
rk_udphy_u3_port_disable(udphy, true);
|
|
@@ -1017,6 +1016,7 @@ static int rk_udphy_power_on(struct rk_u
|
|
ret = rk_udphy_setup(udphy);
|
|
if (ret)
|
|
return ret;
|
|
+ udphy->mode_change = false;
|
|
}
|
|
|
|
udphy->status |= mode;
|