[PATCH v14 10/38] phy: rockchip: usbdp: Add missing mode_change update

sashiko-bot at kernel.org sashiko-bot at kernel.org
Thu Aug 13 19:41:50 PDT 2026


Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:

Pre-existing issues:
- [High] Type-C state fallback to USB/Safe modes skips the PHY mode update and HPD reset, permanently breaking USB 3.0 and leaving a ghost DisplayPort connection.
- [High] The PHY driver indefinitely leaks active power states (clocks and resets) if the Type-C mux mode changes before the USB or DP controllers execute their teardown routines.
--

--- Patch [10]: [PATCH v14 10/38] phy: rockchip: usbdp: Add missing mode_change update ---
commit 9bed4fa08dd116716a39f228bdd961c66a8f8b64
Author: Sebastian Reichel <sebastian.reichel at collabora.com>

phy: rockchip: usbdp: Add missing mode_change update

rk_udphy_set_typec_default_mapping() updates the available modes,
but does not set the mode_change as required. This results in
missing re-initialization and thus non-working DisplayPort.

> diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockchip/phy-rockchip-usbdp.c
> index 982315535caf7..7540c897dde13 100644
> --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c
> +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c
> @@ -617,6 +617,15 @@ static void rk_udphy_dp_hpd_event_trigger(struct rk_udphy *udphy, bool hpd)
>  	rk_udphy_grfreg_write(udphy->vogrf, &cfg->vogrfcfg[udphy->id].hpd_trigger, hpd);
>  }
>  
> +static void rk_udphy_mode_set(struct rk_udphy *udphy, u8 mode)
> +{
> +	if (udphy->mode == mode)
> +		return;
> +
> +	udphy->mode_change = true;
> +	udphy->mode = mode;
> +}

[Severity: High]
This isn't a bug introduced by this patch, but since we are updating how the
mode is set, can this asynchronous update to udphy->mode lead to a power state
leak?

If the Type-C subsystem asynchronously updates the requested mode via
rk_udphy_typec_mux_set() (e.g., changing from UDPHY_MODE_DP_USB to
UDPHY_MODE_DP), does this cause later teardown routines to fail?

For example, when the USB controller suspends and calls phy_exit() or
phy_power_off(), routines like rk_udphy_usb3_phy_exit() check the mode:

drivers/phy/rockchip/phy-rockchip-usbdp.c:rk_udphy_usb3_phy_exit() {
    ...
	/* DP only or high-speed */
	if (!(udphy->mode & UDPHY_MODE_USB) || udphy->hs)
		goto unlock;
    ...
}

Similarly in rk_udphy_power_off():

drivers/phy/rockchip/phy-rockchip-usbdp.c:rk_udphy_power_off() {
    ...
	if (!(udphy->mode & mode)) {
		dev_info(udphy->dev, "mode 0x%02x is not support\n", mode);
		return;
	}
    ...
}

Because udphy->mode has already changed, do these functions return early
without clearing the USB bit from udphy->status, leaving active hardware
clocks and resets leaked indefinitely?

[ ... ]

> @@ -1361,10 +1370,7 @@ static int rk_udphy_typec_mux_set(struct typec_mux_dev *mux,
>  			usleep_range(750, 800);
>  			rk_udphy_dp_hpd_event_trigger(udphy, true);
>  		} else if (data->status & DP_STATUS_HPD_STATE) {
> -			if (udphy->mode != mode) {
> -				udphy->mode = mode;
> -				udphy->mode_change = true;
> -			}
> +			rk_udphy_mode_set(udphy, mode);
>  			rk_udphy_dp_hpd_event_trigger(udphy, true);
>  		} else {
>  			rk_udphy_dp_hpd_event_trigger(udphy, false);

[Severity: High]
This is a pre-existing issue, but I have a question about the broader logic
in rk_udphy_typec_mux_set() when the mode changes.

When the Type-C port exits Alt Mode to a safe or USB-only state, does this
skip the PHY mode update and HPD reset entirely?

It looks like the vital state updates (including the new rk_udphy_mode_set()
call) are gated behind an earlier check in rk_udphy_typec_mux_set():

drivers/phy/rockchip/phy-rockchip-usbdp.c:rk_udphy_typec_mux_set() {
    ...
	if (state->alt && state->alt->svid == USB_TYPEC_DP_SID) {
		struct typec_displayport_data *data = state->data;
    ...
}

Because state->alt is NULL when exiting DisplayPort Alt Mode, this block is
bypassed. Can this leave udphy->mode stuck in UDPHY_MODE_DP, potentially
breaking USB 3.0 functionality and leaving a ghost DisplayPort connection?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260813-rockchip-usbdp-cleanup-v14-0-b5ad9c68fa11@collabora.com?part=10



More information about the linux-phy mailing list