From: sashiko-bot@kernel.org
To: "Sebastian Reichel" <sebastian.reichel@collabora.com>
Cc: linux-phy@lists.infradead.org, olteanv@gmail.com,
devicetree@vger.kernel.org, conor+dt@kernel.org, robh@kernel.org,
vkoul@kernel.org, neil.armstrong@linaro.org
Subject: Re: [PATCH v12 03/36] phy: rockchip: usbdp: Do not lose USB3 PHY status
Date: Fri, 10 Jul 2026 21:07:40 +0000 [thread overview]
Message-ID: <20260710210741.02D761F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260710-rockchip-usbdp-cleanup-v12-3-8b41a9a9bef0@collabora.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
New issues:
- [High] Removing the clearance of `udphy->status` introduces unbalanced clock disables and repeated hardware teardowns on the `rk_udphy_setup()` error path.
Pre-existing issues:
- [High] Missing mutex acquisition in `rk_udphy_dp_phy_configure` leads to data races on shared driver state.
- [High] Incomplete handling of mode transitions causes DWC3 SErrors and permanently breaks the USB3 data stream.
--
--- Patch [3]: [PATCH v12 03/36] phy: rockchip: usbdp: Do not lose USB3 PHY status ---
commit efe9bcb0d6328640e43461f982816e45f55f9a36
Author: Sebastian Reichel <sebastian.reichel@collabora.com>
phy: rockchip: usbdp: Do not lose USB3 PHY status
By default (i.e. without manually enabling runtime PM) DWC3 requests the
USB3 PHY once and keeps it enabled all the time. When DisplayPort is
being requested later on, a mode change is needed. This re-initializes
the PHY. During re-initialization the status variable has incorrectly
been cleared, which means the tracking information for USB3 is lost.
This is not an immediate problem, since the DP side keeps the PHY
enabled. But once DP is toggled off, the whole PHY will be disabled.
This is a problem, because the USB side still needs it powered.
Fix things by not clearing the status flags.
> diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockchip/phy-rockchip-usbdp.c
> index a5ffdf7a6e76b..12dfdd470a782 100644
> --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c
> +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c
> @@ -1008,7 +1008,6 @@ static int rk_udphy_power_on(struct rk_udphy *udphy, u8 mode)
> rk_udphy_u3_port_disable(udphy, false);
> udphy->mode_change = false;
> } else if (udphy->mode_change) {
[Severity: High]
This is a pre-existing issue, but I have a question about how the mode
transitions are handled here in rk_udphy_power_on().
When Type-C negotiation changes the mode to UDPHY_MODE_DP_USB, the driver
skips calling rk_udphy_u3_port_disable(udphy, true). It then cuts the PHY
clocks via rk_udphy_disable() while the DWC3 controller might still be
active. Can this cause System Errors (SErrors) from the DWC3 controller?
Additionally, if the old mode was UDPHY_MODE_DP, the USB3 port is disabled
but never re-enabled after rk_udphy_setup() succeeds. Does this leave the
USB3 data stream permanently broken in the GRF registers?
> - udphy->status = UDPHY_MODE_NONE;
> if (udphy->mode == UDPHY_MODE_DP)
> rk_udphy_u3_port_disable(udphy, true);
>
> rk_udphy_disable(udphy);
> ret = rk_udphy_setup(udphy);
> if (ret)
> return ret;
[Severity: High]
Since this clearance is removed, what happens if rk_udphy_setup() fails
immediately after this block?
If rk_udphy_setup() returns an error, the function exits without updating
udphy->status to reflect that the hardware was actually disabled by
rk_udphy_disable() just above.
Could this lead to unbalanced clock disables and repeated resets later when
phy_power_off() or phy_power_on() is called, since the driver still assumes
the PHY is active?
[ ... ]
[Severity: High]
This is a pre-existing issue, but does rk_udphy_dp_phy_configure() need to
hold udphy->mutex when accessing shared driver state?
Looking at drivers/phy/rockchip/phy-rockchip-usbdp.c:
rk_udphy_dp_phy_configure() {
struct rk_udphy *udphy = phy_get_drvdata(phy);
...
if (dp->set_voltages) {
for (i = 0; i < udphy->lanes; i++) {
lane = udphy->dp_lane_sel[i];
...
This function reads udphy->dp_lane_sel, udphy->lanes, and
udphy->lane_mux_sel without acquiring the mutex.
Meanwhile, if a Type-C orientation flip occurs, rk_udphy_orien_sw_set()
acquires the mutex and mutates this exact state:
rk_udphy_orien_sw_set() {
...
mutex_lock(&udphy->mutex);
...
udphy->flip = orien == TYPEC_ORIENTATION_REVERSE;
rk_udphy_set_typec_default_mapping(udphy);
...
Can this data race cause voltages to be programmed to the wrong PHY lanes,
leading to DP link training failures if a cable is flipped during active
DisplayPort use?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260710-rockchip-usbdp-cleanup-v12-0-8b41a9a9bef0@collabora.com?part=3
next prev parent reply other threads:[~2026-07-10 21:07 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-10 16:44 [PATCH v12 00/36] phy: rockchip: usbdp: Clean up the mess Sebastian Reichel
2026-07-10 16:44 ` [PATCH v12 01/36] dt-bindings: phy: rockchip-usbdp: add improved ports scheme Sebastian Reichel
2026-07-10 16:44 ` [PATCH v12 02/36] phy: rockchip: usbdp: Update mode_change after error handling Sebastian Reichel
2026-07-10 21:15 ` sashiko-bot
2026-07-10 16:44 ` [PATCH v12 03/36] phy: rockchip: usbdp: Do not lose USB3 PHY status Sebastian Reichel
2026-07-10 21:07 ` sashiko-bot [this message]
2026-07-10 16:44 ` [PATCH v12 04/36] phy: rockchip: usbdp: Fix devm_clk_bulk_get_all check Sebastian Reichel
2026-07-10 16:44 ` [PATCH v12 05/36] phy: rockchip: usbdp: Handle missing clock-names DT property gracefully Sebastian Reichel
2026-07-10 21:07 ` sashiko-bot
2026-07-10 16:44 ` [PATCH v12 06/36] phy: rockchip: usbdp: Drop seamless DP takeover Sebastian Reichel
2026-07-10 21:08 ` sashiko-bot
2026-07-10 16:44 ` [PATCH v12 07/36] phy: rockchip: usbdp: Keep clocks running on PHY re-init Sebastian Reichel
2026-07-10 16:44 ` [PATCH v12 08/36] phy: rockchip: usbdp: Amend SSC modulation deviation Sebastian Reichel
2026-07-10 16:44 ` [PATCH v12 09/36] phy: rockchip: usbdp: Fix LFPS detect threshold control Sebastian Reichel
2026-07-10 16:44 ` [PATCH v12 10/36] phy: rockchip: usbdp: Add missing mode_change update Sebastian Reichel
2026-07-10 21:13 ` sashiko-bot
2026-07-10 16:44 ` [PATCH v12 11/36] phy: rockchip: usbdp: Support single-lane DP Sebastian Reichel
2026-07-10 16:44 ` [PATCH v12 12/36] phy: rockchip: usbdp: Limit DP lane count to muxed lanes Sebastian Reichel
2026-07-10 21:08 ` sashiko-bot
2026-07-10 16:44 ` [PATCH v12 13/36] phy: rockchip: usbdp: Rename DP lane functions Sebastian Reichel
2026-07-10 16:44 ` [PATCH v12 14/36] phy: rockchip: usbdp: Use FIELD_PREP_WM16_CONST Sebastian Reichel
2026-07-10 16:44 ` [PATCH v12 15/36] phy: rockchip: usbdp: Cleanup DP lane selection function Sebastian Reichel
2026-07-10 16:44 ` [PATCH v12 16/36] phy: rockchip: usbdp: Register DP aux bridge Sebastian Reichel
2026-07-10 16:44 ` [PATCH v12 17/36] phy: rockchip: usbdp: Drop DP HPD handling Sebastian Reichel
2026-07-10 16:44 ` [PATCH v12 18/36] phy: rockchip: usbdp: Rename mode_change to phy_needs_reinit Sebastian Reichel
2026-07-10 21:10 ` sashiko-bot
2026-07-10 16:44 ` [PATCH v12 19/36] phy: rockchip: usbdp: Re-init the PHY on orientation change Sebastian Reichel
2026-07-10 21:15 ` sashiko-bot
2026-07-10 16:44 ` [PATCH v12 20/36] phy: rockchip: usbdp: Factor out lane_mux_sel setup Sebastian Reichel
2026-07-10 21:16 ` sashiko-bot
2026-07-10 16:44 ` [PATCH v12 21/36] phy: rockchip: usbdp: Properly handle TYPEC_STATE_SAFE and TYPEC_STATE_USB Sebastian Reichel
2026-07-10 21:18 ` sashiko-bot
2026-07-10 16:45 ` [PATCH v12 22/36] phy: rockchip: usbdp: Use guard functions for mutex Sebastian Reichel
2026-07-10 21:18 ` sashiko-bot
2026-07-10 16:45 ` [PATCH v12 23/36] phy: rockchip: usbdp: Clear USB status on PHY exit Sebastian Reichel
2026-07-10 21:17 ` sashiko-bot
2026-07-10 16:45 ` [PATCH v12 24/36] phy: rockchip: usbdp: Hold mutex in DP PHY configure Sebastian Reichel
2026-07-10 16:45 ` [PATCH v12 25/36] phy: rockchip: usbdp: Add some extra debug messages Sebastian Reichel
2026-07-10 16:45 ` [PATCH v12 26/36] phy: rockchip: usbdp: Avoid xHCI SErrors Sebastian Reichel
2026-07-10 21:20 ` sashiko-bot
2026-07-10 16:45 ` [PATCH v12 27/36] phy: rockchip: usbdp: Handle rk_udphy_reset_deassert errors Sebastian Reichel
2026-07-10 21:17 ` sashiko-bot
2026-07-10 16:45 ` [PATCH v12 28/36] phy: rockchip: usbdp: Only enable USB3 when not in high-speed mode Sebastian Reichel
2026-07-10 21:26 ` sashiko-bot
2026-07-10 16:45 ` [PATCH v12 29/36] phy: core: add notifier infrastructure Sebastian Reichel
2026-07-10 16:45 ` [PATCH v12 30/36] usb: dwc3: core: support PHY reset notifications Sebastian Reichel
2026-07-10 21:20 ` sashiko-bot
2026-07-10 16:45 ` [PATCH v12 31/36] phy: rockchip: usbdp: Add phy reset notification support Sebastian Reichel
2026-07-10 21:26 ` sashiko-bot
2026-07-10 16:45 ` [PATCH v12 32/36] phy: rockchip: usbdp: Drop -EPROBE_DEFER hack Sebastian Reichel
2026-07-10 21:28 ` sashiko-bot
2026-07-10 16:45 ` [PATCH v12 33/36] phy: rockchip: usbdp: Rename mode to hw_mode Sebastian Reichel
2026-07-10 21:23 ` sashiko-bot
2026-07-10 16:45 ` [PATCH v12 34/36] phy: rockchip: usbdp: Fix power state handling Sebastian Reichel
2026-07-10 16:45 ` [PATCH v12 35/36] phy: rockchip: usbdp: Re-init PHY on mux change Sebastian Reichel
2026-07-10 21:27 ` sashiko-bot
2026-07-10 16:45 ` [PATCH v12 36/36] phy: rockchip: usbdp: Add USB-C state without DP enabled Sebastian Reichel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260710210741.02D761F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=neil.armstrong@linaro.org \
--cc=olteanv@gmail.com \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=sebastian.reichel@collabora.com \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox