From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4C76B41DE15; Tue, 14 Jul 2026 19:26:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057175; cv=none; b=BfuAPH2v+JbZbdehf5AvV9p/Lhtmqw1Y9vhy691d4h51FoZRj2byxt0Fqy6AufTZncwi/Q1Wp2TXSrWt5eFneu7uBS00gtsxKeJa64vKqariyxxFgS1u6r2wXUnx5yx77cocKHXcnXToPe8H3jxhcH+/ExOR0oyn2XGxW105n3Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057175; c=relaxed/simple; bh=fSE9BoJywHuBiftWhreULBZfq0aOAYM8Do4X/ZMeGM0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JY8wes9AC/7Bd0pFfRkGHEAik56tRqHGuCgfI+fQBqFVlft1n/OODQJDoAdfjHDjj+D3InUzFKrsro7VzIgCbjF0LUyCedmu6BA8kifOTNTBP0wOhYhMJ9mi/cDNG3mInC+q3FVUxsk/A3sCBcYet/8Gq9fT4pHyedBFSQbqzRE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=ErSmMot5; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="ErSmMot5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=fSE9BoJywHuBiftWhreULBZfq0aOAYM8Do4X/ZMeGM0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ErSmMot59uUff3S0fqcoPQhLjYg3OrZQBrUrGhWxA4Kc3dwo9JbpLzczMVL3ELSDH rc5e09nNv10es00Wna57ouuVzKkEb28wQZs3DfTLHMvpsGf9opNiriMoRSdDtmx0wb xBQnnIw5M1NPsZ/DYbw/KJ+QVjIuhQ8yHnA3UUZfDF2q0sIXA7O5Hy8KD6gnUQ7sQF jkiHIZ3nDq8z+tsxz1y8v1dBTgxcguxgk2mfRVnRoH/3O+wjknVZtOf36ux3AQntvq c1oYv1fl9XBMGcXbjC9w6tUlNa3HGP11BQjcQQudxZxrkdCNF28r4UkGJRMHkY+ez8 AOyTFaTY4+SxQ== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 216E117E019E; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id CD1B4480027; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:02 +0200 Subject: [PATCH v13 01/35] dt-bindings: phy: rockchip-usbdp: add improved ports scheme Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-1-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2405; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=fSE9BoJywHuBiftWhreULBZfq0aOAYM8Do4X/ZMeGM0=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU+Nw+8rIW1hzSFKW0nOinq/2VIqGtuE3 aX2eICel/XGPIkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qaGhoP/0F2BGsdjVj6LWBtawVTd4j3WWzaZKZ6ZAMDozmg8ElihlWTZ6Va89Hwi1skMNSszoD R7NH0eVXLC5Wo1ZI+H21g64PraW2C9TyW+5fqIFWx3729XDLnQi46PvnIFKw49Cjz5d8/5jygWe O0If3wyLX5P8y7vSVBUqAlfrl/fgFkrLcAUaG/J6qsw2dMdSjgor5fgjqDe7VlyY2U61YOUJKPI 3VuW09rSOsN9S6pKlHYlFr10l/oiy7pmVBFU3lPksTmOwmbP7XpAjtAwvokKpU02dWDySCohr+1 syS0Cx+/Okv5JxUJNgydRriidgkSmv3WbcShfF2ZQn4lAucTKFikXOeEPIqWv7t2bWlskHKCjin vI3cULJnW7IvMRA+yGRjYyhAe8GH1Q7XwOtfch21tLf5y516Ml4+ZtTF7p+XRNcdHKIb5SMyIs1 dSp43ao67JetKbayJjzcn8HYxruIdADlw3D1c0ZMCOCHWwvFV78Dxf9r+pcd39E/zsSKOorJe6s WIM01RYfDES0HPqMkBd8KYNYdlsW8ojHxmdAAt4NN+Qgc0Hs6YyJDcR7SBlwQkPZeYMGHjr038h c+fmtrlH2Hyag8f9FsnhYPvZsnzCdD3CshxUPqiDBB5F7ZoT5jA+iE21kDmlkjBo4+oshVupwTl q9T091wU4kMK/jEamWhsxVg== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Currently the Rockchip USBDP PHY is missing a documented port scheme. Meanwhile upstream RK3588 DTS files are a bit messy and use different port schemes. The upstream USBDP PHY Linux kernel driver does not yet parse the ports at all and thus does not create any implicit ABI either. But with the current mess it is not possible to properly support USB-C DP AltMode. Thus this introduces a proper port scheme following roughly the ports design of the Qualcomm QMP USB4-USB3-DP PHY controller binding with a slight difference that there is an additional port for the USB-C SBU port as the Rockchip USB-DP PHY also contains the SBU mux. Reviewed-by: Rob Herring (Arm) Signed-off-by: Sebastian Reichel --- .../bindings/phy/phy-rockchip-usbdp.yaml | 24 ++++++++++++++++++= ++++ 1 file changed, 24 insertions(+) diff --git a/Documentation/devicetree/bindings/phy/phy-rockchip-usbdp.yaml = b/Documentation/devicetree/bindings/phy/phy-rockchip-usbdp.yaml index 8b7059d5b182..89efaf005a7b 100644 --- a/Documentation/devicetree/bindings/phy/phy-rockchip-usbdp.yaml +++ b/Documentation/devicetree/bindings/phy/phy-rockchip-usbdp.yaml @@ -110,10 +110,34 @@ properties: =20 port: $ref: /schemas/graph.yaml#/properties/port + deprecated: true description: A port node to link the PHY to a TypeC controller for the purpose of handling orientation switching. =20 + ports: + $ref: /schemas/graph.yaml#/properties/ports + properties: + port@0: + $ref: /schemas/graph.yaml#/properties/port + description: + Output endpoint of the PHY for USB (or DP when configured into 4= lane + mode), which should point to the superspeed port of a USB connec= tor. + + port@1: + $ref: /schemas/graph.yaml#/properties/port + description: Incoming endpoint from the USB controller + + port@2: + $ref: /schemas/graph.yaml#/properties/port + description: Incoming endpoint from the DisplayPort controller + + port@3: + $ref: /schemas/graph.yaml#/properties/port + description: + Output endpoint of the PHY for DP Auxiliary, which should either= point to + the SBU port of a USB-C connector or a DisplayPort connector inp= ut port. + required: - compatible - reg --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4EBED41DE16; Tue, 14 Jul 2026 19:26:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057174; cv=none; b=Q2/3fP8j1SYVf9r/pQp18AlARsla+dR/USthN0a398PhQEyOB7lYHEzpFq7FWaghCoRejaD041UgJF8wSeMWPo51+g4ShEx7cXt6I0eym43kE6R4JVtBga0Meqk+L29fruBMR1RBTw3JU4DclSK4CmcTTqSJoN3rESE6XE15qY8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057174; c=relaxed/simple; bh=USg1ohYmbXwetA6mCilQyNqt0XA2ZTz/AW7yPMSqQVI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qt3MoH2DdUb+5uNt6x5oE9P2I4K8MjUlO6ORRSXAIMgWKXolR59kpc/hPku+2mhKSiRo655Eb/X6zu11bK5tECFI8N1wCJViyDL1ZoiC0CnVcXz3PsLNOtMpJTxLn9VZPro1Dv4jTA1tWNYJYaLOLJq6/nb0pZHBdOGZTaxJdxI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=HzwUJpDT; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="HzwUJpDT" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=USg1ohYmbXwetA6mCilQyNqt0XA2ZTz/AW7yPMSqQVI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=HzwUJpDT9KDK+YWX2h+SHPBXV3sS3hoNoyyJy2O3r9rnG2JBlrwDL9H4akhgNCWTV 2xchICUu7nGdDNytNWflObxDfXCWK3W8XLFt8tdlFfgn0ztHNoj1dCB2hqvtbCVjlg p5k2HJ1bupOc33oiZPu7qtvahPBg5KlUDpTU9oPuaaaUSzyiuqQiB+viWwXKR3ZZTP MbaPlUtvcQvaLDina6FhrEy9hxDDz//iS+GnpkndRGZrKpzFlYfsR3Fxw/vqEeoboV tawueXxrRqcQTJL/+jnrnDarthVnyGmussiAJlEYuWC4iMWxFNBU0ZOFeBTaWtcjpZ NxxpCCx4xHUfQ== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 23EE417E0564; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id CE0FF48002C; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:03 +0200 Subject: [PATCH v13 02/35] phy: rockchip: usbdp: Update mode_change after error handling Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-2-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel , Sashiko X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1789; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=USg1ohYmbXwetA6mCilQyNqt0XA2ZTz/AW7yPMSqQVI=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU+neWuqE+Mn/txJAJWYD3hhSd4HvB2P3 rIUPjpWhl0jR4kCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qapm4P/04rd0Vcd/kPEGL7U/7NWQdtMsJIX2SJwqwA79AGet3xiZhzvEfjBM3R6w5ZAZzbAkD +KVpZRW4eHTatYHLorgwyNv1pi9kcJo3OcVSxhXahn8BbX78eyREZ44c20LKgjt9LiWv+/Bj3MO 5GVJyvTVHg7PjxWNCTazH1CGyFMkeNwDk9OuIxirq3YasXEP9TPxyeM95++Dpqz4k0m5cvai5aq JTBGqis0QW0qvLLGHOfdGQ1HLRwzvL8U0I5wBEcqgBHAIdscnYmeVN4ENV1qx0O6/CFTK/x1kFh e8PvS2T4VY6flWrpZId2Fol41BYrCbcmO/frZ/CmF8rPxsAnP2/WSI/nyuSbYXxBblmAqirjd/L aeinMkLl93mxbIrebmF5EO02SdsxIck/C25bmwIxmuTAs6MXRikB3gSfnHlohPrP0QMBNxqoRfc OEs4KF5HnNCwWOyuBR/tlxCjcnn7QESgfMUN8NljH3iUekIDL/hH/kXSrDj2lfb6a4s/4/tr0G2 PKHH0ZHJp9IGWK622gbEdkn4JE9Oc0TIe7rXuRkyYQb/aYO/ed+hq565yzxC2XvFpn8JeG78+wK LDfnJRwFlDOwaI3ewtOzTXaZDm4OFdy9577rzPsp8lOxp7skG+6N2SQSnhaFdyWGprtcfrrNdyE ci1s0L9nLiAkDm4F/O1st5A== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A 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 Closes: https://lore.kernel.org/linux-phy/20260612163835.8D5471F000E9@smtp.= kernel.org/ Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index fba35510d88c..a5ffdf7a6e76 100644 --- 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_udphy *udphy= , u8 mode) } =20 if (udphy->status =3D=3D UDPHY_MODE_NONE) { - udphy->mode_change =3D false; ret =3D rk_udphy_setup(udphy); if (ret) return ret; =20 if (udphy->mode & UDPHY_MODE_USB) rk_udphy_u3_port_disable(udphy, false); - } else if (udphy->mode_change) { udphy->mode_change =3D false; + } else if (udphy->mode_change) { udphy->status =3D UDPHY_MODE_NONE; if (udphy->mode =3D=3D UDPHY_MODE_DP) rk_udphy_u3_port_disable(udphy, true); @@ -1017,6 +1016,7 @@ static int rk_udphy_power_on(struct rk_udphy *udphy, = u8 mode) ret =3D rk_udphy_setup(udphy); if (ret) return ret; + udphy->mode_change =3D false; } =20 udphy->status |=3D mode; --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4C6A141DE13; Tue, 14 Jul 2026 19:26:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057174; cv=none; b=WI4ua2MWYTrnuXHxoOqpOZhGqdWGxCbPbl7BJUijAd9rooM9VDMzvF9bZY6ZSKWyG0qWNJqMa4ljJ+uyzzDXb1CBXlH7zRxJ2F5WOn4c5+mTk5DJGthe0VqAld+Rb+okOZKxPZhUHR7/S+jFqt9u/HFVmZTpU9/ec3J9N27Ko6E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057174; c=relaxed/simple; bh=ou2OeHe9NiTPGYgMcRzTUBwKmURTgL5/azZ1wBtlGvM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VJqSYmhGdp6e5axdc822Jdolvui7DMCbZNwTvo3H5OBFOCrDjab60oJf3FkYndoZLFz/WIYqhhaRUQekIXHU0CZ451JDtTA0Z5rY36g39jwCUO/5MQKOSBmbtYGPXcgUtlQhls3V72MtagXoCTH2/FoWE9TD0T+kTRBntT5d0VU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=gHNbOAYp; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="gHNbOAYp" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=ou2OeHe9NiTPGYgMcRzTUBwKmURTgL5/azZ1wBtlGvM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=gHNbOAYpLNeJMIX8AB67rtX0qgJArQ+D5DKBQu8GLMn+hOrcgF0xwbMhSMRVtWsnA J/hvXxHb2y5LvWJUX0UZFGV8jhheOgFPd3YHLoCQlk4h1xuE+Cxe1gh54RM5erWAN1 7JZpdeekW3jeKLce4F/+7DB10MyBSQdF7POlIzITc6ho1GNo/abroEZZMeVcB0Rtte tZrT3lGcxoI6netTqokfVn4GzpyfYTP9tWUfoGSjBjH19Ifhz71YSuHh7owwYPcvnf yxbaLd5tp1yM10faVvJMAYD0nVljFfZsAIWuxp9gsjv4/2z3kcTz5Swl2S92mEzVjw 8s0C6IpNmGXLg== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 2538D17E0B89; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id CFD2D48002F; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:04 +0200 Subject: [PATCH v13 03/35] phy: rockchip: usbdp: Do not lose USB3 PHY status Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-3-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1409; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=ou2OeHe9NiTPGYgMcRzTUBwKmURTgL5/azZ1wBtlGvM=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU/N+pqThOWKKerejsXTJvqKMa89XLKeY o53vbzDkztdJokCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qaoPYP/0M8Z8VgKSRwjex2OTUq917XYXZ7RdTjMZ0Ik7ZF5EM8whNXlWfREoCv6688qYuStSj I4BzMuuLXxJFbkYriSqopaY4635z/8DwtRkUZKsV9sNGX1CgszSV/HPzWs18/bpyyR69rxMExu2 1v4FD9QDinQ2Dl0BiBbecQJZvnvhzQ/4iyqwxqOVau5TpEeNum7ZLnXxTsNAXm7Dz7jXvf6FqC7 1hgZsW3j/+E7GsxXDbnIra+qcFfncmqBe8TYE7laUIl1HnFS4NbJJVlp2k8JI7EQ9aPW5kE2BIy uOhrGtAV7nALkbedghmXb884u/RZUsxr70DDCESjaNxYATRajqX6+g2LmAWPOrbFfAdD2nNWjFR M9vIGzq7MkBxSjs0N3b9BTzHvwBOlH5yuWJsI6UUEM1RBOizOSudAtTifDTdp4zm0t0RY+ggAHF 1R8EFBFGRi5euOQqHdkNG7JIOeQTnMjb+ojWUiAMxpM8WzKz/ff43TralA6H1mdbpFAaamUcY09 IOrx4KhJsMlRl5sSNWK1p9RMQfLQk6Sg6dReV69VJCIKe4mZdz1GItmhr3snG1fdlfMNlAAQyja guAaqYN1qWA2H78ng8E6XmsCuJfyEMXkq/fWtAfXysLAesz7dDXKosF7b70LbYP+Hd9TpEtko8+ 4E0cmZ26DuGVQ+cxVsvo0Hw== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A 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. Fixes: 2f70bbddeb45 ("phy: rockchip: add usbdp combo phy driver") Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index a5ffdf7a6e76..12dfdd470a78 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 =3D false; } else if (udphy->mode_change) { - udphy->status =3D UDPHY_MODE_NONE; if (udphy->mode =3D=3D UDPHY_MODE_DP) rk_udphy_u3_port_disable(udphy, true); =20 --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6813941DE17; Tue, 14 Jul 2026 19:26:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057175; cv=none; b=Eep9j/gGQuLaN91659ccLVowaVfXt9MEFmQ1Ui5KScKXgj7BRh/a+xEF2bND9XN8wbTqXtMLtSIWIWnwjGwXLUhBLBOgIe9WaSoxP69pfmq/VQWUydiumNQU4aEg/WUYGA0DlKlDCh3RGYhr0ykzLMXi8RlBi3xMyDlXQ7c1QeM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057175; c=relaxed/simple; bh=1p3WFYm3nPwFyjx+ldeJOnj6dqBA+X1XeNTC11p7Zk4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ka5fOkuXZ9S2lzOzOFBo798lt+U4ApWHpyYzqX/vgso2WtjPPpgLOnChSZ1HpyIYiR82UQbhDMGnrmyrttiWjKyIFKVi54LkaC3YSq1dPh+WfYlRXdXgWaauydbQPogXI5UwN/ttHlKU0jUeXBEO6og6/wm0FqJkN/KQvLQKK10= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=TB7AELg6; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="TB7AELg6" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=1p3WFYm3nPwFyjx+ldeJOnj6dqBA+X1XeNTC11p7Zk4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=TB7AELg6676iA3gmrpI+nv1duxzz5v1WNeIMI8Od/Sa4hjB8AebGXFdwK3aKmG8lY fyjYVEeIE64vPCUj716ijP04E0xBwwnp3P0eLBwJjLe1lOahhcR+ZGLHx4eYIbB0I1 yGzIQL5lRSTHFMZPJ+vrIGw3FDNf+SskmiLvEdm/lxIq78P6IqgzCvu/tiQs+e9WX6 rfzcBtjBaTiw9tiz/JTh7KKDP4XWrFGf6MPV5uqX06/it5pH77ZXFcK+EqmSAIoI/d 2g9TrvJ1k/PqxImXFL4sd6+EhFgi3t3XlPS5vOIsbDFliyGQ7QNZL0yfTrIbW/QeFX 4xuaIY6+d+kLw== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 2684117E0DE9; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id D1997480030; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:05 +0200 Subject: [PATCH v13 04/35] phy: rockchip: usbdp: Fix devm_clk_bulk_get_all check Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-4-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel , Sashiko X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1653; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=1p3WFYm3nPwFyjx+ldeJOnj6dqBA+X1XeNTC11p7Zk4=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU/7vatY19R8oGegDNZ8GU+Xw9rpXWtf9 PsNYVYE3V2LJ4kCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qaUysP/3Ghko6nshJ62ESXJ6z1w4zG2FsNGKeug8lWbalQzCFSMO4qeiqFOhUYdOiA1BB60L7 bI3xiu4zgN9tbKQg1LGOTLizulDE3aOQZQbQjJ1MSM8IemyEkYODsyyWk6S1gsomiXbUU4iTBhx +6g8YE1QMEqz1ETyyCTf1ZEq+d9I2Cg9eTldXGM5Bl5MQRbwqxEMRjW+5hr8s5hookXD32oft6Z YYuyrAXrpuZu3iPcxJMIiC87OvoUV9x+IHEIrp6J60tOoFiILiOtYjaGEEp8/4y4ECIaiJAQQ43 DCvUkaQ9QVdLk98p/IHmGtBCWBGfUzNSPTNfjYil2DzstMLb1vpWQek6Ll/1fd0av83+p2dUh8t q4lCL7Y+KtxlcuoWc162L6brwxVQk2HsN39lEnD7RscWaqJCEquo66SjcHy2bq1nno3UZD+T5Qw mLVB4RDAj+i0TfJV0QfOlwJEwbyYzWSiBrugNA3QCRSp0dFdTRUbdxfjDsbw7BrIP0Sv79jm1SL RN+6dYzw3Rs/GZCbOtzEwY0JUbT1qJ2JCBsOP5qcktdEjICFs/VyYKFXJW4yywzFxNPzkZR4/UC PVL7Rl8OHoXZrlGDtEuSZljvmuSrGCZutKKRZyvlmfhb1gpzxg33/oo1Xeyr2xPYr93bB3YW1ZZ 7Z6n7lSiwtCPdgb4V+hgq4g== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A If devm_clk_bulk_get_all() returns -EPROBE_DEFER, it is replaced with -ENODEV, permanently failing the driver probe instead of allowing it to defer. Avoid masking the error code to fix the issue. This effectively drops returning -ENODEV in case no clocks are being described in DT. This special case will now be handled by the follow-up check searching for "refclk" and exit with -EINVAL. None of this will be hit in practice, since the driver is only used by RK3588 and RK3576 - on these platforms the DT is validated to contain the clocks and the clock driver is force probed early. Thus there is no need to backport this. Fixes: 2f70bbddeb45 ("phy: rockchip: add usbdp combo phy driver") Reported-by: Sashiko Closes: https://lore.kernel.org/linux-phy/20260612164107.C7DB21F000E9@smtp.= kernel.org/ Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 12dfdd470a78..2845a012eafc 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -427,8 +427,8 @@ static int rk_udphy_clk_init(struct rk_udphy *udphy, st= ruct device *dev) int i; =20 udphy->num_clks =3D devm_clk_bulk_get_all(dev, &udphy->clks); - if (udphy->num_clks < 1) - return -ENODEV; + if (udphy->num_clks < 0) + return udphy->num_clks; =20 /* used for configure phy reference clock frequency */ for (i =3D 0; i < udphy->num_clks; i++) { --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0979941F348; Tue, 14 Jul 2026 19:26:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057178; cv=none; b=o5vkc0F44oFzepfyt8D2HOCBWfRo5ZKA6vfOf0hE7GgA0p+w8qllZSHW9gna29iDjWE4rWkopm0n64Pge7vfg9lppby7hCreQhFLKE1ItgUeA5w1oKcQK82I3lhX0Gmycc1ERq2kcYlMtEocsq68CAgL16eoN34U3lPT28ekvPw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057178; c=relaxed/simple; bh=gjt94yB7OMQ1kbenpTWsg4rbaygeNwSXNZrsMwALuYQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UBFFIsto2Rqbeg078HU+1r2cY8Q/ta5E+YgKTNk0pKcNv8dpOxst0v/PF66pzRUk4NLQOAVkw6jVWFTcWhN1MhbT+cWu5Bz8rAtCphLvfihl2NnYuy9I0t/aLDC+WsTFB75dd6TzzpT9QKFF2aiEn3gQSR0fAGmwe7cpWHNaGKE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=dwf7wU6w; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="dwf7wU6w" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=gjt94yB7OMQ1kbenpTWsg4rbaygeNwSXNZrsMwALuYQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=dwf7wU6wkFtTW/7THwJKgIn3/mERVq6oFIzJx10NIAedzlPPpIIzRVBRMSUNyAZnq oWEfSZq7CFFmFGvNtNPcN6QXQGa9EoPqK+urGXzCKqA+rhVaRzPc6fiQPhIeEXjpWR Lm+/3RhcKy0X6AO76O7sF+syTotHe8hSADynzDx7Gh1JOhmApqwlKWIRMatIBOU1E1 MqtN4HaHaOaWohNMqzbZRg/T0iycK8GZbOXO27InSvs75V7CKiWHy5ZFAwN+AjgDxu amUxmwK375rmFVqiKF6Mdeh/ZSKzIg43Pz4s0fBegiiXk3TSPl/Rt5ce1hbDb8F1YB Zkmbycl42IgiQ== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 71B0217E0E1C; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id D35E8480031; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:06 +0200 Subject: [PATCH v13 05/35] phy: rockchip: usbdp: Handle missing clock-names DT property gracefully Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-5-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel , Sashiko X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1302; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=gjt94yB7OMQ1kbenpTWsg4rbaygeNwSXNZrsMwALuYQ=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU/u/AyRvnUJ6L95kGIeqmze3AG8Bi7tq 2Ggju18IsJKvIkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qajJYP/A3swIfH4ymtLnJi2wi3nntQ9R4ujq1maU3ut2SGZn3Ekmn5qpkzE8Xyr7GOgV7BPUI VqIUCTwDLkWCtpHZSWTqxXLhTrmCe14JXf+hJaf4nSfXlESSXE1hXVqy9Z9xeS/wA+D/cqPlNW+ J9swfnLuH7TuJZtCUheoI0MEHE11h9sRV+IBHTNwncv7xODf89kD92YFAY7yvLXYAPG0Sgk8clD /NpMubS/LOFCtTdsiGKcHISXH+OdKsoTZBIV6M0INdNyIzsY02EWq1gFJjW7cNR3lEZSClJYpoz 8a07gOp8LhqLbCf4oBGqFNWz0jzt2x49X/hA2vrk9d0D8MLBH6P5PNMYYRgEWdxXhqelpeCbFp0 pcUGFn+ErkHQf7H1Z+oMFifwbgjDIe2K+cgnYLK1xMBVw0DWWA9vLNjaFoPzS1Nk6X7YGSznVDa ZaLWuOzqn40/YZTvhDYTYgoW9cgZ6dV0waHa+azjWVAMkHazAKaU+n3HIr7SrF4SCrPZAUcUZRS v+hewhL1a+LJSlOxq17GJ3zMpuAQzY/vCEg99+ykpkw1XuMa/QTHVkoOZWrGnufsi/0Z1aaW4Xy XVTjlcqClW8RrHWyWI6PPjxy8FxLxiORzkl2jybtpyU1PULwS5AnxZHuFuCACc9k0hxFoSEHLCx 3CLdUTey5n77QMXwFrcIofQ== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A The rk_udphy_clk_init() function would currently try to do a strncmp for a NULL pointer, if DT specifies 'clocks' property, but no 'clock-names' property. Fix this by making sure the clock has an id string set. Note that DT binding requires setting clock-names, so this is only a problem when booting a non-compliant device tree. Fixes: 2f70bbddeb45 ("phy: rockchip: add usbdp combo phy driver") Reported-by: Sashiko Closes: https://sashiko.dev/#/message/20260619154349.071321F000E9%40smtp.ke= rnel.org Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 2845a012eafc..3fc8222fcaec 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -432,6 +432,9 @@ static int rk_udphy_clk_init(struct rk_udphy *udphy, st= ruct device *dev) =20 /* used for configure phy reference clock frequency */ for (i =3D 0; i < udphy->num_clks; i++) { + if (!udphy->clks[i].id) + continue; + if (!strncmp(udphy->clks[i].id, "refclk", 6)) { udphy->refclk =3D udphy->clks[i].clk; break; --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 98DCA41F362; Tue, 14 Jul 2026 19:26:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057179; cv=none; b=X5d0Jmnj4uwi8FPq0/77dDdoQlpRCldQiiNmS9JY9P3U89PEgjv0Ma7Q3fG0PUYbUA2A1V7Le7kxsev/pcf9afzbsJCVBCvyzJkRArHlpm6M1ZZfU4MXQ6fI4gjRZLRQJKRloaUvc22/KlaOtzlvqKh/a7voAy5ALK8/l1Ic55g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057179; c=relaxed/simple; bh=ZO8NKtlAO4WsL56HMiuwG9DvpJtk+41a1hMlNOx8muc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SljlyCXBKkUYPol5ZJjJAJ/tdEOG0kKE6ZVM87/yDGGWqzSruN9Rxl/BDO5L21sxAvKuURsia4QRJ2BaI/uRkfloQUU8qjw929rPnY35Rp8R9t/+RoP5QSkV7K9lsW/BwQxibmnMGhWkvVBSs7fhLkXGr83mMP8LUu74dt7USkE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=Z29tfM2x; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="Z29tfM2x" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=ZO8NKtlAO4WsL56HMiuwG9DvpJtk+41a1hMlNOx8muc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Z29tfM2xg+kQMlc2zQWxeuLVrFtENE2g30YALZlVC0jyHScYn3wf+Ij+YghR8sWtu D7qvTwSsR78etQYldGHFITuFZbOj2/4rpzYQmzIAPgZ09iL5kjE9YqG+p9VDDbHjA6 tOXtVqnjeVSzNGIZ1n+gqtllcLZiA4U1G9h9cNIVT9GtgmMV19Q1IbSYXUy+/wXTqB lkXVye3/ZMrSZYCw6y365dk3fu7dRik3rSpZSseGJxtG8SluE1myeUdmrIfaiRMQnT +2DPW6B80V4Mru7GS4R2q5MuPHH1kdP7kACB7Z3TF3+gPifds8HGgndYRlvcgzHqDI WaOjnknBMT1FA== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 73B5017E0E6C; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id D5082480035; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:07 +0200 Subject: [PATCH v13 06/35] phy: rockchip: usbdp: Drop seamless DP takeover Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-6-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel , Sashiko X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2883; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=ZO8NKtlAO4WsL56HMiuwG9DvpJtk+41a1hMlNOx8muc=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU/uwfL4STqXRuC3W8sLqwaDCIZzbW+AM /KRNr6UZC2tmYkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qarFkP/i+RCxZzpzX6kQbSI4j+bC2QyAtqoNDadfV3xUoPjXTUVhIOg8qN0NaYnqyC/DS1VxL riVIevwwuCmETDrPZyR13YSjWZVKC+pog4BcSm/3NyajddwRskYjDlBTda6jTxKKKufRTYRrILj hi/vdDNxrgvWfN/L3iqx9OrZ6yNp2jPdSS4uY6VMJOILDUJCaO3QbGlCNpXatwT7Of00nVVZgO/ UhXw1gHJRmN4rzq+U7liQzaU65B2vbyvsSwNWWq/BEQ+v4QGxeG9pWx99cvDlhd9Esz08GR0KTJ QPhy9ZIsNv4VZ4VBrDm+olfLWHV4QR4fXKFYpQShIQlaFP3tZDQTE62CgkAN1cHeIME4+2Unk1t WDeIhy3rfADdQTark5pxHHoDlU11oPqi6DUUqB6k/PppwoUPMTepiVoF3tcdvop3pACwGkcioto HLb6wsOd2jhB2COwePJAY+EI9frwLGlg5ERoOl7/ZyD4QzsEU0L7UPBp0ZiYKudDXXtdBHVcdAf k82D8xGFTtNspBs2twYOtY1OFTjkB5EjPxmmPBZniVXg/1s1fPLl7XaRbTTLXpshuuEAD7mbkhU wxgyWnPIomuiO5ijFQIrNfYCZ0c+UgE4MMA/01U9VjV+xAAXDUsJOFteKE94bH2LjRSnrfaO9Ps KhZqOLROINiphCWxQDh4i3w== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Right now the DRM drivers do not support seamless DP takeover and I'm I'm not aware of any bootloader implementing this feature either. In any case this feature would be limited to boards using the USBDP PHY for a DP or eDP connection instead of the more commonly USB-C connector. With USB-C's DP AltMode a seamless DP takeover requires handing over the state of the TCPM state machine from the bootloader to the kernel. This in turn requires a huge amount of work to keep the state machine implementations synchronized. It's very unlikely we will see somebody implementing that in the foreseeable future. As the current code is obviously buggy and untested, let's simply drop support for seamless DP takeover. It can be re-implemented cleanly once somebody adds all missing bits. Fixes: 2f70bbddeb45 ("phy: rockchip: add usbdp combo phy driver") Reported-by: Sashiko Closes: https://lore.kernel.org/linux-phy/20260612164107.C7DB21F000E9@smtp.= kernel.org/ Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 31 ---------------------------= ---- 1 file changed, 31 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 3fc8222fcaec..6cb9f6b4dbf6 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -452,11 +452,6 @@ static int rk_udphy_reset_assert_all(struct rk_udphy *= udphy) return reset_control_bulk_assert(udphy->num_rsts, udphy->rsts); } =20 -static int rk_udphy_reset_deassert_all(struct rk_udphy *udphy) -{ - return reset_control_bulk_deassert(udphy->num_rsts, udphy->rsts); -} - static int rk_udphy_reset_deassert(struct rk_udphy *udphy, char *name) { struct reset_control_bulk_data *list =3D udphy->rsts; @@ -924,28 +919,6 @@ static int rk_udphy_parse_lane_mux_data(struct rk_udph= y *udphy) return 0; } =20 -static int rk_udphy_get_initial_status(struct rk_udphy *udphy) -{ - int ret; - u32 value; - - ret =3D clk_bulk_prepare_enable(udphy->num_clks, udphy->clks); - if (ret) { - dev_err(udphy->dev, "failed to enable clk\n"); - return ret; - } - - rk_udphy_reset_deassert_all(udphy); - - regmap_read(udphy->pma_regmap, CMN_LANE_MUX_AND_EN_OFFSET, &value); - if (FIELD_GET(CMN_DP_LANE_MUX_ALL, value) && FIELD_GET(CMN_DP_LANE_EN_ALL= , value)) - udphy->status =3D UDPHY_MODE_DP; - else - rk_udphy_disable(udphy); - - return 0; -} - static int rk_udphy_parse_dt(struct rk_udphy *udphy) { struct device *dev =3D udphy->dev; @@ -1495,10 +1468,6 @@ static int rk_udphy_probe(struct platform_device *pd= ev) if (ret) return ret; =20 - ret =3D rk_udphy_get_initial_status(udphy); - if (ret) - return ret; - mutex_init(&udphy->mutex); platform_set_drvdata(pdev, udphy); =20 --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 09AC041F349; Tue, 14 Jul 2026 19:26:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057178; cv=none; b=ZjvlmVK10OGBZge5g13g9g6sxFzto7ra/z0wMgDOlaMUEryf6Ajb9/hnsdIlxBkoYZR9IYrdUORWZPODzN8zhQqGWhhQ9f2+Z2rIvcOqv/qdsYNSj5HHv+jkcuvqNZUP3Hg6WSPKIhb9IbO0surMCbDbEA9ERZbTb/dt5oDkBt4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057178; c=relaxed/simple; bh=t8uTKCJDQbXM1zD6YGkoRMmsGqKnvfqXTlOk0PQD5EM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MjNT9YGNwOXafrLd6aIPkCtrUW2mvmwh4Y3C/lhOKYRAP/Y3gp21l/T1jVE9tJ9Q9OW4Y7YnzVjZ873r9Mhg9TVhSC/vepzh7gL1JHAWGbp81oanOkEiJm8rz9hsTt1jH5ZaRPqYqPbc48KEEQsnygcmupZXV7ndS8D5dzJAFOg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=lmfHL9TD; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="lmfHL9TD" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=t8uTKCJDQbXM1zD6YGkoRMmsGqKnvfqXTlOk0PQD5EM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=lmfHL9TDe2ya6OYv0WXYWqaeCXvtqHk5kX2IttFQD9tvLrufQ4zyijyNCy52a2nDT uH05wNSxMX/MRYIzGOHD84mPPnz2tdM2XFgeNP8TBsxs1VO+3WxlTwcnBBEtGarr9B e5RB+9wGF93IHvIiovoHMsIAdyS6UsqnEMOTwOj321GrhcC1tfWuzlamb8sc+dX3mJ N3G/fYV2fLOB6Xrgh6xVz7P/X1Sn7QorshfJP2Wz2HaeJrxO4rTMwIqMCzPREx80qr qDVarSrlzNdzpJYfT/xTi2pSMxZkm9+E0boyBYtcwP3Sh0CaBF5bGu4Jc1xo+c+U4+ oZCLkUtOgQG1A== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 7B57317E0E95; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id D6BA7480038; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:08 +0200 Subject: [PATCH v13 07/35] phy: rockchip: usbdp: Keep clocks running on PHY re-init Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-7-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1161; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=t8uTKCJDQbXM1zD6YGkoRMmsGqKnvfqXTlOk0PQD5EM=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU9t/eKOfGMpPkDJwLcJdJ6ye07owdAfl aIaLEWAzTKQXYkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qardQQAJrFiIYoJse19+fZUHZhl9JCCRgI/43WJsiTCWzDTFDLnw65e13IEGsEpWTEqLqNgQp tvlE6J8qWM3HNjGnhkuehdgo08fLiCJNPpsAo5K+GFfUyJAIuIENrbc1j1cO/9le7uZApnOUs7X SQbUEtnyIGk6BEajdHmqi5uVGphOJPiSgHj+UHxGDePXLK6ri1e3gAO8V2kWM06PDQXxz0jIJJs zbZwZXpLoQwz08fVNB5XQlronDGK+mdkKkCVYYWZieM/L67GCfg7bq7eByO6srmqunwmHOZFAB5 EJL5cSFzuB9dODpf0sRD80aRfeb+q+dycIUJwruTpYoNqmhZ+3XODw/E/7m/w23GRqZeNOhESoH IqeNSmvH7zS8yjGAh2aEApGsb5hDrf2rkLsN3OYMzv9XEPy72megsq0hjAYKbS1RFlFbvJDTeyT /kQ+IHrPYpvsrKCBLeiSqElh13taiCF9vqy9frBDo7XYmjeMo/JjFV0a49XvbNjcw56E9rdbfw7 3K9zdmj7E2DR1eeoswy9FqrFue7xKKf0dlnlNRxyEOL3v+DsAtPbVtQkAHtQOhvq9UuzmjpNL/t Ffmfi0PlAAZcbGtr+D1y1SISzN4n0Ln/R8N4PINLi23kTaAHcov0jMQukwlUvEJEjlJGCmC3TcU Mj6AxVrhzpbb3IsYbcfw20w== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A When a mode change is required rk_udphy_power_on() disables the clocks and then calls rk_udphy_setup(), which then enables all the clocks again before continuing with rk_udphy_init(). Considering that rk_udphy_init() does assert the reset lines, re-enabling the clocks is just delaying things. Avoid it by directly calling rk_udphy_init(). Reviewed-by: Neil Armstrong Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 6cb9f6b4dbf6..e3f5a26c876a 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -987,8 +987,7 @@ static int rk_udphy_power_on(struct rk_udphy *udphy, u8= mode) if (udphy->mode =3D=3D UDPHY_MODE_DP) rk_udphy_u3_port_disable(udphy, true); =20 - rk_udphy_disable(udphy); - ret =3D rk_udphy_setup(udphy); + ret =3D rk_udphy_init(udphy); if (ret) return ret; udphy->mode_change =3D false; --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7D8AE41F35B; Tue, 14 Jul 2026 19:26:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057179; cv=none; b=DpuXOuBrmzFwUIODvAAyjpGCSHDw+v+Gh3rXyAJZsU7LdJah247XidNgtrOcNyuks/qYA1HTavTmA8ZvISGFr9ZvgWn22H52mvamuOmADHw7/TwJ9a1FI2j282kh30ljYuIjAQzwcP6sQnBQClkbdiX2hBL129b0krYhdy4wMN4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057179; c=relaxed/simple; bh=Cc0K4Dr4eJL0SNbtq8hAs+EI1LLSLgYhEuv3ZarCDYw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X0wGh4d8unQjghTJ5GG/Eku4n2a92EBWwXH0wK+5WJkfaLn6xGy877qwu0miuQmfG3a0s8AWagnPwLW4t88e0fOSpCJy5G4Sz7h4gri5tnJLJfpxKUUUPPq8xqdagYJF7MbGKE8S5kpteRn4fjnDj6S5HkpeC+l3ufAnWwIuBxE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=TCMVnBFf; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="TCMVnBFf" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=Cc0K4Dr4eJL0SNbtq8hAs+EI1LLSLgYhEuv3ZarCDYw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=TCMVnBFfvF9dgEV0Zk8R9ceHdtGRwiEEKljPYMo5gEHhCQBzGd2Aa2/os+lgOdLXj 5szueHCnvtE8Ipk7d8igsYL3MOv5uSGhml//XtWbw4HVk+hSzR+IbPT0NVjr8+8ayi MCnJdGZUlWEy5ao6Us4S5za36108xZKK8GWywMutRbqXRd+QSfEU/dPmLvHC/XjsHV VMJz3yhCtAe9UXg5NEh349IJ3cY0SZviFNqVpuVohDYEYg98x6/NcGpxoIKLwRyP8I l5GH7mDedCK0IVV6GYINn1HB5sc6e71lsBXphA1Tbbqo85qhz+/osPnDFfc6IUCQqn YbVHReUvx49Hw== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 7E1C417E0F76; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id D88CC48003A; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:09 +0200 Subject: [PATCH v13 08/35] phy: rockchip: usbdp: Amend SSC modulation deviation Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-8-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1765; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=lqHOLnlRChaCaNvIuz6SialOxFJNoEYQ3ZMsuUuJrVw=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU++ipQRjOseY59s9pGTP4qbq/L//IGKf vSifZcJJ2fUmYkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qavnQP/3IDc0Q76QtEeC9YkxDq7WdmLRnbUbRZxJgzk4FHIFpL0brortfzFzXJd9iiXKllVwL T2tZ83ddURxyGT1Cc4c9kzzeo05JvLFJWIMD8fPrrR50XqUGo8COeHTc5s3wan2k3khEMCHDEri 4GdEa+7bGxMxcDETiA+/mXqIPvJi7i0EkdbHFR3LdwWsSFYeOCTBbflbEeCkUcFDJxAA2siqlYF L9aaKvHAMBTyuB8UtlOlc28wnVDYNMK2T/tb7sS0WEowDzKFYS/QRaHxQ8grmK7MSsqosIIgt/t pOodD8Xzy/HzrsPxE+clulHATk8qlutl57eVjLuj+Xxi1bmEjAFs8+a+SWds1yPyzC49zfKMP06 2yQKt6p73xUrrcNcVKzghpareKA3O2pypZBNaPYW/4Bj2TrxIjXlAoLuGVKx4JvUG2Oj9hmqJgv MdvsBYjN47EswZ59qfqdjgpG+6exOzxg34s47C87HLF/owVaYwN6BZG/Lklj1NHBT5pf49BIDHC gg0mV6I92sAUgZTKxDFEnfq6tl2rAVX7/cbLPXiEaNMHREyvCSd7a4HhfYrMfaoXk4InljMVt/7 A5zTyuTMBNPVeu0BcoRcBZlkHKOM+mtlgNu/Xm4zoWaTrRtbwYnQ/41FDf/qnsgq2oG/vvWNcoM yWO7dHOUCTomFy33+d4o2gA== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A From: Frank Wang Move SSC modulation deviation into private config of clock - 24M: 0x00d4[5:0] =3D 0x30 - 26M: 0x00d4[5:0] =3D 0x33 Signed-off-by: Frank Wang [Taken over from rockchip's kernel tree; register 0x00d4 is not described in the TRM] Reviewed-by: Neil Armstrong Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index e3f5a26c876a..cb6acadfbccf 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -350,7 +350,8 @@ static const struct reg_sequence rk_udphy_24m_refclk_cf= g[] =3D { {0x0a64, 0xa8}, {0x1a3c, 0xd0}, {0x1a44, 0xd0}, {0x1a48, 0x01}, {0x1a4c, 0x0d}, {0x1a54, 0xe0}, - {0x1a5c, 0xe0}, {0x1a64, 0xa8} + {0x1a5c, 0xe0}, {0x1a64, 0xa8}, + {0x00d4, 0x30} }; =20 static const struct reg_sequence rk_udphy_26m_refclk_cfg[] =3D { @@ -377,7 +378,7 @@ static const struct reg_sequence rk_udphy_26m_refclk_cf= g[] =3D { {0x0c30, 0x0e}, {0x0c48, 0x06}, {0x1c30, 0x0e}, {0x1c48, 0x06}, {0x028c, 0x18}, {0x0af0, 0x00}, - {0x1af0, 0x00} + {0x1af0, 0x00}, {0x00d4, 0x33} }; =20 static const struct reg_sequence rk_udphy_init_sequence[] =3D { @@ -412,8 +413,7 @@ static const struct reg_sequence rk_udphy_init_sequence= [] =3D { {0x0070, 0x7d}, {0x0074, 0x68}, {0x0af4, 0x1a}, {0x1af4, 0x1a}, {0x0440, 0x3f}, {0x10d4, 0x08}, - {0x20d4, 0x08}, {0x00d4, 0x30}, - {0x0024, 0x6e}, + {0x20d4, 0x08}, {0x0024, 0x6e} }; =20 static inline int rk_udphy_grfreg_write(struct regmap *base, --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 22A9041F36F; Tue, 14 Jul 2026 19:26:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057181; cv=none; b=IndTmHac4E97L1zW9rjhMbiKVkojNkHTuW91imCWoCQC79O5pUv+mURpm/SXnI5XFy8wgBd2D+yfK/BK25k/UsDW+MY/7Jjvpt9M/XW5gUa7kCK6NMHa6FiROlwkZWr8Wbrh54hjv/7OpsPnlv0DDwaBxatMIA6oJuFDMZlYVVs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057181; c=relaxed/simple; bh=MGpikBa/aaqvkv65oP/N23ryrQe5o83Pvtc6osrktIs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=S5A5LMIflRXCW+RJsGD2k5OmDxyTfuqcJH4mt1KycYhEWbkuA/W6C+WUXFTJyXUF4Tc6IYcprLaa6jz8qsknfOFjeo+1HBN07WSltFxcSyAWphIU6VWqHIX6E+DwhTKgmfMJ41JXzJa10MlM8RrOqbXp1XX4UjjXl+vOpeNLcX8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=Xuju2Wyw; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="Xuju2Wyw" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=MGpikBa/aaqvkv65oP/N23ryrQe5o83Pvtc6osrktIs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Xuju2WywpFtui/Z2oN2alMAQa34o5piASKxOQflLVuMm4btZz5hgo5LsXLN7hQPic rGDebKq/3XHdlOMDj67RXV7o7QchCiWQ+o33xG0btMhtWt0oEhRHHdkpPjPlHOy2IE GAD5ZcGby6L8byqJ9j8yQtS5sKm/HFCF9akapjS57YzG3pp1QPjy2yBBKyEckcU+WS NeuryE90UpVEIoDMrFbw58fRrOQYqnGqJpZxKX3Xi4OmrVAwPpngG6sOPBR+Dx15RZ F+Hqyh+enA7uOvVlnUEch3DRaH4mJ9yChIBCBOpMErrkQamlPYkBCbhn2X2FciHHzh /Ad0wstgecMNw== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 8609617E0FC9; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id DA28348003D; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:10 +0200 Subject: [PATCH v13 09/35] phy: rockchip: usbdp: Fix LFPS detect threshold control Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-9-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel , William Wu X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1521; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=6XR1qE8oQQO8DmAkgt9+gIoazIh1eRLq97pcAr0j0tg=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU9kvXXCFcWCsGLP/icPkll7F0LFFXimL aWpjzH3VER5wIkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qaSpAP/RB3hJESZ+hiCzmQA5DrQM0y68edl734dfmkOatL/AFakFFDU0pxs2sG8YyHte17fBC oWw75hbXztb+db7z53HsZQ4F87sfqviKmc0DhSG5ubVZRVI8CHQSr+BMWDAfRd+kgLfktxHxgo1 ZkYrNDiZoX5Or6L1ehiuE5nBBDRsqz1T8cc7fgppH8TqLgrZgr/s5ZkOYNh3VH2Mi4lpqm+Qimo +JOONf4Dq23CYskYAQkLSbaT6EJvnzyzZHhzV7oe9tkW19bYQQuxwTcxnXi+2XZma4KW+9X+4oD 8Cg9VZ+9zaffQfghI/86qMm3PzY1Kspmq/c4AvCsAEgcAkU8hWlNRNCsiIZptq53pY/4ZMZLXRE X7vjsw2j5GW1oYYZafdwySKowuAMiyn5IP5YK2cNu0k3Dhcx5LWENC6kOTUIh9dqpl0yml59SJg 8kjO0bct7MIkVf9u4skfyz1mUlRDF0Iqg+KSAiPrkGuvHz6hxIhAGF/1Rtqzcb2mM/IxGrXMLue bcPVyBezyfNrgd+51MStCp4jGkPQmKaLVPAeCp5pXIkrO3oWuKi49LTvpgxfwQpP4eXbQ67dtLH oEx66AKQTcpP0atmzwEuKnXJt7XRpKENg06cnddnNLqx3DS7DqJhjqOXY6iXnKmfMoRDapum6YC FgjX0wEXCVtkSo0SF9oAtNw== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A From: William Wu According to the LFPS Tx Low Power/LFPS Rx Detect Threshold [1], the device under test(DUT) must not respond if LFPS below the minimum LFPS Rx Detect Threshold 100mV. Test fail on Rockchip platforms, because the default LFPS detect threshold is set to 65mV. The USBDP PHY LFPS detect threshold voltage could be set to 30mV ~ 140mV, and since there could be 10-20% PVT variation, we set LFPS detect threshold voltage to 110mV. [1] https://compliance.usb.org/resources/LFPS_Rx_Tx_Low_Power_Compliance_Up= date_Rev5.pdf Signed-off-by: William Wu [Taken over from rockchip's kernel tree; the registers are not described in the TRM] Reviewed-by: Neil Armstrong Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index cb6acadfbccf..982315535caf 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -413,7 +413,8 @@ static const struct reg_sequence rk_udphy_init_sequence= [] =3D { {0x0070, 0x7d}, {0x0074, 0x68}, {0x0af4, 0x1a}, {0x1af4, 0x1a}, {0x0440, 0x3f}, {0x10d4, 0x08}, - {0x20d4, 0x08}, {0x0024, 0x6e} + {0x20d4, 0x08}, {0x0024, 0x6e}, + {0x09c0, 0x0a}, {0x19c0, 0x0a} }; =20 static inline int rk_udphy_grfreg_write(struct regmap *base, --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1FCDA41F35E; Tue, 14 Jul 2026 19:26:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057179; cv=none; b=MeqJl/67wru9eldFMu2lS9+iIXGccjenIVqvDsaRgSROg3YJ5yRl9EGJxAgD5k4v+sq29XXLDdKuEOB2cjuryf3qofaS01J0Dke9La9z/gELKP2wtUVIuscD1u4uWZq6onQc13FoWUYvt34l+gzb4VrOq5D3GSO7GcfFx0IBQfo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057179; c=relaxed/simple; bh=8x+V9jjStkv7ipsHaKsRN2SwbLF1FQFj7nt1kWMYqkE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aHgU/w05DHqFaMkpxT60jPGeBjvmL9Hptmdrfo8HgfoHeN/LQTwAI5Qv/OQ/T17up88gl4QrGoOer1RANhF/onGKpUp/9HFVIJHDpnq+tqBRbBrvlMZ34lWN1K/BrXcF+ZRqFniIjbkcNMddQmwO34rKLCFkTHdSb9everYY41w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=bjEHOZAs; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="bjEHOZAs" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=8x+V9jjStkv7ipsHaKsRN2SwbLF1FQFj7nt1kWMYqkE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=bjEHOZAsnxqEDyuo0XFs7ikzQQFW4Zz8R8wg0+Ujo79uoBUW0SPaE/k+rmL9sk8lQ wzyzJarB7FpjKeltHnS6W1grQL8C/5WNO6p+cOA7njWoLIyh5kFk4562l2myOAOay7 G09Sbc3z9ZlBSTfd+/LiLYppgW4S0nJd4srYCILP3v76lC8ImbWyh8tz7TqPfM32L2 n6EzOiQ+hQ1PtUZZ9qPAsSIYYJNeGGsQ8RySctltYBS5OdVcNbeT2FA/rRl/NNnE1X ipV2iy0B68wa9V5O6ybhDPyfRaVGwh4d3ih3TCZL/Vtuhc2EQ/OWfHZpGLYswdlDPW wRWW6rghkFKzQ== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 8B5FF17E0FD0; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id DC123480047; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:11 +0200 Subject: [PATCH v13 10/35] phy: rockchip: usbdp: Add missing mode_change update Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-10-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2006; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=8x+V9jjStkv7ipsHaKsRN2SwbLF1FQFj7nt1kWMYqkE=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU9OY3Vrxoi/+TihhHDWuTHmxjep89o9N JV0E3wH43ZtfIkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qa2vMQAJdVOR9k7y4ad+UF7oDtvzdRNPtqC/Jox58Tl+GrEXB46Kknj40aIgvVocHQJ6RXW5n hJVztQQVwwuVLTt9q4zdT4Q5u48m9Wqhialbj70KAXTYx/Yfw9Kupb+UQmtVgFSTLDTJDVDDkqs z8LRM5liEPGvYQGr9qoc6nlSdCxHr0nnXjt346h4m0lAAhJvvsLhVfH7CTQ6uml4yiX0nd01Xd9 yfHH5nZ/CsiDr9K0moeNGu7b7pz8utNsbSv8ryyZS52pldIewc7vXviuNVuGICM0jUt4ddorDzp 3DrkPS9lq0ZyD6WfT7W08f89OEs1vNnZg5fTBtswS7V7+zcWCb3z0fqQN0iAev1S37k8JvdbOpk YcTdhVeNjbw2KoSOJAGhAaFoDCeC14y9wJJRPkRjlk/5bmNMkeW5rIw9mLtny7Ke/2twPQm+lKH CSxCJjBBcU+NOXKR3Yg2kBWeVTiNnm8ggAjZl3Kia27hdFo5GLGKr4J7eOvufzw0e+H0x1dWs4I +U3dkXbD3GUB8q86MYewMUjOglplYIhK94nnH/3JCcNJdp+v1/uyiYTSWliWug/FQqCLhEC925/ 9Dhg3y2EtzNlhojlit+951/rJcph6RACPEP9BZB4i6emt3L8mZtwhvTPhXDcq0yOVUl1/lKui4X zeF+nvtsKyIJnKlf5eA0t0w== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A 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. Fix this issue by introducing a new helper to update the available modes. Reviewed-by: Neil Armstrong Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 982315535caf..7540c897dde1 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_ud= phy *udphy, bool hpd) rk_udphy_grfreg_write(udphy->vogrf, &cfg->vogrfcfg[udphy->id].hpd_trigger= , hpd); } =20 +static void rk_udphy_mode_set(struct rk_udphy *udphy, u8 mode) +{ + if (udphy->mode =3D=3D mode) + return; + + udphy->mode_change =3D true; + udphy->mode =3D mode; +} + static void rk_udphy_set_typec_default_mapping(struct rk_udphy *udphy) { if (udphy->flip) { @@ -647,7 +656,7 @@ static void rk_udphy_set_typec_default_mapping(struct r= k_udphy *udphy) gpiod_set_value_cansleep(udphy->sbu2_dc_gpio, 1); } =20 - udphy->mode =3D UDPHY_MODE_DP_USB; + rk_udphy_mode_set(udphy, UDPHY_MODE_DP_USB); } =20 static int rk_udphy_orien_sw_set(struct typec_switch_dev *sw, @@ -1361,10 +1370,7 @@ static int rk_udphy_typec_mux_set(struct typec_mux_d= ev *mux, usleep_range(750, 800); rk_udphy_dp_hpd_event_trigger(udphy, true); } else if (data->status & DP_STATUS_HPD_STATE) { - if (udphy->mode !=3D mode) { - udphy->mode =3D mode; - udphy->mode_change =3D true; - } + rk_udphy_mode_set(udphy, mode); rk_udphy_dp_hpd_event_trigger(udphy, true); } else { rk_udphy_dp_hpd_event_trigger(udphy, false); --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7CDE641F376; Tue, 14 Jul 2026 19:26:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057180; cv=none; b=VirGBdY4P6KxeXehwIHDSfiNryOHLsYyLCHoSiE+ekH4t8SumNrKmGhaKZ6Fe6ssFlgcM/bb3488mmqNxm1/pWLcTg4HSkJPnVqv5DoJLyiMEpUS5wQAG+osF3RH/mrxsKqC5FMET6K2E+4KtOXmslK8P/6LDSk5VgBXTT5vAKA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057180; c=relaxed/simple; bh=Ep9LfshdUCiz57F2wiWMQojwm5vywCvStO96ooENntY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NsRSe18LXr0qOxsjGw1Dk22zlZPVQLtA0oXg096ZC2oX+ZEWCCrp9DyXR6uGrW/chKR5EdQ5/h5Oycz6l4JX6UVVSZuoMf1h2l5FS96RPZzB8g4gL9Y5nU4Tnb2vUbtAakiVDp+sS0QteYQH95VD/w9l8EMei5h4gQr8hWBVovg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=jyyx/X+x; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="jyyx/X+x" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=Ep9LfshdUCiz57F2wiWMQojwm5vywCvStO96ooENntY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jyyx/X+xzEP26a9sNzO0v8u0XmMW+BmL+nvPrLpTRdW5UeQnxQT2Bq0K48yJoueCE 6nXUU9+Dv0b7svO7r6HniFAUDb/dTo4nYgmq73vbI+payq49kX0zdvI0DwwpE05B/t I7GwbOmkIc3iOm2W0wh9+ZPDA2wR1yXD/f0PlnHhoRt7bCi1E8t3QV79smretDEd2c n0aTsbUshG9/AB6JcY3jwb0b06xchP+AbESgRORLdhgyizbnqp7AsVWqWRQ7ajix9w VE9NKJ8hvK4cu7wlzrchG9AXCJHpmPIYXqoK4/Jmhaz89Qk8XF9fncmEYlHIoVs2/8 xZMxy7Jes42rg== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 9267817E0FD2; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id DDB25480048; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:12 +0200 Subject: [PATCH v13 11/35] phy: rockchip: usbdp: Support single-lane DP Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-11-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5347; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=2BkvTykcKr7BvitoKotGuLhZY4DKXqVuMgC2j8XHkSg=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU9J+rvUof4Rlzz3U7ACd1RvyOtVppxY4 b3Jdh3tSQMSTIkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qa9HQP/3XDIp8h8pyVDDXqiD4W/Lh5fJWXiDIoEaRHKhyZ3TXOt+1PdLiH567y9fDAqHmYehT mDy8LBPZvs9KHui5ioWrSH2UFqyLhyAWTxieAaA60/oZtNBibcLR8PvUVcvDiT2N1g2l5cjKm6F dzOSaSdgEWnuFfbf5WfzhhaWUelWZSQsHAC3NysXXwI7DasfbCc/A/EmhbM3S+TinM4g3dOCne0 mtK6SM1A5Igj93EyDuCAfHpBw3EAE8nSbtN4EHqQzdc33bRGxQoxpZgQo9JOmYhgexTqzJPW9tk u47GynAYX3D9d0cMbK9GbWFc9sRpxzMlL/6o7Y0ndfXiOscwIZAX2/2PNA+9EuHQyCX+NML+HvG +uFjtmQHANtspWNOoaBW7t+LcZyXLhIot233nfPHIQiu17v7Ocp1XwGv1fc3r4BHZMJxfA5claG BeOz+KnxajHvsTHxIsjtI/QC+MOUSEHGIVPKTHE1Lvxr62qQdefJlSkC39ysZAQF5IEsGvj7R7E Vufuc483rlJ+kcEHqko/RIlHPG7C2CNOzkY+sOJh4G6Agrbh6J8dV6fqacgYhavs48L+PQ6veKD rfV78GWa2Cb9acyk1P6XB1lW1EVO6sri9cH24Sa3jqag9reD4b/K0P1EgpUZPaBeWwT5fpSXRON OeHOkQXpnjDsrTTqXdAswyw== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A From: Zhang Yubing Implement support for using just a single DisplayPort line. Signed-off-by: Zhang Yubing Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 64 +++++++++++++--------------= ---- 1 file changed, 27 insertions(+), 37 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 7540c897dde1..c4d62b234ea8 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -193,6 +193,7 @@ struct rk_udphy { int id; =20 bool dp_in_use; + int dp_lanes; =20 /* PHY const config */ const struct rk_udphy_cfg *cfgs; @@ -535,6 +536,13 @@ static void rk_udphy_usb_bvalid_enable(struct rk_udphy= *udphy, u8 enable) * <0 1> dpln0 dpln1 usbrx usbtx * <2 3> usbrx usbtx dpln0 dpln1 * -----------------------------------------------------------------------= ---- + * if 1 lane for dp function, 2 lane for usb function, define rockchip,dp-= lane-mux =3D ; + * sample as follow: + * -----------------------------------------------------------------------= ---- + * B11-B10 A2-A3 A11-A10 B2-B3 + * rockchip,dp-lane-mux ln0(tx/rx) ln1(tx) ln2(tx/rx) ln3(tx) + * <0> dpln0 \ usbrx usbtx + * -----------------------------------------------------------------------= ---- */ =20 static void rk_udphy_dplane_select(struct rk_udphy *udphy) @@ -542,18 +550,18 @@ static void rk_udphy_dplane_select(struct rk_udphy *u= dphy) const struct rk_udphy_cfg *cfg =3D udphy->cfgs; u32 value =3D 0; =20 - switch (udphy->mode) { - case UDPHY_MODE_DP: - value |=3D 2 << udphy->dp_lane_sel[2] * 2; + switch (udphy->dp_lanes) { + case 4: value |=3D 3 << udphy->dp_lane_sel[3] * 2; + value |=3D 2 << udphy->dp_lane_sel[2] * 2; fallthrough; =20 - case UDPHY_MODE_DP_USB: - value |=3D 0 << udphy->dp_lane_sel[0] * 2; + case 2: value |=3D 1 << udphy->dp_lane_sel[1] * 2; - break; + fallthrough; =20 - case UDPHY_MODE_USB: + case 1: + value |=3D 0 << udphy->dp_lane_sel[0] * 2; break; =20 default: @@ -566,28 +574,6 @@ static void rk_udphy_dplane_select(struct rk_udphy *ud= phy) FIELD_PREP(DP_AUX_DOUT_SEL, udphy->dp_aux_dout_sel) | value); } =20 -static int rk_udphy_dplane_get(struct rk_udphy *udphy) -{ - int dp_lanes; - - switch (udphy->mode) { - case UDPHY_MODE_DP: - dp_lanes =3D 4; - break; - - case UDPHY_MODE_DP_USB: - dp_lanes =3D 2; - break; - - case UDPHY_MODE_USB: - default: - dp_lanes =3D 0; - break; - } - - return dp_lanes; -} - static void rk_udphy_dplane_enable(struct rk_udphy *udphy, int dp_lanes) { u32 val =3D 0; @@ -657,6 +643,7 @@ static void rk_udphy_set_typec_default_mapping(struct r= k_udphy *udphy) } =20 rk_udphy_mode_set(udphy, UDPHY_MODE_DP_USB); + udphy->dp_lanes =3D 2; } =20 static int rk_udphy_orien_sw_set(struct typec_switch_dev *sw, @@ -895,7 +882,7 @@ static int rk_udphy_parse_lane_mux_data(struct rk_udphy= *udphy) return 0; } =20 - if (num_lanes !=3D 2 && num_lanes !=3D 4) + if (num_lanes !=3D 1 && num_lanes !=3D 2 && num_lanes !=3D 4) return dev_err_probe(udphy->dev, -EINVAL, "invalid number of lane mux\n"); =20 @@ -921,9 +908,11 @@ static int rk_udphy_parse_lane_mux_data(struct rk_udph= y *udphy) } =20 udphy->mode =3D UDPHY_MODE_DP; - if (num_lanes =3D=3D 2) { + udphy->dp_lanes =3D num_lanes; + if (num_lanes =3D=3D 1 || num_lanes =3D=3D 2) { udphy->mode |=3D UDPHY_MODE_USB; - udphy->flip =3D (udphy->lane_mux_sel[0] =3D=3D PHY_LANE_MUX_DP); + udphy->flip =3D (udphy->lane_mux_sel[0] =3D=3D PHY_LANE_MUX_DP) || + (udphy->lane_mux_sel[1] =3D=3D PHY_LANE_MUX_DP); } =20 return 0; @@ -1050,18 +1039,17 @@ static int rk_udphy_dp_phy_exit(struct phy *phy) static int rk_udphy_dp_phy_power_on(struct phy *phy) { struct rk_udphy *udphy =3D phy_get_drvdata(phy); - int ret, dp_lanes; + int ret; =20 mutex_lock(&udphy->mutex); =20 - dp_lanes =3D rk_udphy_dplane_get(udphy); - phy_set_bus_width(phy, dp_lanes); + phy_set_bus_width(phy, udphy->dp_lanes); =20 ret =3D rk_udphy_power_on(udphy, UDPHY_MODE_DP); if (ret) goto unlock; =20 - rk_udphy_dplane_enable(udphy, dp_lanes); + rk_udphy_dplane_enable(udphy, udphy->dp_lanes); =20 rk_udphy_dplane_select(udphy); =20 @@ -1341,6 +1329,7 @@ static int rk_udphy_typec_mux_set(struct typec_mux_de= v *mux, udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_DP; udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_DP; mode =3D UDPHY_MODE_DP; + udphy->dp_lanes =3D 4; break; =20 case TYPEC_DP_STATE_D: @@ -1357,6 +1346,7 @@ static int rk_udphy_typec_mux_set(struct typec_mux_de= v *mux, udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_DP; } mode =3D UDPHY_MODE_DP_USB; + udphy->dp_lanes =3D 2; break; } =20 @@ -1501,7 +1491,7 @@ static int rk_udphy_probe(struct platform_device *pde= v) ret =3D PTR_ERR(udphy->phy_dp); return dev_err_probe(dev, ret, "failed to create DP phy\n"); } - phy_set_bus_width(udphy->phy_dp, rk_udphy_dplane_get(udphy)); + phy_set_bus_width(udphy->phy_dp, udphy->dp_lanes); udphy->phy_dp->attrs.max_link_rate =3D 8100; phy_set_drvdata(udphy->phy_dp, udphy); =20 --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9FFCC41F37D; Tue, 14 Jul 2026 19:26:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057180; cv=none; b=je5fe2ddnE+/zb8dV5NQ7Sas4LU8c4qRhZMIM7GiYtMt7340nRB+9+8UdXwnYjSfYeUZQT5/HXbl1xRpkBCpzi/FKcemn19uId22vaOQ4qOmJb2xh9C0iar1923BM6vhz7QLq2pVrEtLhkPrNU4QLD3ZCDwodM2YgDGgeyktesg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057180; c=relaxed/simple; bh=p/Hx7Dq61GhbEna9UzxVrHfH1lhodjbwQzayZC0Idd8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SwKoLiPFXoFzwDHVhNLqNzF+2o+x+zRPohiNCWpoYDYky3CXJVuQCfyg+njUQYFXdmUKuHIi7H9T1kElJyWO0kDKDbLs0VSwIPqqKX+NzvKQcWNZ3U6lf+rv7JOCBmMrXVYTUVb225bhUZ/aVwjcQeEb0V+41OtVmeIuhgnIFb8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=VTzqebID; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="VTzqebID" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=p/Hx7Dq61GhbEna9UzxVrHfH1lhodjbwQzayZC0Idd8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=VTzqebIDv1ZSojFoIqdnWt25OaJUQQ5tvYIr8goZFxoEZKLsYstzzH18kyGKS617/ AnHMJO00PLjh0W/MnvkVG3q6Cz6faVwdCNcaFpaAIcpJ41OrsxEqgfSsHyxAbnAge4 T/g/m5vrtlrqCRMTGsIn56b9J9Gy9SPgd+Ew6t+a6V0li55yMmsPAbKYCwtPESRknM cyIXrA5EfpTt0Tsl+AHThMC4SbwOwd1UpbJW1A+ahr1vyr28N+iGfWkFObIW/p+gVL vrtRqegpEXTRiQhwYclMD46x5oBj2ACe6vZGc7PCkgYRm0bLdlpoAYLNmr7jojxaRf HRsfZWH0kT2Qw== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 93C0B17E1006; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id DF60148004C; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:13 +0200 Subject: [PATCH v13 12/35] phy: rockchip: usbdp: Limit DP lane count to muxed lanes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-12-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel , Sashiko X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1284; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=p/Hx7Dq61GhbEna9UzxVrHfH1lhodjbwQzayZC0Idd8=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU8sL+GNNtHpLXEM4MzDJ5cFXYELB/2m7 Q0EcBtXP1Ghs4kCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qaw7UP/iznD1gZyLHaL62P9kRPOgBf4ekeNuwGvU0+4NOqIYl9Kxt1AQJm4y0aV0TA9SoPywI m1yqN2dd8Unk2G0HMmCOAZ+7Im9zU0kWg2aUtFADBA9HwW5tpQ29ou6p7LYKnLOR5qkOQCoyVHt wcKv/0wzGy+VdUC5EqysyyfYNgXxboOzl8IkVkAVOkBoqMsKvLoTZXdf4/jCaU8w/d8JBb1NiXY hhpwLEwZAGWfdr78JKmq+g1xAFwugfs7mjr6PJEvS8mJ9EQqJCpSRujQHUaNtEc0RVNe4bfK8ES YBFx9wwKR23rjLUwxk9kqyEJGcOZOTWfG7e1HwHMdPymqwitd4ZYUqyj8ysMDeac/DZOPZ4Kt1m ZCC4/IKNer1RiXRpigWy8RWblsw7+M0d/6TpnRAmnotCiPlQK1gx8GqFSYGMOhZdDzlKsTyO0Zd BkdYdwa+mD7xKOX/FPSYhOL49YbgDuDmgXGJr2hK0DIX7ocZnPdJydqneLdEr7YIZAR3zExOSlu zekKZn25ZlAzyJxsByortwCf+/ghTsFuiNkdDOQpxI7UvS14gK1DgR3cusArPR8eIPHFqlgmh4d KtozIIHZa2TpioAC2919EF9vaTwSlOOwDzErKvlJsc4ydFXnL4sIELgYdhAzCDUbUj8LaXrXucD ebs9kJBFTRxKUT6q7wL8a+A== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A In theory the DP controller could request 4 lanes when the PHY is restricted to 2 lanes as the other half is used by USB3. With the current user (DW-DP) this cannot happen, but as the check is cheap and users might change in the future protect things accordingly. Not doing so would corrupt USB3 usage by the following code configuring the voltages. Fixes: 2f70bbddeb45 ("phy: rockchip: add usbdp combo phy driver") Reported-by: Sashiko Closes: https://lore.kernel.org/linux-phy/20260612165546.98E1F1F000E9@smtp.= kernel.org/ Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index c4d62b234ea8..b172ce6a722e 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -1099,6 +1099,9 @@ static int rk_udphy_dp_phy_verify_link_rate(struct rk= _udphy *udphy, static int rk_udphy_dp_phy_verify_lanes(struct rk_udphy *udphy, struct phy_configure_opts_dp *dp) { + if (dp->lanes > udphy->dp_lanes) + return -EINVAL; + switch (dp->lanes) { case 1: case 2: --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2344741DE02; Tue, 14 Jul 2026 19:26:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057187; cv=none; b=BeCRrLQ1FW1dCRlCfqMnHcr1o01Q2JHYFaU1nU/1b6Sx+AimuIUZu+79ylyqv1GQVFkCJGJUM+d+Hfs6AyNB+dkCEgHBgla+h8GhA6PoEN5whm+2dO3nKV8j3H6xGjURpud2K3IbxoJJYrCIG4knurtQVinDetdCBsdA4aWZPQ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057187; c=relaxed/simple; bh=Cq66EKeE2flHvN+UE+9Jd7VxqMbU2uK/j0/Drv52Xi4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SulI3fwPlRsQlRVVBGkIHV/9QaIbdv6lo+BHV+jS5PxlJgGOE1TpV5PABY1q5FOUI28KutuTMiJoduDHkeTQt+L1a8m8mpc5knaPLq0ujtfuX//wYacr5Ia+huRJX5hpqC/NHid50qunb0jtXanOrogXeoQgmZxdZmMSylQtnz4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=Rk9Z/R42; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="Rk9Z/R42" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057174; bh=Cq66EKeE2flHvN+UE+9Jd7VxqMbU2uK/j0/Drv52Xi4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Rk9Z/R42FF90Hf6BQKBh6UG09k8y4+0WjEMOKoxcv3Qmy3g7Q/oItkjBM/MVc3Y/U LtgvS1qp2fSKETmGky59xN2Taz1TP1qSwrM41Kaw6A7BoaKBdACKMThJ5uB/Gl3lL1 nregYd8BcQeaur+WNAkhqWtABPKfChL+Q7V+vrh2wtoaeh3bOGHi6zYWhXlsZyC+9K zteFaO5pdwL6hSV+eguxgRI0z96VOes4pEyVI58oE8Az7qgocs2q+bEDluuMMiPUej LA4LwigCaO3KB5nYHK1kQ09TEDJMfroLUwuCvcBzi8wVa6sarYK/RnsVd+UOzWMmxU Qp/UBsxpu1o4g== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 9D0F517E36BC; Tue, 14 Jul 2026 21:26:14 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id E0FEC48004E; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:14 +0200 Subject: [PATCH v13 13/35] phy: rockchip: usbdp: Rename DP lane functions Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-13-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2007; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=Cq66EKeE2flHvN+UE+9Jd7VxqMbU2uK/j0/Drv52Xi4=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU8PsBrTeDHuwd30ncJpcP7OaB7DFoutj QE6UqAabWAzW4kCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qaJd8P/3sIBsWLap93/EdAi2yXwxyjzrE6xD3YK8WGN3OfdL7k7V6mHLJzMQV4mWkQspATGvC h9uie7H2bQfZAagedPCIQpUmn5DN7gDBqFltuVsz4k+U2uL8+YZDlvRDfQv550Zb3NPcLut8pO5 tCKmMZ15+2b4cZwukSzN95C46aTaeWyedLVhUezkQRFSITMly03h8+EWt/fSIzfSfXJ0tS5+bZA KKqAUAzDoGj4uJVJNUoxCgF6ktVgUAnFPQ1BwmsZ81kRKn8JocE51vlYN6OaUVdygwQxNLOGNv+ 12TfpytmGAJWkQqzukfxszqahd47vBhafpxWMMp8TG3KyD6Utalh70XEfaSsWwjeAsTgj4byfzP /FaNBQqLJC1amyKbLXYVY2MYpyh10QDghOHhETCjzULTrmCQlt6U6o+wwgZzfuesbf36Pvk3VOP Wqe580QiauEbzTXg1u3w4afCDTOJF+aTPuq0AmyOwGukWVXQJSbPIyj3SfKDKZJe1sT+VGpRJoz OHHeG9Y8/xfJiC5EMxse6t+e/FJsMe0kWvjKJOUJNWaOxjniXdTX92a+EVJlDIit1FZnsXAMtax ghcbBdaMFSal+Q57BqW4h3Vx3rrCADUXafPf1Rf9l51YQF7GHQaxWr4yDru+ensmIkpe5NcSJK+ C05TLAa2ejAcGK48tWOolEQ== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A The common prefix for DisplayPort related functions is rk_udphy_dp_ (with a final _), so update the two DP lane functions to follow that scheme. Reviewed-by: Neil Armstrong Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index b172ce6a722e..7fb864a1486c 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -545,7 +545,7 @@ static void rk_udphy_usb_bvalid_enable(struct rk_udphy = *udphy, u8 enable) * -----------------------------------------------------------------------= ---- */ =20 -static void rk_udphy_dplane_select(struct rk_udphy *udphy) +static void rk_udphy_dp_lane_select(struct rk_udphy *udphy) { const struct rk_udphy_cfg *cfg =3D udphy->cfgs; u32 value =3D 0; @@ -574,7 +574,7 @@ static void rk_udphy_dplane_select(struct rk_udphy *udp= hy) FIELD_PREP(DP_AUX_DOUT_SEL, udphy->dp_aux_dout_sel) | value); } =20 -static void rk_udphy_dplane_enable(struct rk_udphy *udphy, int dp_lanes) +static void rk_udphy_dp_lane_enable(struct rk_udphy *udphy, int dp_lanes) { u32 val =3D 0; int i; @@ -1049,9 +1049,9 @@ static int rk_udphy_dp_phy_power_on(struct phy *phy) if (ret) goto unlock; =20 - rk_udphy_dplane_enable(udphy, udphy->dp_lanes); + rk_udphy_dp_lane_enable(udphy, udphy->dp_lanes); =20 - rk_udphy_dplane_select(udphy); + rk_udphy_dp_lane_select(udphy); =20 unlock: mutex_unlock(&udphy->mutex); @@ -1069,7 +1069,7 @@ static int rk_udphy_dp_phy_power_off(struct phy *phy) struct rk_udphy *udphy =3D phy_get_drvdata(phy); =20 mutex_lock(&udphy->mutex); - rk_udphy_dplane_enable(udphy, 0); + rk_udphy_dp_lane_enable(udphy, 0); rk_udphy_power_off(udphy, UDPHY_MODE_DP); mutex_unlock(&udphy->mutex); =20 --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ED46042BEBB; Tue, 14 Jul 2026 19:26:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057186; cv=none; b=hiINEw7Hd+g1P/jgXnUpduJhswH5rp1WAui7UsU5IbxjlBduEY178BlENfSV4BAo05fXFaeZLOUZmb/3ZAxR0f/oTj4Pz0UYfsQX7rFdA7vKC5E7l390O030cF0PPKqTKIaoNmIJ5afNUSaEKrI93k5MIPJrkV09kGn6QLEBtcI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057186; c=relaxed/simple; bh=DGHAo+/yHQUfg6E5xfAgVJta4NhbAYv3HkIdYgaZpOw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f+oY/oqPipGEgalQWgzEz5aiFajNxuVPsJZro9P4XtrBYBhOsQRce8bKyfMM9iBXnqqvrVgpSWOE1kHv3B0OC/J4ciXzxU+bqIcW267CFts8b+EenVwyfsZfVXY7yEa7lfVFPX9PAwvpTmLF9g8iedFh5TX5ayLsezCgGJFtCek= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=Bc+1I8bP; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="Bc+1I8bP" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057174; bh=DGHAo+/yHQUfg6E5xfAgVJta4NhbAYv3HkIdYgaZpOw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Bc+1I8bPbAf5YrUZhfocGP6eTNGE7ivR61lelnWAU10O7yVNNp0RDukMAYQIZvJbX JJIVNlfwgs+ytr7TBrN8k6Jhta83DBGjqbxi6n67rONbTc//fPW/axUGvL5ODetDgG aeKqOx0WmqL5mYJBbEaYWZREDuw8Gs2zUbqqi58vuRUFq0ADK3vcvjCF0uYEDw1WiS in/4nSDXQMF9Ed2P0VcubalikAuy3T3+XgsZJtElnGGR2mOAd2PFYYV5mIFL7QwVJO hi+eMJXsmSsYvhvQFLGvCFgP0k0l2UzLVuT8Aod1jFSqx32VeBXHf0WN3EUPo9j3Pl wwlD0CJc7IYxw== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 9FD5717E36D7; Tue, 14 Jul 2026 21:26:14 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id E2909480052; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:15 +0200 Subject: [PATCH v13 14/35] phy: rockchip: usbdp: Use FIELD_PREP_WM16_CONST Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-14-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1546; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=DGHAo+/yHQUfg6E5xfAgVJta4NhbAYv3HkIdYgaZpOw=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU/GT1APDo+BEPjP8UM1aIJhSuwryy2nd s+4ZXQ409YRtokCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qa8B8P/0PbnPvj9GhI/Olal576f27XoVknMrfwLBkaFxBTA/gL5+1IxELSjUQnewAEWo3uFPZ /Kq45x5FojevsjrqFQU4uJMYIodGPfPyjLOYt7+z0rcXnvTarXUw/i6zoC53EyxajJi7nyPnRSK REpXRUm0/ajga6TFolSetytjelfg1xfpK6mcL+l0hnmx+CsKu2Vgq2YO7zlecwXEcMgiA17QX0/ /b+baFLwuXBaTbZb3qVUskCMDc16/o6UUuJUi87fxxytykCM9G5oXhtz3E4s/1ubSuW3XTG+i8N wL10jgFDdzx9kF4l4mRHJ74vTLbmrYt86Ha3UeyeDDIHIYMHB+NCcB9Zyq6wY3TfKuN7cxiwdgN OZwWhAEVMRsBR86X4XCuKRSOZlVOz9LcXRc28Zpf0Jk8JoOpLB+AQme75ZtE5g0Rf3uXqkN76OG fesaMgyQHspVzR7M697MSfhw2lOIBtH9R3WaYjr7vUngkxCVKgd2Fx2XPwnwrdC2/N3k+50ECWB 8j029xnpkephZ95Vd36ZfTyHhYVkzD5+7UQ93bxPp5gmKTtJNfWgplKlVKj/ueDvATnKaFcBh8H duK1MalOQOmJwPG6kQdIOtbuGHnoxNr+NnNFcRU+6Bz0I+poq6VYMHOXkkZX9ic2GiyrZFzEKKK hsGszxNrFkLPHQ2rDGaQ1/Q== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Cleanup code by replacing open-coded version of FIELD_PREP_WM16_CONST with the existing helper macro. Reviewed-by: Neil Armstrong Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 7fb864a1486c..05593e98c16d 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -75,7 +76,6 @@ #define TRSV_LN2_MON_RX_CDR_DONE_OFFSET 0x1b84 /* trsv_reg06E1 */ #define TRSV_LN2_MON_RX_CDR_LOCK_DONE BIT(0) =20 -#define BIT_WRITEABLE_SHIFT 16 #define PHY_AUX_DP_DATA_POL_NORMAL 0 #define PHY_AUX_DP_DATA_POL_INVERT 1 #define PHY_LANE_MUX_USB 0 @@ -104,8 +104,8 @@ struct rk_udphy_grf_reg { #define _RK_UDPHY_GEN_GRF_REG(offset, mask, disable, enable) \ {\ offset, \ - FIELD_PREP_CONST(mask, disable) | (mask << BIT_WRITEABLE_SHIFT), \ - FIELD_PREP_CONST(mask, enable) | (mask << BIT_WRITEABLE_SHIFT), \ + FIELD_PREP_WM16_CONST(mask, disable), \ + FIELD_PREP_WM16_CONST(mask, enable), \ } =20 #define RK_UDPHY_GEN_GRF_REG(offset, bitend, bitstart, disable, enable) \ --=20 2.53.0 From nobody Sat Jul 25 18:53:59 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C8AF9424D41; Tue, 14 Jul 2026 19:26:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057181; cv=none; b=hLnq6hqvhzTJpz45p8kk3pliYMKnthAtjdpSxwNvDh5nIUyl5u3aQ+Bfs63MLXA7BmfX2E7z2XS+rZytFpVQmwpg+0VhUjb6/WS+fGfe30KzxY/1GguQbFWYtqygSHsOFNCjOmkz0vFFcuQbwW0XL2WLHrY3ly1j6kbPaauXFyc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057181; c=relaxed/simple; bh=M0nFL5Ec9a+nAx7KM5MPvRfwUmrPlBv56rRN9JqMFu4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z/8H1waIngl37LdWG2eov2rD++3FByIsVg5+HL1V8ruL96cVCVmcExVUMRrqsKsI9NBWCR0ouc1Zd2Niq61spdjwnxZvL9DrWwYvPBtaVaDDfhfTZB+JZlNK4QwHdcps2V/7EAF68JDT/I5QqT1wYxzFASurZvOfpWRiJXzwJEs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=XFGgt2J5; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="XFGgt2J5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=M0nFL5Ec9a+nAx7KM5MPvRfwUmrPlBv56rRN9JqMFu4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=XFGgt2J5SohmbJ+w5BT9dbUSny6KnYsQt29Gd/Av4cOA730GfIo68n2BxUIL27/pH YmuIZvMQFdNepjIpCsjOvq+2UzAUSZqWeDOT6fegQEQIuEZoEcTonHB5b3r6GDSttN VZ6K0u5zWSRy4UtIoKyjrzF0tPM+JgAAJHwJfy8/hD6oYiAssgenSPvynAvu6k0xSg FjmGgXv1tKZDygzcH9Ut/1J/kEJMCZFq+/s2n7S9Re5/1srpr5IM5W3o/s9rl62Omo ROiJSFrKfP0X+4FrKQzZmbwrPMng1Qdp8MMdXvgg8rwC0SuLt49a8vyoa4htEv6yAY 12vooh8a3NkfA== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id BFA9617E1011; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id E42AB480055; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:16 +0200 Subject: [PATCH v13 15/35] phy: rockchip: usbdp: Cleanup DP lane selection function Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-15-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1889; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=M0nFL5Ec9a+nAx7KM5MPvRfwUmrPlBv56rRN9JqMFu4=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjU+OG362uZYuD3Onxc6MOF/dJNcYX4B6+ FYWrS6E8zQwiYkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1PAAoJENju1/PI O/qaecsQAIXdLNXpIqQ2BwwmHG2/KGRkgviDcR1/6iw+grzpz8LmHA/kQel0X+LVtc++Ll/LC6h NxRxlxa5pYVuVZaQ3zNPW5rxtvzdbsSJMA+7/AuLAl9UUcbsHepHP2dI4LbLMKoncw+B7fo2JAK v7fKRoyVLr8JCkj3HApl9bgdr8Lb099OaHGn5r36VYRk/IWJiaFhgCJciF8bEnX9pusB1MHJssZ XNE8R61LxLJBDaCJkELSCZKF88kbTPBWALBuOindpENq72OfH++kz2StY+h/MQV6EzDF3oGMfg7 ZzMdDnBHA1NtvxMcx+cSY/SYOTVqSSNJL6FYdjWlRyumk22nWjayGAUQm3p34tkN08c6YbOoGYd ydWSGZkwwfb+YUum9U29bxWZSC/jR6PfE9xwXJc7GM+09s9KrIpWbnaOjX2KmNVwkxdfpNhFWO4 xsRGmLSmmr/WPTMJkicGMBBMuHDFnVsNbXrHhTcL1fqQSfDc0EUQh9+6zKk0NIZw67ESeF/uLGb 82xXfhIDHautC122V71E6oRKYEK4sFcrZ7PfD8b0wQY/IzK0swISNHAvNTZBPsGj807SmBLQn3K u1Xhas8PREuQfqgvPMeIA6ysibw/Cj6FcCiH8FTZFnrLJZGGCwUsYsF2o8iN/GLhhQESufnrLiB ouIaXDvZYUVdPxH6O2ccmZQ== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Use FIELD_PREP_WM16() helpers to simplify the DP lane selection logic. Reviewed-by: Neil Armstrong Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 05593e98c16d..eda3f7a1e267 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -548,30 +548,16 @@ static void rk_udphy_usb_bvalid_enable(struct rk_udph= y *udphy, u8 enable) static void rk_udphy_dp_lane_select(struct rk_udphy *udphy) { const struct rk_udphy_cfg *cfg =3D udphy->cfgs; - u32 value =3D 0; - - switch (udphy->dp_lanes) { - case 4: - value |=3D 3 << udphy->dp_lane_sel[3] * 2; - value |=3D 2 << udphy->dp_lane_sel[2] * 2; - fallthrough; - - case 2: - value |=3D 1 << udphy->dp_lane_sel[1] * 2; - fallthrough; + u32 value =3D FIELD_PREP_WM16(DP_LANE_SEL_ALL, 0); + int i; =20 - case 1: - value |=3D 0 << udphy->dp_lane_sel[0] * 2; - break; + for (i =3D 0; i < udphy->dp_lanes; i++) + value |=3D field_prep(DP_LANE_SEL_N(udphy->dp_lane_sel[i]), i); =20 - default: - break; - } + value |=3D FIELD_PREP_WM16(DP_AUX_DIN_SEL, udphy->dp_aux_din_sel); + value |=3D FIELD_PREP_WM16(DP_AUX_DOUT_SEL, udphy->dp_aux_dout_sel); =20 - regmap_write(udphy->vogrf, cfg->vogrfcfg[udphy->id].dp_lane_reg, - ((DP_AUX_DIN_SEL | DP_AUX_DOUT_SEL | DP_LANE_SEL_ALL) << 16) | - FIELD_PREP(DP_AUX_DIN_SEL, udphy->dp_aux_din_sel) | - FIELD_PREP(DP_AUX_DOUT_SEL, udphy->dp_aux_dout_sel) | value); + regmap_write(udphy->vogrf, cfg->vogrfcfg[udphy->id].dp_lane_reg, value); } =20 static void rk_udphy_dp_lane_enable(struct rk_udphy *udphy, int dp_lanes) --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C9B0A424D42; Tue, 14 Jul 2026 19:26:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057182; cv=none; b=VDxqhr4Xg3KQttVbo6SDjFKDIXKXdy2AaByEu+qqqL2M8HPkhUwPwVY3+7hXgeh/fD8xY1hCuRBzLtP4XVmT5UOxzuf+8GLoPD65r/+F0w1X8NNnsMZ0a7lWa1caIq9n/tVvWUEkO7bS4/o3jPQ61FPOT7xuQi9Pn4XXLDBe0G4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057182; c=relaxed/simple; bh=FzxdooW9D7IYkJPvtynhOqwEPTbYTO3x1SBymELs+Bc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=i3atPZimB5uUpDHs2iX7ngxcuLOvE2L6K9oSmqSTrM2T7hyAkY9UqtmWqYWN5b4WhS6hYehxUhQjjJiZlE6tD4U394R5WZhZjey5EpXKDlSU0R0CFR4sCaSiWE36QaTZF/P6KmvbVWznzMpjdKVeHV5DovraWvGKDy7XiJNptbY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=WEzpHQv5; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="WEzpHQv5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057169; bh=FzxdooW9D7IYkJPvtynhOqwEPTbYTO3x1SBymELs+Bc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=WEzpHQv5armzKD8q2UPJzb5uhxxC/XusNRE58QZAJijBUlkun3ephVIUaQpyB3eQt GJEnXgoKk6xjAnqOrCY23lJ4uqtDW+Er/1SSqD6EbW+iPTdx+v/uFbWn41MMhHWaKh JPfvIS89Y+QIvX2yVsjxCCfWZRfi+loP/E/6U1yykiMl8yGac5cYoDmnGSgeOR6fMH eDLFCiU2MovEQif+DuBR+Vgr+gqNP69s05kVSdEbIoTzcZ4UgUdp5lzKHKwBdmvO1T vQrZ+QezH5fHXWAhkHdNAu5kLrYs1sY9txIpD1kaVrxd9aVRj0stQTVb6lTUz7XEv9 aKdZRGAbMuhBg== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id C1CE017E1029; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id E5C4B480061; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:17 +0200 Subject: [PATCH v13 16/35] phy: rockchip: usbdp: Register DP aux bridge Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-16-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3189; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=FzxdooW9D7IYkJPvtynhOqwEPTbYTO3x1SBymELs+Bc=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVCmQA7P9pLhCQwe1b0neqgfTb3q06+zi 47H/lksbpq1vYkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qaAnEP/2pJcDRGVcbo90LkCIDqorCJyp0SsQeFrx/0hF1d9pt5TwyRVOu8yNxGxgkzs3qQP0p mXXvtBeYFBlC5ej+Ep371y2qiB5/9rpAdmLE3t/DhB/fSnFjh6MRSFBQDrAPUBXLA8XDcT+zT11 8iy11uQwwO95/81+gBH15ANtNDs9f6G6nO5lWqi0brpo2qd0Z4rTo5U9YcxGb2aRSe0WFDG1DRY uYFUPTIv4DYunDmM5dMH2CnrvJgXm5E/DTu5ZxRvErnSQwsDA0mSjDMlupfgclFmpzMVM69wKr4 ApV2uG9FhwTtHu++8EMQOplg+dJXFskD8VcNxayXmzYHFDDs1yQia2w6vy/XdhRX4ePm83w1B5v Cj07x5V0F1N1bFtIIzRKO08QR4mebzvAKsGdYsP9wEcCblDD4dGVGB9j0VMZkY6/AvuhrUlNKwn kMujikbBUhQP51YfbYVWfN+uv9a/Tn84Mfy/t0lC/+eBeZUYn49jMU72dqB7GH79d65WpCNcyYN 5sZr5sKEQRUh35k24/mNcjCYbUHYPsiK2AJoDHIYUhnz4px0YnbUCJHLNexcVB7BUK7Ds1KDwh9 Vj9+8Y6aBxKYgjHP2xZS+3joxJIFgZRKBrWGhyp+n6OVYgj4fLjICNF+tqoqHvRtS/Gy/sA8bZ7 ojiTRxBgKY4Q0TyhC6OgzsQ== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Add support to use USB-C connectors with the DP altmode helper code on devicetree based platforms. To get this working there must be a DRM bridge chain from the DisplayPort controller to the USB-C connector. E.g. on Rockchip RK3576: root@rk3576 # cat /sys/kernel/debug/dri/0/encoder-0/bridges bridge[0]: dw_dp_bridge_funcs refcount: 7 type: [10] DP OF: /soc/dp@27e40000:rockchip,rk3576-dp ops: [0x47] detect edid hpd bridge[1]: drm_aux_bridge_funcs refcount: 4 type: [0] Unknown OF: /soc/phy@2b010000:rockchip,rk3576-usbdp-phy ops: [0x0] bridge[2]: drm_aux_hpd_bridge_funcs refcount: 5 type: [10] DP OF: /soc/i2c@2ac50000/typec-portc@22/connector:usb-c-connector ops: [0x4] hpd Reviewed-by: Neil Armstrong Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/Kconfig | 2 ++ drivers/phy/rockchip/phy-rockchip-usbdp.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/drivers/phy/rockchip/Kconfig b/drivers/phy/rockchip/Kconfig index 14698571b607..39759bb2fa1d 100644 --- a/drivers/phy/rockchip/Kconfig +++ b/drivers/phy/rockchip/Kconfig @@ -136,8 +136,10 @@ config PHY_ROCKCHIP_USBDP tristate "Rockchip USBDP COMBO PHY Driver" depends on ARCH_ROCKCHIP && OF depends on TYPEC + depends on DRM || DRM=3Dn select GENERIC_PHY select USB_COMMON + select DRM_AUX_BRIDGE if DRM_BRIDGE help Enable this to support the Rockchip USB3.0/DP combo PHY with Samsung IP block. This is required for USB3 support on RK3588. diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index eda3f7a1e267..8ac6a83b0b2a 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -6,6 +6,7 @@ * Copyright (C) 2024 Collabora Ltd */ =20 +#include #include #include #include @@ -1414,6 +1415,7 @@ static int rk_udphy_probe(struct platform_device *pde= v) { struct device *dev =3D &pdev->dev; struct phy_provider *phy_provider; + struct fwnode_handle *dp_aux_ep; struct resource *res; struct rk_udphy *udphy; void __iomem *base; @@ -1468,6 +1470,21 @@ static int rk_udphy_probe(struct platform_device *pd= ev) return ret; } =20 + /* + * Only register the DRM bridge, if the DP aux channel is connected. + * Some boards use the USBDP PHY only for its USB3 capabilities. The + * aux bridge itself will be registered using port 0, endpoint 0, which + * is fine as that is the actual superspeed data connection shared by + * USB3 and DP based on the mux config. + */ + dp_aux_ep =3D fwnode_graph_get_endpoint_by_id(dev_fwnode(dev), 3, 0, 0); + if (dp_aux_ep) { + ret =3D drm_aux_bridge_register(dev); + fwnode_handle_put(dp_aux_ep); + if (ret) + return ret; + } + udphy->phy_u3 =3D devm_phy_create(dev, dev->of_node, &rk_udphy_usb3_phy_o= ps); if (IS_ERR(udphy->phy_u3)) { ret =3D PTR_ERR(udphy->phy_u3); --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C584429016; Tue, 14 Jul 2026 19:26:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057183; cv=none; b=gKGTUSuRIsScvIESKYDsGWNJZ/uDtbuQD75Xksf1tGaUKPyaEqunypNOpgc3/Mc62MxuDnV/Odt/09Pt8Oz4MOQQbaDyXFcVACmf9DOgYWsJ81H5ZQNxp4GcEtyqFlLkGWnaU+i1Dwsumy+LXdzQ139MoG3640LQevv6i9d+IBI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057183; c=relaxed/simple; bh=L86pedZA772Rnc2vX5oR3CIG9SixBxsK2CPI3FEKRLo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=n56bguqJyQXV+2scK18tFikp5Oa3aSW4VsYHkH+5IvEpBpNZEdo5XjXJLiHtL35sGOSuFjeVhp1z0Zsq9tFfLrR4ql29ARHRsiNkyMV8dlY9OutCH5v2CIqOcXttKN5Vwl0E7X5Y8nfQRn9soZTvQAscfRTLcNsVrE3jEZfXD2U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=q0FqhTGW; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="q0FqhTGW" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057170; bh=L86pedZA772Rnc2vX5oR3CIG9SixBxsK2CPI3FEKRLo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=q0FqhTGWKdAwyITcgEDvfdR6QGe37ol4u7s1HPInjTr9eUjMLbJvlBJI/Gy8k/LmN TKYSS5caLhOUQsesHnHCJzbNM0nqHV59ZupsFOtL87bcomB0hMW9NhlgNkPN95tr8q uKpf8WT4vCNllo3OuAal/DNgRME5scDSFc0kpgbM1TZMHZqRhXmWMsFWdhwVaP96Hc yXkfGsM9jkYRKBxCR5ahR9II6/Z5ffTIFG6TgZ55UZgwYk385utB3f5+KaeLcX4ut3 uFu8YaXQR6P9Eca58OEzhBTnSSjtJ+OZXYhZ+/sdszmRd8GlB/cHCTax818yvx0Dxd bKrv4YCPh+P7Q== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id CA86917E1064; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id E779D480062; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:18 +0200 Subject: [PATCH v13 17/35] phy: rockchip: usbdp: Drop DP HPD handling Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-17-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5857; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=L86pedZA772Rnc2vX5oR3CIG9SixBxsK2CPI3FEKRLo=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVCTG1VeV86sZvri+8rO12GtYJgA+Xddr f6yT4FMOOXvVYkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qaQDwQAIQ35iDJielOR7szgEy4bCevui8wKM3MEKrEs/g6o6ZNuQ31/5VBQkIga+fjw7I/XG1 ATw+gjisEbIlb2uxt0+fCGeSeguuamln0EaLCusbZMG0XRAfdFxhHobH2OW9XoO5S1a37nxaAGx 3mccnYFSedE0pxFBoWJ7RUgdkeX2tWTHCy/K3ZgjHUYkkMpFow7FP0sE8LvnRdiKBAGaNv0bbHp vmHAVuqlfa7oUt60Pv+/0lReDioKiJbTjBHjpvsp3dsNDJIICybMhLVwQkprvoQ/UAPTCJhgw2D qn2cO6VH9J0Hytbu20F7ziT+pAjQUZdXRkimPGQu8WZBfvhW+98jK/FLfYztoMnEDj+rr1Cnryc +Gjx5c076GF7DSvRPL6FhrrS4NkE7a4f464GgXvFfLxEl4lyWJDdn5VpRewIjnhXQV6nRa2N3Fl AdVsV1B8tMuutMH22fY3kPa4wRDg+ZgjdYp0xGlS8bKxFk53QhmOaYwCdCHEhiIWnfT3v6zIMzH dHKJ1SaUFWl8GNHJ1zyUfXyaj6Vc1SrAfxQjxrsyR2AUjeBqY5U4qvLTLHGVOa8V+ITOCdjkRFD ny+1TfZ4y4YgboeqbjKdJFOR6nFUElWsB16xHCS08Mu7nYZzeR+PK0DZQagb2WD8nKb70Ufd2j4 Aucw1YioqWyT82Lqsgu8l5w== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Drop the HPD handling logic from the USBDP PHY. The registers involved require the display controller power domain being enabled and thus the HPD signal should be handled by the displayport controller itself. Apart from that the HPD handling as it is done here is incorrect and misses hotplug events happening after the USB-C connector (e.g. when a USB-C to HDMI adapter is involved and the HDMI cable is replugged). Proper USB-C DP HPD support requires some restructuring of the DP controller driver, which will happen independent of this patch. The mainline kernel does not yet support USB-C DP AltMode on RK3588 and RK3576, so it is fine to drop this code without adding the counterpart in the DRM in an atomic change. Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 85 ++++-----------------------= ---- 1 file changed, 9 insertions(+), 76 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 8ac6a83b0b2a..24108816e3b9 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -128,7 +128,6 @@ struct rk_udphy_grf_cfg { =20 struct rk_udphy_vogrf_cfg { /* vo-grf */ - struct rk_udphy_grf_reg hpd_trigger; u32 dp_lane_reg; }; =20 @@ -186,14 +185,11 @@ struct rk_udphy { u32 dp_lane_sel[4]; u32 dp_aux_dout_sel; u32 dp_aux_din_sel; - bool dp_sink_hpd_sel; - bool dp_sink_hpd_cfg; unsigned int link_rate; unsigned int lanes; u8 bw; int id; =20 - bool dp_in_use; int dp_lanes; =20 /* PHY const config */ @@ -577,19 +573,6 @@ static void rk_udphy_dp_lane_enable(struct rk_udphy *u= dphy, int dp_lanes) CMN_DP_CMN_RSTN, FIELD_PREP(CMN_DP_CMN_RSTN, 0x0)); } =20 -static void rk_udphy_dp_hpd_event_trigger(struct rk_udphy *udphy, bool hpd) -{ - const struct rk_udphy_cfg *cfg =3D udphy->cfgs; - - udphy->dp_sink_hpd_sel =3D true; - udphy->dp_sink_hpd_cfg =3D hpd; - - if (!udphy->dp_in_use) - return; - - 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 =3D=3D mode) @@ -1000,29 +983,6 @@ static void rk_udphy_power_off(struct rk_udphy *udphy= , u8 mode) rk_udphy_disable(udphy); } =20 -static int rk_udphy_dp_phy_init(struct phy *phy) -{ - struct rk_udphy *udphy =3D phy_get_drvdata(phy); - - mutex_lock(&udphy->mutex); - - udphy->dp_in_use =3D true; - - mutex_unlock(&udphy->mutex); - - return 0; -} - -static int rk_udphy_dp_phy_exit(struct phy *phy) -{ - struct rk_udphy *udphy =3D phy_get_drvdata(phy); - - mutex_lock(&udphy->mutex); - udphy->dp_in_use =3D false; - mutex_unlock(&udphy->mutex); - return 0; -} - static int rk_udphy_dp_phy_power_on(struct phy *phy) { struct rk_udphy *udphy =3D phy_get_drvdata(phy); @@ -1254,8 +1214,6 @@ static int rk_udphy_dp_phy_configure(struct phy *phy, } =20 static const struct phy_ops rk_udphy_dp_phy_ops =3D { - .init =3D rk_udphy_dp_phy_init, - .exit =3D rk_udphy_dp_phy_exit, .power_on =3D rk_udphy_dp_phy_power_on, .power_off =3D rk_udphy_dp_phy_power_off, .configure =3D rk_udphy_dp_phy_configure, @@ -1309,6 +1267,14 @@ static int rk_udphy_typec_mux_set(struct typec_mux_d= ev *mux, struct rk_udphy *udphy =3D typec_mux_get_drvdata(mux); u8 mode; =20 + /* + * Ignore mux events not involving DP AltMode, because + * the mode field is being reused, e.g. state->mode =3D=3D 4 + * could be either TYPEC_MODE_USB4 or TYPEC_DP_STATE_C. + */ + if (!state->alt || state->alt->svid !=3D USB_TYPEC_DP_SID) + return 0; + mutex_lock(&udphy->mutex); =20 switch (state->mode) { @@ -1340,22 +1306,7 @@ static int rk_udphy_typec_mux_set(struct typec_mux_d= ev *mux, break; } =20 - if (state->alt && state->alt->svid =3D=3D USB_TYPEC_DP_SID) { - struct typec_displayport_data *data =3D state->data; - - if (!data) { - rk_udphy_dp_hpd_event_trigger(udphy, false); - } else if (data->status & DP_STATUS_IRQ_HPD) { - rk_udphy_dp_hpd_event_trigger(udphy, false); - usleep_range(750, 800); - rk_udphy_dp_hpd_event_trigger(udphy, true); - } else if (data->status & DP_STATUS_HPD_STATE) { - rk_udphy_mode_set(udphy, mode); - rk_udphy_dp_hpd_event_trigger(udphy, true); - } else { - rk_udphy_dp_hpd_event_trigger(udphy, false); - } - } + rk_udphy_mode_set(udphy, mode); =20 mutex_unlock(&udphy->mutex); return 0; @@ -1510,20 +1461,6 @@ static int rk_udphy_probe(struct platform_device *pd= ev) return 0; } =20 -static int __maybe_unused rk_udphy_resume(struct device *dev) -{ - struct rk_udphy *udphy =3D dev_get_drvdata(dev); - - if (udphy->dp_sink_hpd_sel) - rk_udphy_dp_hpd_event_trigger(udphy, udphy->dp_sink_hpd_cfg); - - return 0; -} - -static const struct dev_pm_ops rk_udphy_pm_ops =3D { - SET_LATE_SYSTEM_SLEEP_PM_OPS(NULL, rk_udphy_resume) -}; - static const char * const rk_udphy_rst_list[] =3D { "init", "cmn", "lane", "pcs_apb", "pma_apb" }; @@ -1547,7 +1484,6 @@ static const struct rk_udphy_cfg rk3576_udphy_cfgs = =3D { }, .vogrfcfg =3D { { - .hpd_trigger =3D RK_UDPHY_GEN_GRF_REG(0x0000, 11, 10, 1, 3), .dp_lane_reg =3D 0x0000, }, }, @@ -1588,11 +1524,9 @@ static const struct rk_udphy_cfg rk3588_udphy_cfgs = =3D { }, .vogrfcfg =3D { { - .hpd_trigger =3D RK_UDPHY_GEN_GRF_REG(0x0000, 11, 10, 1, 3), .dp_lane_reg =3D 0x0000, }, { - .hpd_trigger =3D RK_UDPHY_GEN_GRF_REG(0x0008, 11, 10, 1, 3), .dp_lane_reg =3D 0x0008, }, }, @@ -1628,7 +1562,6 @@ static struct platform_driver rk_udphy_driver =3D { .driver =3D { .name =3D "rockchip-usbdp-phy", .of_match_table =3D rk_udphy_dt_match, - .pm =3D &rk_udphy_pm_ops, }, }; module_platform_driver(rk_udphy_driver); --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C4CA429014; Tue, 14 Jul 2026 19:26:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057183; cv=none; b=TpRo1gQ/co7CfCvUOx+5cJ/OR4I1rbzTd3UKmQXgcAow/sAnf3Fmt6kkF2j5SYTJei2Zr/8mIJD04T3kOSsq875QQYAY+9wbbEudRK/8oG7mV2bgoi0nN/nmymommqk2lKV+YdpcfFLezkAjWmpD4orpHa47QbxP4PBYkw8jz9Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057183; c=relaxed/simple; bh=KsztTcLL1hh9As65BcDTh5Y7TjOnYb7YivozEbWiMmA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=U6IA0BngayuIJCpx9EaEG3JtsNNEuYZEcFBC4AGVsCkfeaeH1vmvOK3ysj2Uw0Zdo2OJJCK+cEvRdzeyo63/vEQz52h7v7TK0DcbIev3EbOdDqztkZ/GYR2QdjdiMMbLDQeR5bTEWHlaY5YBTNhI2Lw24AYxH264ilLET2Gl4Zs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=AAjUyJ7d; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="AAjUyJ7d" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057170; bh=KsztTcLL1hh9As65BcDTh5Y7TjOnYb7YivozEbWiMmA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=AAjUyJ7de2ngGZyvzDv86kKk7IBaDgqEtOsSXZ6CqT2mEIraKYCDHCP/Jo9qjU4C6 GlbybFTTZ38TsqUtTmKNV6gc2pTOcoUisX95f5cQTeXGqNNtH6RGJBbmKCREx3JOUm +m6BcPPhi2Il0MgU5uvTk/22c73y4KUBDyCtEb7IAJZOFYoG4tHljnWcI8cj3AeRqh 9oqvnP+dykHT1g2uELpyAg+1SyvoVuRxEmKM9Aa6XclGEBAyA1vDmKMdVbpyJC4vok C1e+NU2hMrjhY+IExrhlOFyJjE0q+v1KFk8HOOpPgSGP4nVmaT65Je/MDwPApsRPfr V6Xt22BE2BpWA== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id CE7A417E1066; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id E8FBA480064; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:19 +0200 Subject: [PATCH v13 18/35] phy: rockchip: usbdp: Rename mode_change to phy_needs_reinit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-18-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1831; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=KsztTcLL1hh9As65BcDTh5Y7TjOnYb7YivozEbWiMmA=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVDMasSM5tZO04D8eI8/xlSbGyK/r2RXz LkdgeaQfIV6o4kCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qa6LQP/3SP95HlK/XgRh8lWAXEWwzW0x3rp1NOjrRh9Rk15Xqx6RyaRPa02kjkzI4g+myqy6m cgWO1PeF8ujVY7E8RIpq/hZvVdleHRsIHA/DfBvFhBpOzRR9BMHFcTkLYDSneGw4ZZvNPsZhHyd QFFXSkDhJzwt25XHPWnnS0T5u5nJBpWl2rN/TSwLg67RvLko8iHvib7HqOFpHw1QLERJM3A8zAh QuHLvBvC2c0+RZS8tyAnh7U1FmHpT8tS8U1jZcuEoehkkuUvDzjqPF02uasEksf2ANY5LZvfpyN UhyRG6M4V7zR689Q7/UFN+aewtGEyrjo6dM5ln9SL0M8sSZF3SuGIVLZAfYojg2tKmJ/zFdy0qG 6dZy9zkLYMI9kc3mapoS4PVpnKR2NdWcyhIeF1S2p80AmEEsKvJpYRzlIfI12fYFHjU/av+CKYB diQdUpJJB7O/VZ5jJlQm8xc8fbVhLYDW6jT+4IIBcG1UAKb23740zCV+oPzSiY8uoUKAj849oAh cy8Lup/NwoVThnSlsK4z2w6RykjvMk+L77zdqnuUzbHIzh9LdjhNtpPZmWIVXJ9nUwEs2OKSQLl URnkAPMxNTjbJ2NZ8r7kttvXorql9XaU51pYjb0CbLAAF8vGkBtemGE4txDgEt90OTmGaHcpUQX dXMYLajiDIBQppKozwooqOQ== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Right now the mode_change property is set whenever the mode changes between USB-only, DP-only and USB-DP. It is needed, because on any mode change the PHY needs to be re-initialized. Apparently at least DP also requires a re-init when the cable orientation is changed, which is currently not being done (except when the orientation switch also involves a mode change). Prepare for this by renaming mode_change to phy_needs_reinit. Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 24108816e3b9..e44d19c9d119 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -171,7 +171,7 @@ struct rk_udphy { =20 /* PHY status management */ bool flip; - bool mode_change; + bool phy_needs_reinit; u8 mode; u8 status; =20 @@ -578,7 +578,7 @@ static void rk_udphy_mode_set(struct rk_udphy *udphy, u= 8 mode) if (udphy->mode =3D=3D mode) return; =20 - udphy->mode_change =3D true; + udphy->phy_needs_reinit =3D true; udphy->mode =3D mode; } =20 @@ -951,15 +951,15 @@ static int rk_udphy_power_on(struct rk_udphy *udphy, = u8 mode) =20 if (udphy->mode & UDPHY_MODE_USB) rk_udphy_u3_port_disable(udphy, false); - udphy->mode_change =3D false; - } else if (udphy->mode_change) { + udphy->phy_needs_reinit =3D false; + } else if (udphy->phy_needs_reinit) { if (udphy->mode =3D=3D UDPHY_MODE_DP) rk_udphy_u3_port_disable(udphy, true); =20 ret =3D rk_udphy_init(udphy); if (ret) return ret; - udphy->mode_change =3D false; + udphy->phy_needs_reinit =3D false; } =20 udphy->status |=3D mode; --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5DBBC429017; Tue, 14 Jul 2026 19:26:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057183; cv=none; b=Yb89kl8RshCdf01+Xr3r5HkWUQJIklo6bNCC3WPDmWfmBqPRC78NKiDFoyAdhtdjNm3PPdFsi5G9MUrCFEyaxIRrUFC7XFWTp4uPtLPSpf2QuUHw5kZrdsUsrTkFr3ZbYBKxYJqn6sByyYDf7Ce/6sjO/jlo8ONNChZIf/kZFMY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057183; c=relaxed/simple; bh=AyMiIrxEFIKqV6uGqRNRCgp/f+R94tkSUd/pjFfr5TQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=l4P5k8NsOzHcqXQhomfEt9xRcS0Ci18NbcTNmtYCdDN/ecrpDmNTyJdl6fPYSnKzJ7NNeNARPGq9u5Kh8VA/OhkTZtLWHHnHqaeNDa4v4BijcwBZWcLMkWpzegwZ+xbbNzQ9qSMtiik+UCcUoxNzbnSqTBm/DQX7xP6nldlQ324= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=S8i0y6Bk; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="S8i0y6Bk" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057170; bh=AyMiIrxEFIKqV6uGqRNRCgp/f+R94tkSUd/pjFfr5TQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=S8i0y6Bk2mz+gVTHiMTvthsVouojTBj1OxXbERRrMlNUXOJnIGFrS6NrjRaerbg6v ldqMfXYn/Kyxy37KbcJ6oriwV+3CWwZvCkFA1UoTGT/eCWDfnjwsUtAA32jMncA4kI 1felqhIlJ6VvLPwoK6kXY8APNN2d+F7IFF97AJx4ul+PG1HHKLV5GGQzsZ4pRS38Hi BB+WQOq1imj5yckWz8RNEpVtVUY2KM+mZSpmsL1THpQB6Z3SZQW9urm1NPF+j/XCQ1 OW3dl7FRR5/EfI1PrDC2a9UwTDvVETS3YyAe8Bp4ohcv+AZBpBUQUw3AMRg1uA0lb4 B/MFzSoI23n6w== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id D629817E1078; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id EA865480065; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:20 +0200 Subject: [PATCH v13 19/35] phy: rockchip: usbdp: Re-init the PHY on orientation change Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-19-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1257; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=AyMiIrxEFIKqV6uGqRNRCgp/f+R94tkSUd/pjFfr5TQ=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVD8oSGY06cvRrv0o+nrV7brRhxANuGPQ FS3rUA29mKG6IkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qaYOsP/0RYxf7jHIqQljkVWxzrVIXEbTX+J5PEYj50+l3SUN1Xwue6pcsKgAmPECd7hbxdBuM JYniWbFHY/Tj/wxkyjmJKGx/g2gjW8PrJbrn4iUGy2vH2RvpkLwYVdUZ/OkZhHnWLVEU3Fcnhy9 SOFps+IsB9JH1oIJ3RTHbnv9Ru+SMGgheDcUV8eMqhH6SpfAQn2U7Gv5P5R4TyMD1GyWB2WdYBf luAWX5IvwyN04AQMrdFScFKkmhR8Qpi5O9ytt0RirggY3oV38GctJuBOD+tDwxPPi4oj26PGz4Q tJFS79DxA/5i2hGOV6TAqX7ghmSjBdTaWTikIFD1jt42l7dOPM8jvSZdnaOVdToAqGvvn5pTbMs yuNrQbgAa2SNvg2c1NnlPFOtScRYuTVpf79qU7Bac8KEDi5gjxm3rhqqIt611ZFh8waHmmWL9Y4 0+6m/UDJE1cWXICzSwCqSmYBXqHcAcLIEdku+fpfNhTSf/JYg4p4oap9c0Et95YVsSGttgBmplX g+2eAcvnOUpjRvLdMa1slGOAW6z07b8rZBXrXbTlWCiFWlJVRJ4ZjEm9y0UN7PVRVUzih4sBv60 2EAbg8/lvjwR5QKm6c5K8Qm5XD4jLIfx1E38ejkJuWVTg+6SLb0NB8zcax86YCmqvndXPXX6W6H WOnxIYuayS1gAV17kKQcm4Q== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Changing the cable orientation reconfigures the lane muxing, which requires re-initializing the PHY. Without this DP functionality breaks, if the cable is re-plugged with swapped orientation. Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index e44d19c9d119..4b454798c4ed 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -620,6 +620,7 @@ static int rk_udphy_orien_sw_set(struct typec_switch_de= v *sw, enum typec_orientation orien) { struct rk_udphy *udphy =3D typec_switch_get_drvdata(sw); + bool flipped =3D orien =3D=3D TYPEC_ORIENTATION_REVERSE; =20 mutex_lock(&udphy->mutex); =20 @@ -631,7 +632,10 @@ static int rk_udphy_orien_sw_set(struct typec_switch_d= ev *sw, goto unlock_ret; } =20 - udphy->flip =3D orien =3D=3D TYPEC_ORIENTATION_REVERSE; + if (udphy->flip !=3D flipped) + udphy->phy_needs_reinit =3D true; + + udphy->flip =3D flipped; rk_udphy_set_typec_default_mapping(udphy); rk_udphy_usb_bvalid_enable(udphy, true); =20 --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C538429015; Tue, 14 Jul 2026 19:26:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057182; cv=none; b=nvcIlYGb0nqwo/vw7hJpTaZqn5q0/DI+wBdxu8DnfDb4GcSqDNXguHP3nIxwLhpDm8uDZjOTMDJQGXROTpK+qpBq3kMse/nKPv/WqAPPP6+EqzthDOo9k5u9LjREKxtHUMhowMebRkbjD6X8q2in8P7jRX70ESYbEz8OPu5eslM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057182; c=relaxed/simple; bh=WvI4CpW9M8TpkyLpkp+OrGOQyMjechaxNGHQNV0SpgY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kqxlZsvyJm00nnlxnD7Cyzim4xJvY+PiPp/enAftM0u32uDPXMwhVSnN28OPuiuyPfpUuXsfvwHta+V+iY7EsdtpHtRyMKVHNjbjyD9FUboyPg9H9QwJHTN7j0ozwZBW9ZL9pcrV4BnRK/3muamKcZytpz2xvOooKstdpvdHCNg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=NiZEqbMY; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="NiZEqbMY" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057170; bh=WvI4CpW9M8TpkyLpkp+OrGOQyMjechaxNGHQNV0SpgY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=NiZEqbMYXs9uX+W9gFmJcGy6Fd+jxd0WaP5KKhzkK1w+aAVKxu6HVVq37cYhVcGYn PCSeeRMOk7UCqgYrPhX6vGp3brFyJCdlTorv2LR1jl2J7LXH8018L5thL5s25X4oJB oYwKXXNpT4GVjhcUkzLmmcb76LdNHlqPAoMMPSz4FGZOZIXqmuh1z+VAHDmzVqTkUW mD+ApPJI2DrhpE1osdIftmQzk3gbraIWLW/u2AvLQHE//zHGvHc8fI6RuaX70nUaJE O1eLakY/mVsPKbL5PA8gR6XrXnjerXX7Ol99ajr0oTZAmwmP5zJYneSUVNHY1zXErs QKPENXRe8oo1Q== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id DA26317E10F4; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id EC430480066; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:21 +0200 Subject: [PATCH v13 20/35] phy: rockchip: usbdp: Factor out lane_mux_sel setup Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-20-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4580; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=WvI4CpW9M8TpkyLpkp+OrGOQyMjechaxNGHQNV0SpgY=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVB0lWMg1xzAO/15QymWszfDw70qKIHzO 8gf37evnADa0okCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qao+YP/2i6ONwXsQR1ErnFAjHZnSi+JNSvnndhZn90lyYcNSyCWu+6NRIrJeVkfGfhm4zs5Jp +DNQzrmxkiA56Hp8tugev/gJ8D8mohBCUu6PAuMXyLl+snULsUUO85zds79FdmZxA+/x/ijCeid YmmQqhgVwHBDq3w+jEqN7lNQwB7n5BrDS3qTGHAJ23X5kA4tnlpVGRMmqvgiXmo6sbqGrty7gtt ysWCz2rI0FAyAWln1fwS74Ijt4iLviZZG54zcJ478V3ChDIphEgj/TwPS62pZzQZ+5oEIohQpuo f6diBumOJGfDkOi/SQKOhPY2VX6LN41/iRkXPzScFuWvjTYga0qy7vxeJynuLLYrrwauwI3h4kR 61AgLY5cYbbJvyIwUNjQ6Qdz2J8AvYAAim/rVrti0vXuxsQr9NUD2dbsYjafXIrFTj3oKv9JVGC 3LHX39YxTvxDnFEVUyzKRQaRIGqAiHHCrC2lOAhM1teeFpaI0hTjTlw/HPD9+zDayTDcDnV5c/C /SsN+U5NvoHEKUAA1/aTthQJmPl/5w65IBWN6vuzYM0BHl0TqEr68G24hbUxRpyKMJHR0atcLAH RiKIZzYK3xN0dIyInoLkRZdLeOaegTPuye7EcuA0BHzEeOnVlZwUzasTrtFLK+dresTvbDJiW4f oNdQjus4lzrqWxXQoW7oraA== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Avoid describing the USB+DP lane_mux_sel logic twice by introducing a helper function to reduce code duplication. Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 81 +++++++++++++++------------= ---- 1 file changed, 40 insertions(+), 41 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 4b454798c4ed..4e54020d1755 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -582,6 +582,42 @@ static void rk_udphy_mode_set(struct rk_udphy *udphy, = u8 mode) udphy->mode =3D mode; } =20 +static void rk_udphy_set_typec_state(struct rk_udphy *udphy, unsigned long= state) +{ + u8 mode; + + switch (state) { + case TYPEC_DP_STATE_C: + case TYPEC_DP_STATE_E: + udphy->lane_mux_sel[0] =3D PHY_LANE_MUX_DP; + udphy->lane_mux_sel[1] =3D PHY_LANE_MUX_DP; + udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_DP; + udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_DP; + mode =3D UDPHY_MODE_DP; + udphy->dp_lanes =3D 4; + break; + + case TYPEC_DP_STATE_D: + default: + if (udphy->flip) { + udphy->lane_mux_sel[0] =3D PHY_LANE_MUX_DP; + udphy->lane_mux_sel[1] =3D PHY_LANE_MUX_DP; + udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_USB; + udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_USB; + } else { + udphy->lane_mux_sel[0] =3D PHY_LANE_MUX_USB; + udphy->lane_mux_sel[1] =3D PHY_LANE_MUX_USB; + udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_DP; + udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_DP; + } + mode =3D UDPHY_MODE_DP_USB; + udphy->dp_lanes =3D 2; + break; + } + + rk_udphy_mode_set(udphy, mode); +} + static void rk_udphy_set_typec_default_mapping(struct rk_udphy *udphy) { if (udphy->flip) { @@ -589,10 +625,6 @@ static void rk_udphy_set_typec_default_mapping(struct = rk_udphy *udphy) udphy->dp_lane_sel[1] =3D 1; udphy->dp_lane_sel[2] =3D 3; udphy->dp_lane_sel[3] =3D 2; - udphy->lane_mux_sel[0] =3D PHY_LANE_MUX_DP; - udphy->lane_mux_sel[1] =3D PHY_LANE_MUX_DP; - udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_USB; - udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_USB; udphy->dp_aux_dout_sel =3D PHY_AUX_DP_DATA_POL_INVERT; udphy->dp_aux_din_sel =3D PHY_AUX_DP_DATA_POL_INVERT; gpiod_set_value_cansleep(udphy->sbu1_dc_gpio, 1); @@ -602,18 +634,14 @@ static void rk_udphy_set_typec_default_mapping(struct= rk_udphy *udphy) udphy->dp_lane_sel[1] =3D 3; udphy->dp_lane_sel[2] =3D 1; udphy->dp_lane_sel[3] =3D 0; - udphy->lane_mux_sel[0] =3D PHY_LANE_MUX_USB; - udphy->lane_mux_sel[1] =3D PHY_LANE_MUX_USB; - udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_DP; - udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_DP; udphy->dp_aux_dout_sel =3D PHY_AUX_DP_DATA_POL_NORMAL; udphy->dp_aux_din_sel =3D PHY_AUX_DP_DATA_POL_NORMAL; gpiod_set_value_cansleep(udphy->sbu1_dc_gpio, 0); gpiod_set_value_cansleep(udphy->sbu2_dc_gpio, 1); } =20 - rk_udphy_mode_set(udphy, UDPHY_MODE_DP_USB); - udphy->dp_lanes =3D 2; + /* default to USB3 + DP as 4 lane USB is not supported */ + rk_udphy_set_typec_state(udphy, TYPEC_DP_STATE_D); } =20 static int rk_udphy_orien_sw_set(struct typec_switch_dev *sw, @@ -1269,7 +1297,6 @@ static int rk_udphy_typec_mux_set(struct typec_mux_de= v *mux, struct typec_mux_state *state) { struct rk_udphy *udphy =3D typec_mux_get_drvdata(mux); - u8 mode; =20 /* * Ignore mux events not involving DP AltMode, because @@ -1281,38 +1308,10 @@ static int rk_udphy_typec_mux_set(struct typec_mux_= dev *mux, =20 mutex_lock(&udphy->mutex); =20 - switch (state->mode) { - case TYPEC_DP_STATE_C: - case TYPEC_DP_STATE_E: - udphy->lane_mux_sel[0] =3D PHY_LANE_MUX_DP; - udphy->lane_mux_sel[1] =3D PHY_LANE_MUX_DP; - udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_DP; - udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_DP; - mode =3D UDPHY_MODE_DP; - udphy->dp_lanes =3D 4; - break; - - case TYPEC_DP_STATE_D: - default: - if (udphy->flip) { - udphy->lane_mux_sel[0] =3D PHY_LANE_MUX_DP; - udphy->lane_mux_sel[1] =3D PHY_LANE_MUX_DP; - udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_USB; - udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_USB; - } else { - udphy->lane_mux_sel[0] =3D PHY_LANE_MUX_USB; - udphy->lane_mux_sel[1] =3D PHY_LANE_MUX_USB; - udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_DP; - udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_DP; - } - mode =3D UDPHY_MODE_DP_USB; - udphy->dp_lanes =3D 2; - break; - } - - rk_udphy_mode_set(udphy, mode); + rk_udphy_set_typec_state(udphy, state->mode); =20 mutex_unlock(&udphy->mutex); + return 0; } =20 --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0D37218AB9; Tue, 14 Jul 2026 19:35:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057730; cv=none; b=PUsbmZJ2/0XszNUG7/vYaLju2DaA138yBB1CDs5L/KtICdoZcl0euzi+GGE0TH7AHpc/uQODLRtL2yDnfOwwjEI4ZqlStbDjBb7GeNQmambPg4mX80jXkzH0wWoz5kZvA3ObJ55zW0TbrGU94d0g25S7RXP/YWDKTG6wR58mqBM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057730; c=relaxed/simple; bh=l3uTaVmYXyzz4C+Rff5MIwMgEtWsya2jWgKHFq2XIA4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PWoQodhcrr6HWyjrYSpjOa9nfCm6LnNu5U3O/iKNAs+zPoE74HDpO0pkwuFoKerPcSW/SHf8GtoCf+jhGHA4XUHvUCCYXC6wtdTUGfTmVZeQvJPv/2SXJGkWXilegc7Qecp8hCcQaZNEAwWTP8tEKgKO3MrxaL2TETU7G268M4Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=Ful6Ju9c; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="Ful6Ju9c" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057725; bh=l3uTaVmYXyzz4C+Rff5MIwMgEtWsya2jWgKHFq2XIA4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Ful6Ju9cdFmKNPUEEKH/zFllOJ/MQyVwPbqDMcOdkNyXZTP4rQWKL39A0PVaNWOvK epw1m6Y9yQbK8sckHKTSDYFfsTpTAUBs9+mMUy20sK0lFFQYQkiVktT26ZHTsXLq1x oPujTX/40Az7AQ7o0ieqmWKQdK8LuEwS6x6E9qaHagg6Xj9K6zqLQBRb3f7m7iFwPZ Jzct7j85z0S2NxyfGcuGsoGAxQ1PY2HZnx00/K9QgKZGH09ATfDxQvtNhI/IltS6vC AwkShD0uiu7/TIrDmnrmRYluqG8/pdH70jvThvKyMcQr5gWkX1nxdv95F24hGrQ5US NCE9t82HScvjw== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id CE72C17E0928; Tue, 14 Jul 2026 21:35:25 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id EDE5F480067; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:22 +0200 Subject: [PATCH v13 21/35] phy: rockchip: usbdp: Properly handle TYPEC_STATE_SAFE and TYPEC_STATE_USB Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-21-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel , Sashiko X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1759; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=l3uTaVmYXyzz4C+Rff5MIwMgEtWsya2jWgKHFq2XIA4=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVDN6PqS920WWW30IhHfv1MR1K7reXu4q fxzyU59q3EzWokCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qaNkUP/3SDFSJmB/Jf/Jwr6FxQLjhiRQY5pvNNbpmStQp763owq3dXPJk4fBEoYUC920K8+uk /D7iGwuD9s+DAkIaCBnJzKmjuohA/JP3b2pZQkfsSVWPMq+KYpB7ErbFb1UhLqix2tPI5TcKtUe hKxo1cZrgKyNIPYEFIBDfU8AKlDUO8tb/Lzi18L2PSqOn8kKY0t7gFkGP9lVVv1QqwAF3Jb4CvK 8qL1kRr71zqVDpVXHGtd4GS6JlRdkF3dvTSVyuMirBcDQSnRhQUJaKS/aWSt/f43lFIb5XCPR3+ tVuCteyvbBS1o4DkhzTq/zyOf4HLcXGSBDJfHW/wROoC/ORSP/scMCopbY4INkWe5l09SC4li8W WsmV5RW4IkDrrG9XklTTxeRhnShYZbB+N4s6f8fI5Dwnx8RXY1k4tZvJiBkHEvLomYfDQc5ZWVw VX746/CT+C2vbfuvfTE1s5w2HsPwWEQKPYjTvRTg6/kKi1oKoZ1N5eYXMZUYhNGM/7i8IJ9oHVZ Mhp0H0c7jUxB6e7TufSxNCFY+C0tOPycyWu/gCG8r2/SUCxWq9ixGzkV9j1Qb6DEMOO1l094glq yNFfZnYwuwRmfDCS1gkIyhWtu97H01puIOTdukpVlZaYosxo6fK7mbAI7rPvhKGkBbhr+H9C7tN Lidg+2WMpL8bLkq9yZfQ4yg== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Handle TYPEC_STATE_SAFE and TYPEC_STATE_USB Type-C state events, so that the muxing is properly updated when exiting DP AltMode. Fixes: 2f70bbddeb45 ("phy: rockchip: add usbdp combo phy driver") Reported-by: Sashiko Closes: https://sashiko.dev/#/message/20260619155020.CC7361F000E9%40smtp.ke= rnel.org Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 4e54020d1755..0399cbf96e19 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -1293,17 +1293,26 @@ static const struct phy_ops rk_udphy_usb3_phy_ops = =3D { .owner =3D THIS_MODULE, }; =20 +static bool rk_udphy_is_supported_mode(struct typec_mux_state *state) +{ + /* Handle Safe State and USB State */ + if (state->mode < TYPEC_STATE_MODAL) + return true; + + /* Handle DP AltMode */ + if (state->alt && state->alt->svid =3D=3D USB_TYPEC_DP_SID) + return true; + + return false; +} + static int rk_udphy_typec_mux_set(struct typec_mux_dev *mux, struct typec_mux_state *state) { struct rk_udphy *udphy =3D typec_mux_get_drvdata(mux); =20 - /* - * Ignore mux events not involving DP AltMode, because - * the mode field is being reused, e.g. state->mode =3D=3D 4 - * could be either TYPEC_MODE_USB4 or TYPEC_DP_STATE_C. - */ - if (!state->alt || state->alt->svid !=3D USB_TYPEC_DP_SID) + /* Ignore mux events not involving USB or DP */ + if (!rk_udphy_is_supported_mode(state)) return 0; =20 mutex_lock(&udphy->mutex); --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 27B4542BE83; Tue, 14 Jul 2026 19:26:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057186; cv=none; b=P6WgpVdcw0ETzJkO87v5XILf4AG5kgtlUo4d1OrCdyvWTskRQmGnPSSXN5gk0EWMPAjAx5BD3aGmEUpTmkx8CBRHneVxx1ZM5zDDXa+agSsWWhvTtOQ3dmwp66Pf/Ur194UGVilWTSb03e+bE8PVFVTJxKrbSpsOCNC+hJ+tHv0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057186; c=relaxed/simple; bh=CMG/CUmZrtg18KmezHV3ufGYNTtkcjj1u5f9TkystVM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=i5KV2wk1e4snQR/9wFe5+XYQywdXnwcKla/92dtfIxiVXMN1mOzQBuGod2Rry8IpWDlUlU7iHJES3BF7/6sEc7rWdjPesSZQCMpalrhyz9em92CxVvw51O4ZNMNCcTUNW1SlrJq0RxTUCQ52MBUUwNIspP3rS2GniegeGvuxgSo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=RtZCqXgJ; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="RtZCqXgJ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057170; bh=CMG/CUmZrtg18KmezHV3ufGYNTtkcjj1u5f9TkystVM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=RtZCqXgJnKDxJ6Vwabfklcrr37btwEq/B07buUGuloiPMEyG5e/dH01BROAv9iSX6 EErus5kkUCjZ/AScsmNlZ5UZYq42KIdLDxAketiTQpZ6RmwgRkTK/2uCzRCD5TGrCY XsWMgWvIF0BooCtK0C9GmdRLBrdwzfvdNreIj/kF+0yDx6HSgH0S2mnjlBaeSzjuA9 5mE9ya0XvlFFVnrDGE/nlGpKoCBGLSB5dOl0eImLhrLqNPxzGXzzHKxdj7G6sqd2YI CniqhYP3iZ4WTWCcDqrhihjLjhXq0M3pzQkBed6+sMUD10LMcvIIx+HHk8ckZfLQIT bVlUuRdswWJeA== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id E2F6417E1104; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id EF666480068; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:23 +0200 Subject: [PATCH v13 22/35] phy: rockchip: usbdp: Use guard functions for mutex Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-22-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4395; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=CMG/CUmZrtg18KmezHV3ufGYNTtkcjj1u5f9TkystVM=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVAj9Nbuw6hKg19GOdSEz8cKZOolTbRwL Upd63zx4Pg6PYkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qamQEP/3OKHr9KXYywA+TPXtNUIOhKE3mrhx0tttVhDHsFNHYVG4gblnNN0cU/9rLz+fv0n+/ oz/5n6PgeGyD6F53qeBhEkeyZMUJu6ocMjLl4b6LY82za30gBak6P2ne9SCczEgDp80Z4kfb0qb gMKZgROgoyrW84C7oGVXnygBlT19vuQTkITveNONfhn3/unqIbNzVf6olUSwGN6oMGlTG0nxV1A z8BTjpnbMUDf0QrscHtI4Zjvefb+kXsz2H2YHUKpF35C90knvu2kWNJECau0/hord+lnprBOna4 qKjEQe2Ud/IMclDOgbeMBOzpabV3wN+K3esoGMKl1KbJxujVBuggAsPK/pG4g/Q4ftjzwdIkscb sYxgYSdG4dalB0Z7zfFrsMzSvtiFVNZv6l4mb/3pOV8oEyBMriSI3NK8/HbSSdCWdbfBnKZozg9 CFB0KIydasxGjkrYBwRHIACkCfKQtyM16oSFQICE+RwaKC8CXXvZGRY3nSAMDHBKPQSSVjznL5T QZ1NykTRisfIOTrwATAooMUIU/Yc3O7DKJUbrU488PynoWsJq5wkLT9QrLF9d2Y9M7EGurGgchD FSnjBHgixcPTVxKdYpEhAAICLPUSFL9w8OpFVdald3wEJS7qd52cEc2cJUVgFi8CPQiq1XwUqBn Lu9MHH4I344bCX07yHVQvSQ== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Convert the driver to use guard functions for mutex handling as a small cleanup. There is a small functional change in the DP PHY power up function, which no longer sleeps if the internal powerup code returns an error. This is not a problem as the sleep is only relevant for successful power-up. Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 54 +++++++++++++--------------= ---- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 0399cbf96e19..8c165bcab796 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -650,14 +651,15 @@ static int rk_udphy_orien_sw_set(struct typec_switch_= dev *sw, struct rk_udphy *udphy =3D typec_switch_get_drvdata(sw); bool flipped =3D orien =3D=3D TYPEC_ORIENTATION_REVERSE; =20 - mutex_lock(&udphy->mutex); + guard(mutex)(&udphy->mutex); =20 if (orien =3D=3D TYPEC_ORIENTATION_NONE) { gpiod_set_value_cansleep(udphy->sbu1_dc_gpio, 0); gpiod_set_value_cansleep(udphy->sbu2_dc_gpio, 0); /* unattached */ rk_udphy_usb_bvalid_enable(udphy, false); - goto unlock_ret; + + return 0; } =20 if (udphy->flip !=3D flipped) @@ -667,8 +669,6 @@ static int rk_udphy_orien_sw_set(struct typec_switch_de= v *sw, rk_udphy_set_typec_default_mapping(udphy); rk_udphy_usb_bvalid_enable(udphy, true); =20 -unlock_ret: - mutex_unlock(&udphy->mutex); return 0; } =20 @@ -1020,26 +1020,25 @@ static int rk_udphy_dp_phy_power_on(struct phy *phy) struct rk_udphy *udphy =3D phy_get_drvdata(phy); int ret; =20 - mutex_lock(&udphy->mutex); + scoped_guard(mutex, &udphy->mutex) { + phy_set_bus_width(phy, udphy->dp_lanes); =20 - phy_set_bus_width(phy, udphy->dp_lanes); - - ret =3D rk_udphy_power_on(udphy, UDPHY_MODE_DP); - if (ret) - goto unlock; + ret =3D rk_udphy_power_on(udphy, UDPHY_MODE_DP); + if (ret) + return ret; =20 - rk_udphy_dp_lane_enable(udphy, udphy->dp_lanes); + rk_udphy_dp_lane_enable(udphy, udphy->dp_lanes); =20 - rk_udphy_dp_lane_select(udphy); + rk_udphy_dp_lane_select(udphy); + } =20 -unlock: - mutex_unlock(&udphy->mutex); /* * If data send by aux channel too fast after phy power on, * the aux may be not ready which will cause aux error. Adding * delay to avoid this issue. */ usleep_range(10000, 11000); + return ret; } =20 @@ -1047,10 +1046,10 @@ static int rk_udphy_dp_phy_power_off(struct phy *ph= y) { struct rk_udphy *udphy =3D phy_get_drvdata(phy); =20 - mutex_lock(&udphy->mutex); + guard(mutex)(&udphy->mutex); + rk_udphy_dp_lane_enable(udphy, 0); rk_udphy_power_off(udphy, UDPHY_MODE_DP); - mutex_unlock(&udphy->mutex); =20 return 0; } @@ -1255,35 +1254,30 @@ static const struct phy_ops rk_udphy_dp_phy_ops =3D= { static int rk_udphy_usb3_phy_init(struct phy *phy) { struct rk_udphy *udphy =3D phy_get_drvdata(phy); - int ret =3D 0; =20 - mutex_lock(&udphy->mutex); + guard(mutex)(&udphy->mutex); + /* DP only or high-speed, disable U3 port */ if (!(udphy->mode & UDPHY_MODE_USB) || udphy->hs) { rk_udphy_u3_port_disable(udphy, true); - goto unlock; + return 0; } =20 - ret =3D rk_udphy_power_on(udphy, UDPHY_MODE_USB); - -unlock: - mutex_unlock(&udphy->mutex); - return ret; + return rk_udphy_power_on(udphy, UDPHY_MODE_USB); } =20 static int rk_udphy_usb3_phy_exit(struct phy *phy) { struct rk_udphy *udphy =3D phy_get_drvdata(phy); =20 - mutex_lock(&udphy->mutex); + guard(mutex)(&udphy->mutex); + /* DP only or high-speed */ if (!(udphy->mode & UDPHY_MODE_USB) || udphy->hs) - goto unlock; + return 0; =20 rk_udphy_power_off(udphy, UDPHY_MODE_USB); =20 -unlock: - mutex_unlock(&udphy->mutex); return 0; } =20 @@ -1315,12 +1309,10 @@ static int rk_udphy_typec_mux_set(struct typec_mux_= dev *mux, if (!rk_udphy_is_supported_mode(state)) return 0; =20 - mutex_lock(&udphy->mutex); + guard(mutex)(&udphy->mutex); =20 rk_udphy_set_typec_state(udphy, state->mode); =20 - mutex_unlock(&udphy->mutex); - return 0; } =20 --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E52E32931E5; Tue, 14 Jul 2026 19:35:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057730; cv=none; b=C7FqNa7gY5PvKWN+FH1tuwfhhNeKXcxPiRh1rtOic2UaEH+TJ1lIsHysWcg2ctvQ+GAhktMPlpRn4LQwvXLgpqF+2HXHchI55ER+f358Fd3ddCq0ObkUnq0l1DL3Y2z+/Z7fCWB9VS0x3Sj6KHi2iHWs46OOXhujduZIxfyuC94= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057730; c=relaxed/simple; bh=XnGWSO19nxa7H3lR2hHiYjO4JN4FWtYOwARby5EoDv8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DNldiTKNI4NF/VCEI8hyLdOCgYtczgvoBZC4iHs/AI81V+Y1VjGpvLptlsTc+6XxiCh6vHLNumfE/wdhS5qAxIR7wHJCwrZB1LbnLYGc26N6AJjLU/gxaCvNdKVUjwkR1xNkWwckKyMMlctf9ZqRGE/dMBtCFOYYuSdHHXB+0xw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=SQWUQlKh; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="SQWUQlKh" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057726; bh=XnGWSO19nxa7H3lR2hHiYjO4JN4FWtYOwARby5EoDv8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=SQWUQlKhXJa35D7BkJK6cOKbd2j3QSrADMgmVon67uQXN2GRsYNkSG4vJEc+SvijK dj4rvAfm7vCJPZsewVioNPVQ8LQyxr3Unai9oueirbOw02KTzn5v8CpH7M+zt/rS5Z vC6w04v92jwvCiMjLj69CKNl3Mccux838Q3RQh4sgVMYe6B9SERsA59oVSPZM2ThI1 4IUaA65MNJ8p3B8e3v0iWisKFuuwtn8o9MBT6u01rN+QgepwlDF9k9U5oLis2xJucY EqapUFzOoi3dbE1HLPGbo9BCU4JELnamJi/flrl8rMN8CyBCBcYMWjJNWlcat4DONW 407Y7wIqLlfvg== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id D477417E0E6C; Tue, 14 Jul 2026 21:35:25 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id F0E89480069; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:24 +0200 Subject: [PATCH v13 23/35] phy: rockchip: usbdp: Hold mutex in DP PHY configure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-23-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel , Sashiko X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1341; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=XnGWSO19nxa7H3lR2hHiYjO4JN4FWtYOwARby5EoDv8=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVDAAG31sid71ysbx50MacX7tWE741gJP HB3v8Ea0bZu94kCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qaf7EP/3ioOJPL8WJRM+lHmnUUI3r36rF4wLjVpo9PqvezWDJIaeUdzuQW4u7KU7h3r60TdVd /YBL38ezLOAYUGH7XWUYSxdQw2NpD6PFFI8ZZKGtOfXSOrUmQo1L/zC2iAnZsx+qIB3O9ywc11j LnPRioBC/z8ZuUc2Mu5wluMqSpk4gQoO3BC+GHtuekeAXRJY3+DfFevIG1+38tXtiqGMvvBnjj/ sH9khdxd9fHBCbwtiitP+Y+ZRDfByhi/d4zey7MkO/KKUnllN3ka2jpDFf/3ydeNrDvzrlha7Ke s6aHB7UjJdgSVDCG8jwf3KEQ+sld07H/oQ5xjxXm8Yvq3Jk+wYoH0NMMTc24OHk5U/sRZiS0HA7 6H0csk0rmkSHI1Clq8PvjUw1BJ3oUa/DMgiHrQoIKCOPmniWoRqwL6982lNE5DNrXzGqMWhaspe fhUPg1b+jE3kXK6oNbVLgq4jC92CnQmBt6xPcwfKQWR+33woiOutTreffyuznMOAR/NVU6UFzQS LvJexD9DSMHUmc9sWhEgVpGB+AWi/oO3HcBg5eDu4r4HzzaBXq1bvT47Rvile7h2zCa9q2vxEip WrzCRYi14ruAVpJl0J+EBbrbQc3sQS0F3NzbaqxvHZH2ELXyM0HkVRqB0KkwoSpJejk62g3IHt3 27PGv8hvgnmXu62ZspPw+MA== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A rk_udphy_dp_phy_configure() accesses some variables from the struct rk_udphy, which are updated independently from the USB-C framework. The USB-C mux/orientation switch functions already hold a mutex to ensure mutual exclusive access to the struct rk_udphy states, so simply hold the same one in the DP PHY configuration function. Reproducing problems due to this on real hardware would be really hard, but could be possible when quickly re-connecting the USB-C connector. Fixes: 2f70bbddeb45 ("phy: rockchip: add usbdp combo phy driver") Reported-by: Sashiko Closes: https://lore.kernel.org/linux-phy/20260612164627.23D391F000E9@smtp.= kernel.org/ Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 8c165bcab796..b40b5d9ce587 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -1154,6 +1154,8 @@ static int rk_udphy_dp_phy_configure(struct phy *phy, u32 i, val, lane; int ret; =20 + guard(mutex)(&udphy->mutex); + if (dp->set_rate) { ret =3D rk_udphy_dp_phy_verify_link_rate(udphy, dp); if (ret) --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 481B142BE8C; Tue, 14 Jul 2026 19:26:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057185; cv=none; b=cWkOek7rPZdVhwDLO0MYyg9cpKMsI6Xn2lOPenOm4Qmd8qkwwM7b0x05RmmnyKHkw27VOfBlPRHw+/zMnv3BX4PqzXughDFrC1o7dpENpTan3ZUNpp1XfY0UMhF098ClD0jqAkRJX/oEQSFedT04VGUM2O9dbq9He2UXpOf3gxM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057185; c=relaxed/simple; bh=OV39M7TEPR96L4FOITnMJWAcR7FZNRT5q3Hq1TGPYxA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BiRzot9WvkegdCjeUdSPLd6lpXgWqpOM5rujDc2naH68vhpxWsjcURm3MKSuN5BDCJmxGNqHRPTnFjtSG38CPF2vfAM4AwLZzktzVfLlg5AUJBsR4nkqWQT2QOX19qkv+92dRLBl5I9aAsroSfvXNo2gP58AoAnIcL3X8Vo40B0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=B624c6Sx; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="B624c6Sx" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057170; bh=OV39M7TEPR96L4FOITnMJWAcR7FZNRT5q3Hq1TGPYxA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=B624c6SxV0iAkVKAzIcLfW72BK+saAIVoQxX4oct0/XSS6Yu1RzOFqVhcQwTk+0Ao ZkuXP4eSsSnZ48j9AogvgmwogFv9Z1sDikfCNcjJfY+BhI4P3Rgh/s8ZmRgRImhr6d TnRvbd+kBBlMYdShimW0gbc0HTAGTgXMoNtDh0EKwyVXr/ThGcXNvEjOF6gv0S+FyP 9kG8ZQWyQi+uxOG8DLwtcngZk098Rc0G8pvm1zPullLVO0pfS0PQ8kRTxpKzBoQQ0z HfnpAhz1Rkqk+dUagMNsr34UFgnYhCuODcyj+tXPw7pxLCZmYF/4YJCkke8fhkyqyG nVcfzemlziAbA== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 0242317E1122; Tue, 14 Jul 2026 21:26:10 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id F271448006A; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:25 +0200 Subject: [PATCH v13 24/35] phy: rockchip: usbdp: Add some extra debug messages Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-24-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3232; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=OV39M7TEPR96L4FOITnMJWAcR7FZNRT5q3Hq1TGPYxA=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVA+Qc9yQ33lRM7hFxzQY5JLwi3pxPKWS 9PQmAKtnsH5EIkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qaq2sP/3zzWEHqOnx2mKvavQf4LMsgkLf286uh76jmbzBEc4Hp/pLplrJbQSTcC9rMamHHFXL 8p+ToVbSTzprGOIrd/OmmES0VBqDiYYndGFYtu6tYFoAwj5/sghinDgCgmYkSAi10MQKde9kSm0 qiTG2aH3bn+nV6vLudMwbAzYjfvSDQk1ZlFZflFJszZ5aqGMap9koU5nmt1IjpGQBbPEqbRTLUc 0TKhoYvF2TCcVuktnow/Ck6NJPUqtcExf9VeBrVERlk8KD8W0z9SuMZhMYeb4oCnbtKudCwSbEl Mkh3qLlQc/GBFZe1UfP3ywHWdlNv8GiRZvNru/FaU7yvgFZpXgcj/HpFqFXhTy5dnLlwRm8wJ8s FQuEFtjlb+GqjfsxtEiwFQZ/TIXB82PneTP37Wtx5JvRnmD41/3rFst19507G8dUPx3388RlYeT GJs7LXV3rdNidEWSg2osVNvtFBZmbxoh/x20HhjB4D42Cyu8FpIj/d3M4kPObIoBMGn5UEot+dl ZcKLn12pam+MwxQvAwJABUzm1b9eJv+zq1y6YyEIIl6DxeW5vCjg3xerMDW9MNhqHs04Crr4QLL sWVRNGAwvIjllccvksI3hvRsJPbWskRkFNVT8vtEqJ5FBzbzcDEyOxoQtx/xo5SA6mEgp8zcSJa fvMcmLs0ZDOdIzUiPXqc2TQ== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A It's useful to log PHY reinit to ease debugging issues around USB-C hotplugging. Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index b40b5d9ce587..e67c1df792ed 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -462,6 +463,8 @@ static int rk_udphy_reset_deassert(struct rk_udphy *udp= hy, char *name) return reset_control_deassert(list[idx].rstc); } =20 + dev_err(udphy->dev, "failed to de-assert missing reset line: %s\n", name); + return -EINVAL; } =20 @@ -488,6 +491,8 @@ static void rk_udphy_u3_port_disable(struct rk_udphy *u= dphy, u8 disable) const struct rk_udphy_cfg *cfg =3D udphy->cfgs; const struct rk_udphy_grf_reg *preg; =20 + dev_dbg(udphy->dev, "USB3 port %s\n", str_on_off(!disable)); + preg =3D udphy->id ? &cfg->grfcfg.usb3otg1_cfg : &cfg->grfcfg.usb3otg0_cf= g; rk_udphy_grfreg_write(udphy->usbgrf, preg, disable); } @@ -662,8 +667,10 @@ static int rk_udphy_orien_sw_set(struct typec_switch_d= ev *sw, return 0; } =20 - if (udphy->flip !=3D flipped) + if (udphy->flip !=3D flipped) { + dev_dbg(udphy->dev, "cable orientation changed, PHY re-init required.\n"= ); udphy->phy_needs_reinit =3D true; + } =20 udphy->flip =3D flipped; rk_udphy_set_typec_default_mapping(udphy); @@ -781,6 +788,11 @@ static int rk_udphy_init(struct rk_udphy *udphy) const struct rk_udphy_cfg *cfg =3D udphy->cfgs; int ret; =20 + dev_dbg(udphy->dev, "reinit PHY with USB3=3D%s and DP=3D%s (%u lanes) fli= pped=3D%s\n", + str_on_off(udphy->mode & UDPHY_MODE_USB), + str_on_off(udphy->mode & UDPHY_MODE_DP), + udphy->dp_lanes, str_yes_no(udphy->flip)); + rk_udphy_reset_assert_all(udphy); usleep_range(10000, 11000); =20 @@ -851,6 +863,8 @@ static int rk_udphy_setup(struct rk_udphy *udphy) { int ret; =20 + dev_dbg(udphy->dev, "enable PHY\n"); + ret =3D clk_bulk_prepare_enable(udphy->num_clks, udphy->clks); if (ret) { dev_err(udphy->dev, "failed to enable clk\n"); @@ -869,6 +883,7 @@ static int rk_udphy_setup(struct rk_udphy *udphy) =20 static void rk_udphy_disable(struct rk_udphy *udphy) { + dev_dbg(udphy->dev, "disable PHY\n"); clk_bulk_disable_unprepare(udphy->num_clks, udphy->clks); rk_udphy_reset_assert_all(udphy); } @@ -1308,8 +1323,12 @@ static int rk_udphy_typec_mux_set(struct typec_mux_d= ev *mux, struct rk_udphy *udphy =3D typec_mux_get_drvdata(mux); =20 /* Ignore mux events not involving USB or DP */ - if (!rk_udphy_is_supported_mode(state)) + if (!rk_udphy_is_supported_mode(state)) { + dev_dbg(udphy->dev, "ignore mux event with mode=3D%lu\n", state->mode); return 0; + } + + dev_dbg(udphy->dev, "new mode: %lu\n", state->mode); =20 guard(mutex)(&udphy->mutex); =20 --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0CCF44C640; Tue, 14 Jul 2026 19:35:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057729; cv=none; b=ApYtOs3VrXUDw3256B2mudo6ryAVKjpLzzO+BZAKbhEpcl56ZM0S7q6YjPZnCKanvSw4J6WxGPGbnQiTBgVcL4WLksXIvFI3Vq+cgK2CvtRzaRtXMO44PQDguuzpqTJoZVER+e4asHd6ecwXtk1b5DONr1PYzsd6vwGO9bXN6W0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057729; c=relaxed/simple; bh=Z+3CyQE2pXbXffrbEZ9tv78CQC2NdfKNTl32QKWc8Bw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XQIjvbeV2NL/By9fqtLP3vo5FwrHMhcJqfG7oEJNOBPnbpRAQBy/yJdAuEa7URxOhn4qF9LvW36JLAr+xhegGVo03nJ6bX+vCAnXuRQpPxCrVpPO3ZNh8pss52KWQfyTE0YGr/PFfUY/EamIHIVdNs+Jos1afFwdTrxFGasqe+0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=BrTlTYfU; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="BrTlTYfU" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057725; bh=Z+3CyQE2pXbXffrbEZ9tv78CQC2NdfKNTl32QKWc8Bw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=BrTlTYfUwAcObFpwCirKiK/qxfa+nZNUhdg2gEWDTvRbi7MNp9RkwPeBlBPoeP51a tEZJyc95eUUxZJytKvYI9PXPKxijz1TcMRI3nvmSJ3duN87BEE0wiWrfFnP+1iP5i+ 4+DThy3QOhrPugQLNcKDf8+XFbJudfac9+MDWjBp8Mm6JKTHWE239vEwDtYTmoEEzk jZX5JcKE6KXlHmPIM4wZUjyv8HuDHJ/4LoHWxzCWIaSp7Xc86Zr/0S34065EB7myfW WeF3cbtdcw3vCyKVgevT5USnZ9AS9JlfCRCDvdp+3kzVPx4DhgZjHBivfcSDYbVAkF 5PtgZnG+XPGSA== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id CD3C417E0720; Tue, 14 Jul 2026 21:35:25 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id 0001248006B; Tue, 14 Jul 2026 21:26:08 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:26 +0200 Subject: [PATCH v13 25/35] phy: rockchip: usbdp: Avoid xHCI SErrors Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-25-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1977; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=Z+3CyQE2pXbXffrbEZ9tv78CQC2NdfKNTl32QKWc8Bw=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVAePyey40ZpCgfmTRDWhXn+47iB9lnr2 JFMIvy965h5jokCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qaEGYP/1bJLpoBOTFgN7vUuxl6EdRFDAeS/xgRqb610TShDpsP/AJbDRasLbV4STymvh7nMYT QjrEURrE6YT07NuKlmNFY4a5EpPTxXlgrAQZwBTF8S/0EC6GX3hC1LkRgLK+Ew+f//49V3FhQBq kRi8HvhnCSD9jc9+PVcX6X8sZyzX6t8NIW5akmn1vbE4JvR63DxmvnF29yuxmVDeZw8vlqvorTJ QSedcvK7ufWET9tivr89I8kRpheMpgjJ64x+CF5XMRe2QHiULEALQydmu0TCYrHvWUS2re40XQw EkQRU3cvhdTrUDGROm1owFucvm/6eXKhPrnFlUIBZD5e55JVmqnaPFcqVjh6FKm8Ifnh9P1o3Vt /O/qoRHg5PZ84dFDNBXRgpN4LAJ8pzo8VF4GYMK53PUfcdsNVlBViSx8MFt5B9GACqLkwXS3cUY 5yzNIoo1vYFc8L7GMVL2WEothoRUeaKrQpUv5rhwV1DHwKCyoJQfSIqZMYb8aTwxo6cbJdQrTHM sC8DG6QeOPW52bbWdv0iG6lRjoRia15012VBwYHb6/UEzAEkOod05KxmOat9Z8FLbdM48FhLX9a Bhj0bBB+y13ZPKGUy5gFy3kEYNIt6vlHK7bjBHD2alhZyjNIzlX6kERwr7zhQce56KpJvBOFF9P Y2GolfvDYbM6+wRm/Ue0peQ== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A The USBDP PHY provides the PIPE clock to the USB3 controller, which means the PHY must be fully running when anything tries to access the xHCI registers. When switching between USB3-only, USB3 + DP and DP-only mode, the PHY must be re-initialized resulting in a short period of the PHY being disabled. If the DWC3 driver decides to access the xHCI at this point the system will fail with an SError. This patch avoids the problems by disabling the USB3 port before re-initializing it. This does a couple of things: - forces phystatus to 0 from GRF (not from PHY) - switches PIPE clock source from PHY to UTMI (safe fallback clock) - num_u3_port=3D0 The last part will be ignored, as DWC3 already probed, but the clock re-routing will avoid the SError. There is a small delay afterwards to make sure the mux happened. The datasheet gives no hints how long it takes, so delay time is a guess. Fixes: 2f70bbddeb45 ("phy: rockchip: add usbdp combo phy driver") Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index e67c1df792ed..c7f09040185b 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -1000,12 +1000,15 @@ static int rk_udphy_power_on(struct rk_udphy *udphy= , u8 mode) rk_udphy_u3_port_disable(udphy, false); udphy->phy_needs_reinit =3D false; } else if (udphy->phy_needs_reinit) { - if (udphy->mode =3D=3D UDPHY_MODE_DP) - rk_udphy_u3_port_disable(udphy, true); + rk_udphy_u3_port_disable(udphy, true); + udelay(10); =20 ret =3D rk_udphy_init(udphy); if (ret) return ret; + + if (!udphy->hs && udphy->mode & UDPHY_MODE_USB) + rk_udphy_u3_port_disable(udphy, false); udphy->phy_needs_reinit =3D false; } =20 --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 48E6342BE8D; Tue, 14 Jul 2026 19:26:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057185; cv=none; b=h0R8Wpvc6ZpspbtfLXz5Fhj8r0YflWlA7DuCZ2qIU4Djajgwz6U0el66gvdjASKc5+K0HZuFqVwofC7IHlV6Pimb752Td0INwRMg9Z+KBBTcqrL7XLBLQ3baVnbUGOHAzZ/pLT3j3EApiSD0vTW3JaDcz6ott0V4SxWClQBmO/c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057185; c=relaxed/simple; bh=TK4faDxwkcnBA71dMWWF4PBW4tkcH+k9ZDC6o7zxR7U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pRt/8DNRE3SHm0VdcpUJwjL+kHGK1wq10Mhh/PNptY7MlJslj0Wn449A/O0ppa0mBZawDAJUG56RqZwD0nz5iX8h6RTH6nJV43u2rpQTIgRg3wnNsUvG/o+pBIa8jGYsGvJe7gyWvqCqPYAUXMcA2tzJDz4t6IciT7Moo49Ca74= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=c/EWKfwa; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="c/EWKfwa" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057170; bh=TK4faDxwkcnBA71dMWWF4PBW4tkcH+k9ZDC6o7zxR7U=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=c/EWKfwaVQPeTejuzFZAoC6JJXdBbotavJ2SIwpEoaxPSmnr0FZLzKPl3TBFk1Qys PqqcCNDj9QTcEfiFoGiT1Pr4YQ42vXzi8yf+Cz0ZktVOK5G5n78YZ0FK6sxtEpocrs 4IKDvfRZKCpqdPTnaZNJ/pvbHs1seol+idddlx28MuGGuKTZoj/GqRuL3yt7pK0c3R c1ATp9cOJTZqQEshFjJkrvNzyvTUaDL+P9a1FiscFvjvITVzifGmbt1SlsH5S+e/oS vF+Qmgvie6MwKW61/LyrOFb/l/CYxHy9QzMbJdZgnUOHbDpxV6Bqwsd7fpAhRkXZod QRrT/SCH950gw== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 0DF8117E1164; Tue, 14 Jul 2026 21:26:10 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id 0197648006D; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:27 +0200 Subject: [PATCH v13 26/35] phy: rockchip: usbdp: Handle rk_udphy_reset_deassert errors Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-26-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel , Sashiko X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2365; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=TK4faDxwkcnBA71dMWWF4PBW4tkcH+k9ZDC6o7zxR7U=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVBRgD7S9jDMOAa2xwuOAnODOp8FDT59i J0EaE1aJ7ViMIkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qaNC8P/2dpxchbZrGDF2pbvOpDcw9yglidzt0zaJyB9WkfjCpZwb6bf/Jly+TJL7kh1JnIrEi OnnDoa1OpLWPgqPMvLOi34VbV6Zv82jKPTnCCvkZc+UbN8X6K9OO1v5o61s+F/Hr63i7ipoUQ4e 8kbbGXoFX5daltHQhk0PLsrAmeLxU6DK6KMRt/4lWuZqIpi9eLFVJ4uEKZfpOm97ZCsdKwrfXjU uv6t3hoCN7Y+gGUQY/YNA2yIPvnhsq8SURfFdIe1N5S2UxZJX0EIgeM9zcpjl/mxTFQ04snnnu6 zEK0taXgwuhi0W5DfhoBE0goIT4vIhXuVAYwnhAD9HTNfnpnplpTlUW1NBBgf+XiGlByk43hBfp SDlVaSgjVY67uwNVQV8ZJwUTHakEFYwkwv+b4CrCFfhpb9MKfckfPWMQYsu05tjk/Lm0wuV5sSu ke4qRPLUXhW13RJ4tJoqzALokJq/372f2g5EpMrYmoEZJSy2M6V1hPyjknuc3BtJF3Qnvtz1pBQ cQo4MOgMO0JCzi8jrRs0qvfqsbsF+382oGolMiasSjaKFyCZLQr3bdHwfuyTx/9dpNQktoYWwzs HfkE46HS2FUAyWnSoXU6OorKV1oDq9G7vresLN5yblc2Sg8WX3rj9DkRNpZ7U4WlrQHzl9TkKJU gwUtxvotdHVmDoLRUYKQzNQ== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Handle rk_udphy_reset_deassert returning errors to avoid theoretical (Rockchip reset controller driver does not return errors) SError. Fixes: 2f70bbddeb45 ("phy: rockchip: add usbdp combo phy driver") Reported-by: Sashiko Closes: https://sashiko.dev/#/message/20260626211151.2332F1F000E9%40smtp.ke= rnel.org Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index c7f09040185b..701c92ed6e2d 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -803,8 +803,12 @@ static int rk_udphy_init(struct rk_udphy *udphy) /* Step 1: power on pma and deassert apb rstn */ rk_udphy_grfreg_write(udphy->udphygrf, &cfg->grfcfg.low_pwrn, true); =20 - rk_udphy_reset_deassert(udphy, "pma_apb"); - rk_udphy_reset_deassert(udphy, "pcs_apb"); + ret =3D rk_udphy_reset_deassert(udphy, "pma_apb"); + if (ret) + goto assert_resets; + ret =3D rk_udphy_reset_deassert(udphy, "pcs_apb"); + if (ret) + goto assert_resets; =20 /* Step 2: set init sequence and phy refclk */ ret =3D regmap_multi_reg_write(udphy->pma_regmap, rk_udphy_init_sequence, @@ -830,8 +834,11 @@ static int rk_udphy_init(struct rk_udphy *udphy) FIELD_PREP(CMN_DP_LANE_EN_ALL, 0)); =20 /* Step 4: deassert init rstn and wait for 200ns from datasheet */ - if (udphy->mode & UDPHY_MODE_USB) - rk_udphy_reset_deassert(udphy, "init"); + if (udphy->mode & UDPHY_MODE_USB) { + ret =3D rk_udphy_reset_deassert(udphy, "init"); + if (ret) + goto assert_resets; + } =20 if (udphy->mode & UDPHY_MODE_DP) { regmap_update_bits(udphy->pma_regmap, CMN_DP_RSTN_OFFSET, @@ -843,8 +850,14 @@ static int rk_udphy_init(struct rk_udphy *udphy) =20 /* Step 5: deassert cmn/lane rstn */ if (udphy->mode & UDPHY_MODE_USB) { - rk_udphy_reset_deassert(udphy, "cmn"); - rk_udphy_reset_deassert(udphy, "lane"); + ret =3D rk_udphy_reset_deassert(udphy, "cmn"); + if (ret) + goto assert_resets; + + ret =3D rk_udphy_reset_deassert(udphy, "lane"); + if (ret) + goto assert_resets; + } =20 /* Step 6: wait for lock done of pll */ --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 71A3A42BE91; Tue, 14 Jul 2026 19:26:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057187; cv=none; b=t9+VoYJK9tfNaWiaqmBo7vQpbiGXoe2AdDw34wOd+y77Zf56ygBG+e1e6re/zuI8yiVEssTVem3IS3sNzpcxPJtoKoTCEL26YdZyNJNpFBwfMX1su29rOIHnvqquNz/KLs2JSyn7K6mGLPnfJI2R9B8tHoLrzZ1Gu6lvwRz51Hg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057187; c=relaxed/simple; bh=V63zlxbk2WwIpvUkzfZbShKKI8n4pibTtc1ZREWfyK0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jWxaDZzYMNpQtzIIc0Q8OsqZdb/lXNRwXDu5gYrPM62S107GWu3yAJiDIIwBO3Knd0lKHZXQDiAcvDnJqRicubVbahMSxhTJgI0GnCR6bS6Y4YJZ2OfELudBTMvF1jF8BohnijaUXdfAnxGvlFdc08uoi/knt0CMyWvx3DTvOiI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=AUc3ZeZk; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="AUc3ZeZk" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057170; bh=V63zlxbk2WwIpvUkzfZbShKKI8n4pibTtc1ZREWfyK0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=AUc3ZeZklmz6zTkda4UwrE4VKA8f/XvVPshTkGXqnxaj/Kx6Tvv4wMVCPXD2gx6fb 8JviOTx+R5jLeVqnUXcVbF7aEWXGBn0xkbT4EVnXIblO8KmVTNiyr6QOCC63fKhWb5 xarMp9ia59aGQDcNsIN3TJCsIxSSz4g0IRF9kkDhs7/lK0nLj+ABFxOz9BvB8b5GA2 QU7nOHIfh7DOlUZPUlbvsbQVFtgEyKXYatz/KJMeAA++aoZZ6Bg+mcpJ5isVg19IHj gHxWfGvNjKY6hTEzl5MRdCHij7Q4OzH5Y43ONnystVXdHI8XNu7sNC2fp4SPzaiAum RsBEg5euhNc0A== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 18C4517E120F; Tue, 14 Jul 2026 21:26:10 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id 0332548006E; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:28 +0200 Subject: [PATCH v13 27/35] phy: rockchip: usbdp: Only enable USB3 when not in high-speed mode Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-27-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel , Sashiko X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1088; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=V63zlxbk2WwIpvUkzfZbShKKI8n4pibTtc1ZREWfyK0=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVAJ7QmSEvdWysGnof840cj44T1gR36gk uWBoj12xlU/f4kCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qaElYP/3qvpmGnUJMDBxbC6Z8jMPqFXid2nRYDzLr4mTRZufmSXpwe/QnPg5Ts5ngwnKKhmig 8G3ttivx/KU38sUHK7esljYtt837+z6jINnPGR+XgYCbxREJCdsoBunEayweVhFwZa7AOk+MVqI rHtRgCEYegnbzlWKT28my1NoBCIkcD6Z7XKqNlNKehrwRC9Dkh/nisHYwYY8z34PC+sEp3uHz5s cVsJFXAICY3O7r1HtdkZjHQMO+m7+hsA2W5HNj+9caM3NdfXckuWUKGrvEusILFulVlkI0WT0Rq P27ZcIj65HuxKmStjMXyrNS7zAnYv87rUtMIKw1/pdXh0Y3RE2K5j90+3cryiISnbknHedKhND0 2ZjKAOMmWSNme7EYqhdXNjz4+yKT+4ffGouG3gGsPSbFdMWd31udJ8Beq/jR8xeuqEpll6XDvPe n+C9E73fbKMxW3fr11et1rjbWVJcBiZMkmB6Pc+p0lKJI2Jg3+6vevxmzaZaINlhOUPAoE6jmvG 95raaQ0LE/6QDkKxUzxykkFg2khg27yrDOS66w8xhLex7ty72SXDkskQN6bmt8nNfFyA/HHtIyN i6r3+O0AyVfM5X/Hx8vHz86JnNhvP9xpJdtfyKYAiLIr2XmuKmfVSNySYrRyzg2lJbLCRptN9M4 qzzNhmCfJQJTpweaAgq9B7Q== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Ensure that USB3 mode is not accidently enabled during PHY re-init for systems that are configured as high-speed only via DT. Fixes: 2f70bbddeb45 ("phy: rockchip: add usbdp combo phy driver") Reported-by: Sashiko Closes: https://sashiko.dev/#/message/20260626212424.C215E1F000E9%40smtp.ke= rnel.org Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 701c92ed6e2d..59b836a3796c 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -1009,7 +1009,7 @@ static int rk_udphy_power_on(struct rk_udphy *udphy, = u8 mode) if (ret) return ret; =20 - if (udphy->mode & UDPHY_MODE_USB) + if (!udphy->hs && udphy->mode & UDPHY_MODE_USB) rk_udphy_u3_port_disable(udphy, false); udphy->phy_needs_reinit =3D false; } else if (udphy->phy_needs_reinit) { --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CEB0C2931DA; Tue, 14 Jul 2026 19:35:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057729; cv=none; b=seRxhHPtDvCXxc+yoNnYew6hUTWY8orPauIy0qfcFuR4XzG3qwdbXbaaIalJYxMamXbye6oliNDTJkvcWfTprPmYBW2V9NEjritbkhFkc0Ys5qsz9asgiqMPuichfkgtrAVpqowe50eIf7dHNYuvpx166pL/Ba2e6H6WeTu68+s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057729; c=relaxed/simple; bh=sykfJDcEh0P0sU0/0Mx5RGtaMEmg4itoA8UTsTqvby0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ikHuzOywVrKdQ5MHRyCAbPkAUOm1lP3Vc3VG8vnIpStMmM4C4eJDAWrBROxz6j/eKt0l4nJlHuTuHbXFJvjtRjO/GTXh6Ks2BV/7dbKw13id+X7Mo/nE+EoedJI9t6aJ1NR9N9RTRwcGedjKBT5cfsEKFfMrQGUT6znLGyjd+zc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=jRDJTfhK; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="jRDJTfhK" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057726; bh=sykfJDcEh0P0sU0/0Mx5RGtaMEmg4itoA8UTsTqvby0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jRDJTfhK+6QPYMg1L9pxv4z1daQvN2QQFwMaqsWsKC78WwXHTvEgq1WawZR3zRGoc EiihOgIgo/Jeu5mTN8sHQRHbKJa5ZoVdaCy3r1pG0UCBoxNaaTKke2F9fbcS6p1vHQ w9a7w81h/v8dxRgZacvVkIniPwwV9UNmCSGAHK3u4mtSoKM/OVaMbAdJwMtGjmBL4p mifZGVG2P1ehRW9MwhXIpw5pveH3JKQHwIp6Wjp71fD4yb1w2m8qZcwDTVdKllyrub A9e3q1SRk+kUCM0BTAslz3M2gmT77I3rKLxPk2TuWZq9htBVb0FGuZkEqRODUfiCKT pN310zq1qQEBA== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id D29CE17E0E1C; Tue, 14 Jul 2026 21:35:25 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id 04B8C48006F; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:29 +0200 Subject: [PATCH v13 28/35] phy: core: add notifier infrastructure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-28-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6202; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=sykfJDcEh0P0sU0/0Mx5RGtaMEmg4itoA8UTsTqvby0=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVBkgJl2ck1HXRcrKKhMUm/3mP++3YsYi n8Z6b3pV9PER4kCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qamc0QAIRxSM2B8YiSBj+Ft7JHB/qltvuud6yJbT0Qrqs1JV3Ae/Sr7WpkwgslPgbLx9qnUqS zaRN1Ca+VrlrB8BcxzVU2Aoym4WjSiETgSNfsQyFZzrvSiEIEwnZtIbvJHvqxmy2j/L6PP83bZ1 qHZ+3Ah6QZytFucXknrOQJyGsQYB6JFRWgd+iRDjpBJUl6WvTenydPf/CY0TsulEb185Kf9PgyX RA3PuTyb70iCjCmsD0tTiD8M+gQvafeutCkjYGRniQMAgB+hvB8mgXsgiBDHvYYKvPfBns8BhUQ 0wJLuPHr4GwE99+FYJDjSww5IqypCl2PPb74LfTunaQY1as2GWDaz1lThyRKKE4VyK6O6s9Be/C Wu2r8Pp89fdfiaphtuwfk8sw7zNL2CT1K2m+2eYPJKM8FKOlgBwYXI73yP5K1+TGq4CZvW+iGPl ylcN1ULATNDMOLt369wDJX7Zq0/Z/jvRbQMfze3bvpQaiyWRFwAAVT+WSoU+zyyozrRvjEwFGrw /3wJCoUR7QpWoiTJ8ZrGPGkOzQkGAtFrdcGZE+T2K5ZV0e0QBTfrr2RbgnUOZVtQt4RRP7lvM6W 30tjqD015SFWoC/7vj/LIKin5Smp8W+R6QjSqDrIqXbWebWpCnEy9uuXO4KROMMkRybj7ZV31pU rMH8pOs5Sg9vMUCfVl5EzBA== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Some PHY devices with multiple ports (e.g. USB3 and DP) require a reset if the configuration changes or cable orientation changes. This is a problem, as the consumer device will run into undefined behavior. With the new PHY notifier API introduced in this patch, the consumer driver can hook into reset events coming from a PHY device to handle the PHY going down gracefully. Note that this uses -ENOSYS instead of the more sensible -ENOTSUP for the stub functions when GENERIC_PHY is disabled to stay consistent with the existing ones. Signed-off-by: Sebastian Reichel --- drivers/phy/phy-core.c | 65 +++++++++++++++++++++++++++++++++++++++++++++= ++++ include/linux/phy/phy.h | 40 ++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c index 21aaf2f76e53..51d261daae7a 100644 --- a/drivers/phy/phy-core.c +++ b/drivers/phy/phy-core.c @@ -542,6 +542,70 @@ int phy_notify_state(struct phy *phy, union phy_notify= state) } EXPORT_SYMBOL_GPL(phy_notify_state); =20 +/** + * phy_register_notifier() - register a notifier for PHY events + * @phy: the phy returned by phy_get() + * @nb: notifier block to register + * + * Allows PHY consumers to receive notifications about PHY reset events. + * PHY providers can signal these events using phy_notify_reset(). + * + * Returns: %0 if successful, a negative error code otherwise + */ +int phy_register_notifier(struct phy *phy, struct notifier_block *nb) +{ + if (!phy) + return 0; + + return blocking_notifier_chain_register(&phy->notifier, nb); +} +EXPORT_SYMBOL_GPL(phy_register_notifier); + +/** + * phy_unregister_notifier() - unregister a notifier for PHY events + * @phy: the phy returned by phy_get() + * @nb: notifier block to unregister + * + * Returns: %0 if successful, a negative error code otherwise + */ +int phy_unregister_notifier(struct phy *phy, struct notifier_block *nb) +{ + if (!phy) + return 0; + + return blocking_notifier_chain_unregister(&phy->notifier, nb); +} +EXPORT_SYMBOL_GPL(phy_unregister_notifier); + +/** + * phy_notify_reset() - notify consumers of a PHY reset event + * @phy: the phy that is being reset + * @event: the notification event (PRE_RESET or POST_RESET) + * + * Called by PHY providers to notify consumers that the PHY is about to + * be reset or has completed a reset. This allows consumers to quiesce + * hardware before the PHY becomes unavailable. + * + * This may be called from within PHY provider callbacks (e.g. set_mode, + * power_on) where phy->mutex is held. Consumer notification handlers must + * therefore NOT call back into the PHY framework (e.g. phy_power_off, + * phy_exit) on the same PHY, as this would result in a deadlock. + * + * Returns: %0 if successful or no notifiers registered, a negative error + * code if a notifier returns an error (for PRE_RESET only) + */ +int phy_notify_reset(struct phy *phy, enum phy_notification event) +{ + int ret; + + if (!phy) + return 0; + + ret =3D blocking_notifier_call_chain(&phy->notifier, event, phy); + return notifier_to_errno(ret); +} +EXPORT_SYMBOL_GPL(phy_notify_reset); + /** * phy_configure() - Changes the phy parameters * @phy: the phy returned by phy_get() @@ -1018,6 +1082,7 @@ struct phy *phy_create(struct device *dev, struct dev= ice_node *node, device_initialize(&phy->dev); lockdep_register_key(&phy->lockdep_key); mutex_init_with_key(&phy->mutex, &phy->lockdep_key); + BLOCKING_INIT_NOTIFIER_HEAD(&phy->notifier); =20 phy->dev.class =3D &phy_class; phy->dev.parent =3D dev; diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h index ea47975e288a..3779a4d0a02c 100644 --- a/include/linux/phy/phy.h +++ b/include/linux/phy/phy.h @@ -11,6 +11,7 @@ #define __DRIVERS_PHY_H =20 #include +#include #include #include #include @@ -53,6 +54,16 @@ enum phy_media { PHY_MEDIA_DAC, }; =20 +/** + * enum phy_notification - PHY notification events + * @PHY_NOTIFY_PRE_RESET: PHY is about to be reset, consumers should quies= ce + * @PHY_NOTIFY_POST_RESET: PHY reset is complete, consumers may resume + */ +enum phy_notification { + PHY_NOTIFY_PRE_RESET, + PHY_NOTIFY_POST_RESET, +}; + enum phy_ufs_state { PHY_UFS_HIBERN8_ENTER, PHY_UFS_HIBERN8_EXIT, @@ -170,6 +181,7 @@ struct phy_attrs { * @power_count: used to protect when the PHY is used by multiple consumers * @attrs: used to specify PHY specific attributes * @pwr: power regulator associated with the phy + * @notifier: notifier head for PHY reset events * @debugfs: debugfs directory */ struct phy { @@ -182,6 +194,7 @@ struct phy { int power_count; struct phy_attrs attrs; struct regulator *pwr; + struct blocking_notifier_head notifier; struct dentry *debugfs; }; =20 @@ -267,6 +280,9 @@ int phy_calibrate(struct phy *phy); int phy_notify_connect(struct phy *phy, int port); int phy_notify_disconnect(struct phy *phy, int port); int phy_notify_state(struct phy *phy, union phy_notify state); +int phy_register_notifier(struct phy *phy, struct notifier_block *nb); +int phy_unregister_notifier(struct phy *phy, struct notifier_block *nb); +int phy_notify_reset(struct phy *phy, enum phy_notification event); static inline int phy_get_bus_width(struct phy *phy) { return phy->attrs.bus_width; @@ -428,6 +444,30 @@ static inline int phy_notify_state(struct phy *phy, un= ion phy_notify state) return -ENOSYS; } =20 +static inline int phy_register_notifier(struct phy *phy, + struct notifier_block *nb) +{ + if (!phy) + return 0; + return -ENOSYS; +} + +static inline int phy_unregister_notifier(struct phy *phy, + struct notifier_block *nb) +{ + if (!phy) + return 0; + return -ENOSYS; +} + +static inline int phy_notify_reset(struct phy *phy, + enum phy_notification event) +{ + if (!phy) + return 0; + return -ENOSYS; +} + static inline int phy_configure(struct phy *phy, union phy_configure_opts *opts) { --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EFB9B42BEBC; Tue, 14 Jul 2026 19:26:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057189; cv=none; b=eGLQLyJhQIN4MkyaTNmbqW1+DOV0CmPMDIMDMa8B9wB58Xtq0G4EtB25njyFnEAF+2rd0+te6UZfEAAaWQlNjuMiLMfxvJ2Qlqf5LBQYMLLfiOfbIYDe6wP96R4FqY+M53vmybAQq3GvD0M78rbrqz8cbkSBWNthUgehlto25Rw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057189; c=relaxed/simple; bh=sGR/xKZxEhjIJC4vVaUHGAPO06PcCKvHDSoYH+Om2rc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=teZx0boWAcrtSOJDv0fXkrwiXz5ScYYTrJAEhgFbkApghbvUBTjQQX09GU9kS9JozhirYZ6RVgZHhnA9HCDvJ0hlEb2Uve6rK/cOCKNsFQ3TycZk2/LKqVeFtO9muPfk4y+YWtyY+L8zqKyAZaOFyhG33eukiCGaD7G/W4id36w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=U8nWrS/J; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="U8nWrS/J" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057170; bh=sGR/xKZxEhjIJC4vVaUHGAPO06PcCKvHDSoYH+Om2rc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=U8nWrS/JJPfVpIrrmXeIIvssIx9Ka1ZW8PRr7nUWOQRe8XnF2phAQxItaoBY3MaAy m1GS8WsUEGl3Xp9lbUsxKktyhHUkyuKHu5tN8vSHqG8zJXuvTlvNlfzr6S5SMUh4yv WG1XDP3yQf/ochLkCIhGI8YRHl5K2gBwpOlIoGqJ9KXCl9BFk5rYwu0AORtqmZ2bA7 73SxPGJjSviBU3PhNdt8dc6vDMvwPVOiL44ACW0P38ALb3BxvhqNTQ0iq0yWJQ0qjL +3p+pnBxSznneZt6EAC8uebwDMQewwHUIOMeELCpk92YRvIa+DHgRvaQuNHMF/khFd aLMwZk+nYh7vw== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 2386217E121B; Tue, 14 Jul 2026 21:26:10 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id 06382480071; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:30 +0200 Subject: [PATCH v13 29/35] usb: dwc3: core: support PHY reset notifications Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-29-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6739; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=sGR/xKZxEhjIJC4vVaUHGAPO06PcCKvHDSoYH+Om2rc=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVBzYPowTDn8H5UUQqK8nJqW5cFMh8nbO V3jpExVLAQMiIkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qaIrUP/24ZoPVdXMXcnceNUPR+zis7WWPqhLF6mHjIw4uWfb7wuJ6VMKv2oMPjWebIwn2OpF3 U67/h4kymI423pITNi2PloiFsViR1I/vweiBMRBQ8D2Of54+GQrjCbbm8AliAKuYFfgzQzUKOEs tITZXH2yw3DDSEA/x+lezVY3axdNMMKfChP536wnstHQx2Ve6PZbDxFfaJv81UJriHI6uQWZQlb FDr4ATgF+wCz/+tBN7H4EbDCPatI8EyBhUwOa7/ee4XcFZZDIGA5qPHkXyRznGd+cM9oLWj9IS4 Z6giXcyw2lqFAxGlhYjdaVvKhIQN4p70ncTD2UQEzZVHjxpf2qMcsczuQ/PtAebKoEst0wYgTCu EdKB/1jkDAVsZIU8GC8pfEvMUqAYKZBFwv8ie6vQYEeaPdwRjyDsQ+Z3o7s7jehOHi+zZ5LSwP9 MkHlKH58PF9TcrwbUfnBySUHnc+5jRa8DtSBq6nZenAMnFFU3jGSpVhrWmCuqhjgPhA9dwxs6Zf gqW5rvRLSsd2mfxAIRhswLVcP0+k5VV/5ycpQ1EtZWhk4YhzaEghhlUMO+QHmXixAj6veZjwrst HIpJy6DlR7MrpqZOkc9llYYbMtOG9hfaOhks3uBv8ViYAzpOXPN8NvuMEMlkGhPb/ONbwdfJQIm RVPDrenM6dtCLlUAp+wo4NA== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A On recent Rockchip platforms (at least RK3588 & RK3576), DWC3 IP is used with a USBDP PHY providing USB3 and DP. This PHY needs to be reset when the mode changes, which may happen when plugging in different USB-C devices. If the USBDP PHY resets with the DWC3 IP running, its internal state corrupts resulting in the USBDP PHY not being able to lock some PLL clocks, which effectively renders USB3 unusable. To fix the issue this adds handling for the new PHY framework reset notifications, which will assert PHYSOFTRST before the actual PHY is disabled and will deassert it once the PHY returns. Signed-off-by: Sebastian Reichel --- drivers/usb/dwc3/core.c | 101 ++++++++++++++++++++++++++++++++++++++++++++= ++++ drivers/usb/dwc3/core.h | 18 +++++++++ 2 files changed, 119 insertions(+) diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 517aa7f1486d..10678dd63419 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -30,6 +30,7 @@ #include #include #include +#include =20 #include #include @@ -880,6 +881,103 @@ static int dwc3_phy_init(struct dwc3 *dwc) return ret; } =20 +static int dwc3_usb3_phy_notify(struct notifier_block *nb, + unsigned long action, void *data) +{ + struct dwc3_phy_nb *pnb =3D container_of(nb, struct dwc3_phy_nb, nb); + struct dwc3 *dwc =3D pnb->dwc; + int port =3D pnb->port_index; + unsigned long flags; + u32 reg; + int ret; + + switch (action) { + case PHY_NOTIFY_PRE_RESET: + /* + * If already suspended, the resume path will reinit GUSB3PIPECTL + * via dwc3_core_init(). A forced resume is not possible as that + * would call phy_init() resulting in a deadlock. Due to the + * phy_init() in the resume path there is also no need to block + * async RPM resume on our side, since the PHY synchronizes it + * for us. + * + * pm_runtime_get_if_active() returns 0 when suspended (skip), + * 1 when active (ref held), or -EINVAL when PM is disabled + * (device always active). In the -EINVAL case PM ref counting + * is a no-op, so the unconditional put in POST_RESET is safe. + */ + ret =3D pm_runtime_get_if_active(dwc->dev); + if (!ret) + return NOTIFY_OK; + + /* + * Assert USB3 PHY soft reset within DWC3 before the external + * PHY resets. This disconnects the PIPE interface, preventing + * the DWC3 from interfering with PHY reinitialization and + * avoiding LCPLL lock failures. + */ + spin_lock_irqsave(&dwc->lock, flags); + dwc->phy_reset_active |=3D BIT(port); + reg =3D dwc3_readl(dwc, DWC3_GUSB3PIPECTL(port)); + reg |=3D DWC3_GUSB3PIPECTL_PHYSOFTRST; + dwc3_writel(dwc, DWC3_GUSB3PIPECTL(port), reg); + spin_unlock_irqrestore(&dwc->lock, flags); + break; + + case PHY_NOTIFY_POST_RESET: + spin_lock_irqsave(&dwc->lock, flags); + if (!(dwc->phy_reset_active & BIT(port))) { + spin_unlock_irqrestore(&dwc->lock, flags); + return NOTIFY_OK; + } + + dwc->phy_reset_active &=3D ~BIT(port); + + /* + * Deassert PHY soft reset to reconnect the PIPE interface + * after PHY reinitialization. + */ + reg =3D dwc3_readl(dwc, DWC3_GUSB3PIPECTL(port)); + reg &=3D ~DWC3_GUSB3PIPECTL_PHYSOFTRST; + dwc3_writel(dwc, DWC3_GUSB3PIPECTL(port), reg); + spin_unlock_irqrestore(&dwc->lock, flags); + + pm_runtime_put_autosuspend(dwc->dev); + break; + } + + return NOTIFY_OK; +} + +static void dwc3_phy_register_notifiers(struct dwc3 *dwc) +{ + int i; + + for (i =3D 0; i < dwc->num_usb3_ports; i++) { + dwc->usb3_phy_nb[i].nb.notifier_call =3D dwc3_usb3_phy_notify; + dwc->usb3_phy_nb[i].dwc =3D dwc; + dwc->usb3_phy_nb[i].port_index =3D i; + phy_register_notifier(dwc->usb3_generic_phy[i], + &dwc->usb3_phy_nb[i].nb); + } +} + +static void dwc3_phy_unregister_notifiers(struct dwc3 *dwc) +{ + int i; + + for (i =3D 0; i < dwc->num_usb3_ports; i++) + phy_unregister_notifier(dwc->usb3_generic_phy[i], + &dwc->usb3_phy_nb[i].nb); + + /* Release any PM references from in-flight resets */ + for (i =3D 0; i < dwc->num_usb3_ports; i++) { + if (dwc->phy_reset_active & BIT(i)) + pm_runtime_put_autosuspend(dwc->dev); + } + dwc->phy_reset_active =3D 0; +} + static void dwc3_phy_exit(struct dwc3 *dwc) { int i; @@ -2341,6 +2439,7 @@ int dwc3_core_probe(const struct dwc3_probe_data *dat= a) =20 dwc3_check_params(dwc); dwc3_debugfs_init(dwc); + dwc3_phy_register_notifiers(dwc); =20 if (!data->skip_core_init_mode) { ret =3D dwc3_core_init_mode(dwc); @@ -2355,6 +2454,7 @@ int dwc3_core_probe(const struct dwc3_probe_data *dat= a) return 0; =20 err_exit_debugfs: + dwc3_phy_unregister_notifiers(dwc); dwc3_debugfs_exit(dwc); dwc3_event_buffers_cleanup(dwc); dwc3_phy_power_off(dwc); @@ -2412,6 +2512,7 @@ void dwc3_core_remove(struct dwc3 *dwc) =20 dwc3_core_exit_mode(dwc); dwc3_debugfs_exit(dwc); + dwc3_phy_unregister_notifiers(dwc); =20 dwc3_core_exit(dwc); dwc3_ulpi_exit(dwc); diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index e0dee9d28740..4e1791ecb591 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h @@ -11,6 +11,7 @@ #ifndef __DRIVERS_USB_DWC3_CORE_H #define __DRIVERS_USB_DWC3_CORE_H =20 +#include #include #include #include @@ -1002,6 +1003,20 @@ struct dwc3_glue_ops { void (*pre_run_stop)(struct dwc3 *dwc, bool is_on); }; =20 +struct dwc3; + +/** + * struct dwc3_phy_nb - wrapper for PHY notifier block + * @nb: notifier block + * @dwc: back-pointer to the DWC3 controller + * @port_index: USB3 port index this notifier is registered for + */ +struct dwc3_phy_nb { + struct notifier_block nb; + struct dwc3 *dwc; + u8 port_index; +}; + /** * struct dwc3 - representation of our controller * @drd_work: workqueue used for role swapping @@ -1065,6 +1080,7 @@ struct dwc3_glue_ops { * @usb3_phy: pointer to USB3 PHY * @usb2_generic_phy: pointer to array of USB2 PHYs * @usb3_generic_phy: pointer to array of USB3 PHYs + * @usb3_phy_nb: notifier blocks for USB3 PHY reset events * @num_usb2_ports: number of USB2 ports * @num_usb3_ports: number of USB3 ports * @phys_ready: flag to indicate that PHYs are ready @@ -1229,6 +1245,8 @@ struct dwc3 { =20 struct phy *usb2_generic_phy[DWC3_USB2_MAX_PORTS]; struct phy *usb3_generic_phy[DWC3_USB3_MAX_PORTS]; + struct dwc3_phy_nb usb3_phy_nb[DWC3_USB3_MAX_PORTS]; + u8 phy_reset_active; =20 u8 num_usb2_ports; u8 num_usb3_ports; --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3DC1041E6DD; Tue, 14 Jul 2026 19:26:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057191; cv=none; b=e9yJzbFW5iJ+Z63Y2EZMsKExOoY3vbqwo0XNCML4ObBAUrvEWCh2vwnoTpBHVAoBnrrdPods2Jtu/9hAwcLEzfBiKJzokNboXcTxpteKFQsiGgYmFckJV7xOMXNA3d0xsrx5vkLNkvVrT9fOKG+FnI6ofUhL9oEahiiENhsN+8s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057191; c=relaxed/simple; bh=/pjh5DQtiFs1nMCAmgRMNRjrSsE3EdF+7v+JGgVHc0o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s67G8+uO8DiBZZibi3E9giq/oB/YA65vCXDDBqMBijjEsG5TCoerihPpa+bk3ku2fGmWIiLxuKv6T/LBzNTR+mGi6MEpFD+Bm5RnwA4iihGBdZKmnMkh50GKIUtId7Pj9zXfz6/LKWWGnGH3uzkqpy2Xhhvqii/PDbJTneW2SrA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=Y7NblXpA; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="Y7NblXpA" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057175; bh=/pjh5DQtiFs1nMCAmgRMNRjrSsE3EdF+7v+JGgVHc0o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Y7NblXpAMHY92eDvgIsGMqaNiOpU1CDlials5jPSpXLqJcHNpaP+mOsGgSreiWG9z /4yTzdgIFLDYzrvo10FN+bA2BJRS3MtoZKIs1VYY3t1T20SgoAi5FUUGm3z0UVyoS5 NsSKR/9tvq6cg5cfaj7DydP0ASwNB8oij3oWD6+8m8/i/d/NWQp73rhCODDsxSsynU lpox/Tg5Z1G8V6CbaGNu86eNMbhpPLr64YuOYulHgdUxVI5tGr8nvPn35vCaC8MMzX FCHVGDqChxMaIt81ycErMxeWJcnttmn+7rNr7VkBv2W8KQe896sMPm7DW7/6w+0iVm nCLopOurL8G3A== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 30DCD17E37F3; Tue, 14 Jul 2026 21:26:15 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id 07D13480074; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:31 +0200 Subject: [PATCH v13 30/35] phy: rockchip: usbdp: Add phy reset notification support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-30-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1982; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=/pjh5DQtiFs1nMCAmgRMNRjrSsE3EdF+7v+JGgVHc0o=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVAL9pEiZQ9ihCIjDcH/tBrhnBO0jsMJN /bol5XAcuhERokCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qaHLoP/3hruqK3aOWXTYXZRPGp52K27d4hDqUC6+2WHeDmXXTdTCw9gYW0yV5lwdiYJbhQwdJ 3B0r/Wid3IwMdoqznfHyAsncAg0AQZBK2FASKBOP3IkELhvGGjLe+2d6vsS8KLVhf1obSMTG9dM ag3/YmGBtd6yt9aWcJ5JS6NVWUEQij8FM763t6/lGE+1mZRPSNmqdouvgR2zlWbGulKHA+w9ktq Ibpum05/8c+8uJCYuLOaT7P22xZO3f4EwvypUWojFH6siwW9OH5PGQc4djHViu/Rzd0dE2uJZpm DY2yDvd6go2syMnLuWzIYeU/0WiXPyWnB8cvro2kwlh719ovz/WQhch/fEqD71RKjC8auLJPfO1 XHvarFojaaNn3B/rdcwxHt0hL/t0j/6VT1clVfzyRWalS6IOkVMBlwKYJKnHHOT1inGnkPWt8Ly sv3NQkuu65FaPebMg+9WdovOYdtwrjPnZ3R7WUGOyait+lXYvWR3RfK8GqxtP0fEu4mi2bPOyY7 PZLuv9SSP2JMtQnunxkVcoHf46Lbp/vFx7/eiJh+P55QY1mNIb803fbAiOZw2LuC9c5veiMpIpT Ta9nD4mgQ/jrP01zYK1E1sEFq5xoy+RzOPhrqf83wiCFk76Tr4tXYwSjToDWu5zCM2zKo2qzujE E9mjFXXBTto54DARmbl857Q== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A To resolve issues with running into permanent "cmn ana lcpll lock timeout" errors after a few device replugs, add support for reset notifications, which will be handled by the DWC3 driver to gracefully handle the PHY being disabled. This avoids corrupting the controller's internal state and the PIPE interface between the USB3 controller and the PHY, thus fixing the issue. Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 59b836a3796c..21f282216aef 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -1005,24 +1005,39 @@ static int rk_udphy_power_on(struct rk_udphy *udphy= , u8 mode) } =20 if (udphy->status =3D=3D UDPHY_MODE_NONE) { + phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_PRE_RESET); + + rk_udphy_u3_port_disable(udphy, true); + udelay(10); + ret =3D rk_udphy_setup(udphy); - if (ret) + if (ret) { + phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_POST_RESET); return ret; + } =20 if (!udphy->hs && udphy->mode & UDPHY_MODE_USB) rk_udphy_u3_port_disable(udphy, false); udphy->phy_needs_reinit =3D false; + + phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_POST_RESET); } else if (udphy->phy_needs_reinit) { + phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_PRE_RESET); + rk_udphy_u3_port_disable(udphy, true); udelay(10); =20 ret =3D rk_udphy_init(udphy); - if (ret) + if (ret) { + phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_POST_RESET); return ret; + } =20 if (!udphy->hs && udphy->mode & UDPHY_MODE_USB) rk_udphy_u3_port_disable(udphy, false); udphy->phy_needs_reinit =3D false; + + phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_POST_RESET); } =20 udphy->status |=3D mode; --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 71A8842BE92; Tue, 14 Jul 2026 19:26:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057186; cv=none; b=p5QAjHRRzqy0DOAnISsJkjiKAxHO/3T4wHqDwtd1gnpXx9XpHwIpADfC6bPcAQtmkM/Gsx9F/qiy40HP3WoPwdihxfy4Kv05xE9Ae8eP83kauSFseh0CQBdKa4tUa7/x7xPSnkUu6MTteHILVmtg6KpZ6J86vmeIaICXSRlKpz0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057186; c=relaxed/simple; bh=iV0TFUhsGtT2QxB2V0jcayH1eq33X2v2R8/s+ngigtU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ot6fFAu11Cl7jLYuIazetBk3Kxh5olY5b6pkbDooX8KcPi6k7atybM5wJCNrbdGh1NYyBx0oDVTMdk/JXnaPBzm/oq7IfmJz4pFTREUdQn4jryEHJ9d77bT64ZCjtpGcqkgtK7NoDG94BxFc85enN6ogZKpAhjJu+VdEzTgoqRg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=ldoXBN7g; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="ldoXBN7g" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057170; bh=iV0TFUhsGtT2QxB2V0jcayH1eq33X2v2R8/s+ngigtU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ldoXBN7g8VUh9UpqzFdEhAZ0g+R7v8dmLB6WPf2eabM9JHGHxhwM1t94WHb1AE5SS CA+y1v8fdD7eUCnVaJ3hZXwS5DU/o+/yEve1Cihkt15y7+u2v0LD6xo8ZtLnAqX7SJ 0H60l1Eg8dXNfpEXd1nFTFvW6HOEs8Rgf3BeLZV3r9XSiKNWsIumkxLt3+PceO43QG ay6XFBNOz19wYmjnaAT+fj++/9nyFlqhGmQU+cAgAsiN/Imb4aVH7l9r/Ddp8yLV8E WHhu6YVVOzIPXSwfQthRoaLyof8zdjUO+gPZa3VFlffBg9CD+vpEg7iz3JgSXFitCZ kIduW4nfMG3BQ== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 3023717E127F; Tue, 14 Jul 2026 21:26:10 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id 096F4480075; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:32 +0200 Subject: [PATCH v13 31/35] phy: rockchip: usbdp: Drop -EPROBE_DEFER hack Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-31-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1428; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=iV0TFUhsGtT2QxB2V0jcayH1eq33X2v2R8/s+ngigtU=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVDx4uduaatH1g7+Qw6gWCWQExoRIN3bu DPb/UwcdWTJW4kCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qamgEP/2us98K92E3jhqGo13ZHrkpP4mj/3OIV+MXkJ42gKbUsEt8AOB3wPTMI3k/RTlVYEcg DRHqtQGGmCLNK0gf2ZrobsBdb9AVDs26ZF2uHFzcl4rDtby8pKBlHWZX7px9dGtscAUPKQBdCVn jH0m1Op67kDOhszUHVqFwPnFmZvvQLAQ3zWv3pH/XjvMfGlnqhRMFCor6jpMOZKxvCbqCByKFy1 eZt5gmkm08K6zn3HIWCuld2bR7Q37/q6I7/u/oI2RMSnWWTxByt9uYgAn5KMk9vCqEEaonlIpW4 W29uhsBojJrDe82TXCpX3WKglY7uoftxfL2PZMHpyUnpigTQnQ+PRCnuvneJr8O5LPZSpsxgPfm CSeBNEYHhYF2W5VYUh0VD6hQFovfWhh9LNS7tVpfSKSsHpDuI5lSaQFGCsDtuL+ss/XDvGx4Tn9 CbFj3Fcf9BkhtK8XfatJjQgYeidDJ/E39s1MQpVR6467cSVFa40FV9ZPbEDbcgkNrn4dOfilOYP JC0ihIRmnbGAYbMU89my9EEnEdBUrdCRsexpSAJi2vM5FH5eP+ODsfRIWBgZSVni5uCcxx38YcW MoJmX9Ks6I8RM1edpXJUIUPYIJFxaqQXqdlGgq7Gvq81mfBQItUxRO8zEm/QwbGELjikogQx0S/ uJNKpmkYGdlHs6vQvEDQvRg== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A The hack to return -EPROBE_DEFER when the lcpll lock timeouts is no longer needed. The driver now does a reset during its PHY init, which avoids the problem. Since rk_udphy_status_check() is called after the probe, it should not return -EPROBE_DEFER. Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 21f282216aef..a6fe634574bb 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -750,17 +750,7 @@ static int rk_udphy_status_check(struct rk_udphy *udph= y) (val & CMN_ANA_LCPLL_LOCK_DONE), 200, 100000); if (ret) { dev_err(udphy->dev, "cmn ana lcpll lock timeout\n"); - /* - * If earlier software (U-Boot) enabled USB once already - * the PLL may have problems locking on the first try. - * It will be successful on the second try, so for the - * time being a -EPROBE_DEFER will solve the issue. - * - * This requires further investigation to understand the - * root cause, especially considering that the driver is - * asserting all reset lines at probe time. - */ - return -EPROBE_DEFER; + return ret; } =20 if (!udphy->flip) { --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9841141E6AF; Tue, 14 Jul 2026 19:26:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057188; cv=none; b=DL49edOCreDWDNCGJvYYRn2WvkMvq09J0q8vE3u7xVzIOtGygRlLlGOlH0ZSSqy2LPvL+7ObDFp9kzu5CRVOVzGd4RLc6ev4CKVrTpARKNxNLZwbyFDNQTRlneWFWqmpll56XtONW8CjsTR6nHoPhRACoqrqxzpvsxoRIfeI8h8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057188; c=relaxed/simple; bh=ENWmYdviD1B+zuVOBmIFaPuAB++ZYGS8e5ixwzCmGWM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=usEsSLGAxcBLJ5CcAVBW1sGQbzbL9VggS1m77N1CG59zjqaSzSbXGiG6LcsMuzQMHZ8n3hXV6ENQGoAvZMdqEVpAUypASXyayFT12IhF98w+SrxHtxfdBueiScbhUdYTrjpd+w/rzWavz7tqDTzbx0t/8JASzkcDiSE9tA6Ki88= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=YmLrGeyN; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="YmLrGeyN" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057175; bh=ENWmYdviD1B+zuVOBmIFaPuAB++ZYGS8e5ixwzCmGWM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=YmLrGeyNBZs0dZx71eKBJqMCq6vFQZyItsHCB8bINZxhGcnVrJIpYjTCOYTEprJ3J Ahe4ufbukZtAxW/oss2ceYj1FfII0gDea3ibDf8+KgVZFi1iEnVWky/sOPBnWeYt2s 7kZzch/DbwlSjWDd4eTxf2KkC8EkPpz+8nbdEbnMCjOdQwHf2ra38piqGr69Az7hge BQ8tRqB7KciucwGTwPM76wXQJJVAGwi+MFAqz4AszfBH4aGXMIOKM1ZCeMB+lOmI+a Cr07XmwZfqjL81YQXaTjKwKOcSWRS5EUlTvfXg7b+Z/GfSE3bmKUs9wqxSkJRPhgpw mO3n/Sg9jqOSA== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 39FFD17E3862; Tue, 14 Jul 2026 21:26:15 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id 0AEBA480076; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:33 +0200 Subject: [PATCH v13 32/35] phy: rockchip: usbdp: Rename mode to hw_mode Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-32-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6966; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=ENWmYdviD1B+zuVOBmIFaPuAB++ZYGS8e5ixwzCmGWM=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVCxW5P4KvgsKt2XqOP8gw3g51aQ/o2lr f9pSMpYpvsy+okCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qa5lMP/AjNX1nALBMA1XUNXfVK5UTmTeYFi52avPMLQKKnHKNg41nW0V/Ift7ejpcMSmMjEqK bwH7lxJXnF5I1Kt1hP33gq+rtamt+lLV3uCTWA8PvBjETejWNH9GvB/RCe38TyzvA2PaKM8C+jr v2P6uKLO/zDQNVY/2CoYgJCoaUyaYbMQ5ITXEw6mkkevK9eBh5d1vGNYiNsFjEp5cWcWq4J0PLm USFSVBpcXGJEcgLb38iioWOe86sEStmTc4N4qjCsHZyWNJG7BbFFEzhyT4NKf3LONgMBtIdNS0o 9X38J3Vm4joneOFH3iUiuTyxkDusH+hjqhB4aFHsKZT5oYShQK7OUv08G9UJyo6LmiGlAq/Aw5Y 4z+M+9fBhEL8knboCU3Ry/ziJVcPC5nZKxpuYqmwOyop3uBlKbOWjKi+fZo3xk6KaRR/lUIecgG YoaCEK5awzTCufms2Mvwd3ckZwfU3igSxP3N6O3EbRcggsgVLVRqzWTwdRe8yhiPVX55Br5qUaS +5lKAk2co4Hi17WbPc8U0esnb2lDzBq6GOkS8hNe+JanMBx1Zpqu+CUJjvN6OBrwWSeU9RnzXqp DozJ8ZFjEw2+KfrgPIruA7qvZfKOfG5XtQwLL0Oy4pw9fHWMtVB2I6fwTwtkvfOISWTQ6lDtKZw jU5RbpPyQRlNZAUZF8e4wKg== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Rename mode field to hw_mode to make clear that this is the modes currently supported by the hardware, but not necessarily requested by software. I.e. it is only set by either the USB-C state machine or device-tree if the PHY is used in a fixed routing setup. Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 48 +++++++++++++++------------= ---- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index a6fe634574bb..405b3d943602 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -174,7 +174,7 @@ struct rk_udphy { /* PHY status management */ bool flip; bool phy_needs_reinit; - u8 mode; + u8 hw_mode; /* modes currently supported by hardware */ u8 status; =20 /* utilized for USB */ @@ -579,18 +579,18 @@ static void rk_udphy_dp_lane_enable(struct rk_udphy *= udphy, int dp_lanes) CMN_DP_CMN_RSTN, FIELD_PREP(CMN_DP_CMN_RSTN, 0x0)); } =20 -static void rk_udphy_mode_set(struct rk_udphy *udphy, u8 mode) +static void rk_udphy_mode_set(struct rk_udphy *udphy, u8 hw_mode) { - if (udphy->mode =3D=3D mode) + if (udphy->hw_mode =3D=3D hw_mode) return; =20 udphy->phy_needs_reinit =3D true; - udphy->mode =3D mode; + udphy->hw_mode =3D hw_mode; } =20 static void rk_udphy_set_typec_state(struct rk_udphy *udphy, unsigned long= state) { - u8 mode; + u8 hw_mode; =20 switch (state) { case TYPEC_DP_STATE_C: @@ -599,7 +599,7 @@ static void rk_udphy_set_typec_state(struct rk_udphy *u= dphy, unsigned long state udphy->lane_mux_sel[1] =3D PHY_LANE_MUX_DP; udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_DP; udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_DP; - mode =3D UDPHY_MODE_DP; + hw_mode =3D UDPHY_MODE_DP; udphy->dp_lanes =3D 4; break; =20 @@ -616,12 +616,12 @@ static void rk_udphy_set_typec_state(struct rk_udphy = *udphy, unsigned long state udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_DP; udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_DP; } - mode =3D UDPHY_MODE_DP_USB; + hw_mode =3D UDPHY_MODE_DP_USB; udphy->dp_lanes =3D 2; break; } =20 - rk_udphy_mode_set(udphy, mode); + rk_udphy_mode_set(udphy, hw_mode); } =20 static void rk_udphy_set_typec_default_mapping(struct rk_udphy *udphy) @@ -744,7 +744,7 @@ static int rk_udphy_status_check(struct rk_udphy *udphy) int ret; =20 /* LCPLL check */ - if (udphy->mode & UDPHY_MODE_USB) { + if (udphy->hw_mode & UDPHY_MODE_USB) { ret =3D regmap_read_poll_timeout(udphy->pma_regmap, CMN_ANA_LCPLL_DONE_O= FFSET, val, (val & CMN_ANA_LCPLL_AFC_DONE) && (val & CMN_ANA_LCPLL_LOCK_DONE), 200, 100000); @@ -779,15 +779,15 @@ static int rk_udphy_init(struct rk_udphy *udphy) int ret; =20 dev_dbg(udphy->dev, "reinit PHY with USB3=3D%s and DP=3D%s (%u lanes) fli= pped=3D%s\n", - str_on_off(udphy->mode & UDPHY_MODE_USB), - str_on_off(udphy->mode & UDPHY_MODE_DP), + str_on_off(udphy->hw_mode & UDPHY_MODE_USB), + str_on_off(udphy->hw_mode & UDPHY_MODE_DP), udphy->dp_lanes, str_yes_no(udphy->flip)); =20 rk_udphy_reset_assert_all(udphy); usleep_range(10000, 11000); =20 /* enable rx lfps for usb */ - if (udphy->mode & UDPHY_MODE_USB) + if (udphy->hw_mode & UDPHY_MODE_USB) rk_udphy_grfreg_write(udphy->udphygrf, &cfg->grfcfg.rx_lfps, true); =20 /* Step 1: power on pma and deassert apb rstn */ @@ -824,13 +824,13 @@ static int rk_udphy_init(struct rk_udphy *udphy) FIELD_PREP(CMN_DP_LANE_EN_ALL, 0)); =20 /* Step 4: deassert init rstn and wait for 200ns from datasheet */ - if (udphy->mode & UDPHY_MODE_USB) { + if (udphy->hw_mode & UDPHY_MODE_USB) { ret =3D rk_udphy_reset_deassert(udphy, "init"); if (ret) goto assert_resets; } =20 - if (udphy->mode & UDPHY_MODE_DP) { + if (udphy->hw_mode & UDPHY_MODE_DP) { regmap_update_bits(udphy->pma_regmap, CMN_DP_RSTN_OFFSET, CMN_DP_INIT_RSTN, FIELD_PREP(CMN_DP_INIT_RSTN, 0x1)); @@ -839,7 +839,7 @@ static int rk_udphy_init(struct rk_udphy *udphy) udelay(1); =20 /* Step 5: deassert cmn/lane rstn */ - if (udphy->mode & UDPHY_MODE_USB) { + if (udphy->hw_mode & UDPHY_MODE_USB) { ret =3D rk_udphy_reset_deassert(udphy, "cmn"); if (ret) goto assert_resets; @@ -898,7 +898,7 @@ static int rk_udphy_parse_lane_mux_data(struct rk_udphy= *udphy) num_lanes =3D device_property_count_u32(udphy->dev, "rockchip,dp-lane-mux= "); if (num_lanes < 0) { dev_dbg(udphy->dev, "no dp-lane-mux, following dp alt mode\n"); - udphy->mode =3D UDPHY_MODE_USB; + udphy->hw_mode =3D UDPHY_MODE_USB; return 0; } =20 @@ -927,10 +927,10 @@ static int rk_udphy_parse_lane_mux_data(struct rk_udp= hy *udphy) } } =20 - udphy->mode =3D UDPHY_MODE_DP; + udphy->hw_mode =3D UDPHY_MODE_DP; udphy->dp_lanes =3D num_lanes; if (num_lanes =3D=3D 1 || num_lanes =3D=3D 2) { - udphy->mode |=3D UDPHY_MODE_USB; + udphy->hw_mode |=3D UDPHY_MODE_USB; udphy->flip =3D (udphy->lane_mux_sel[0] =3D=3D PHY_LANE_MUX_DP) || (udphy->lane_mux_sel[1] =3D=3D PHY_LANE_MUX_DP); } @@ -989,7 +989,7 @@ static int rk_udphy_power_on(struct rk_udphy *udphy, u8= mode) { int ret; =20 - if (!(udphy->mode & mode)) { + if (!(udphy->hw_mode & mode)) { dev_info(udphy->dev, "mode 0x%02x is not support\n", mode); return 0; } @@ -1006,7 +1006,7 @@ static int rk_udphy_power_on(struct rk_udphy *udphy, = u8 mode) return ret; } =20 - if (!udphy->hs && udphy->mode & UDPHY_MODE_USB) + if (!udphy->hs && udphy->hw_mode & UDPHY_MODE_USB) rk_udphy_u3_port_disable(udphy, false); udphy->phy_needs_reinit =3D false; =20 @@ -1023,7 +1023,7 @@ static int rk_udphy_power_on(struct rk_udphy *udphy, = u8 mode) return ret; } =20 - if (!udphy->hs && udphy->mode & UDPHY_MODE_USB) + if (!udphy->hs && udphy->hw_mode & UDPHY_MODE_USB) rk_udphy_u3_port_disable(udphy, false); udphy->phy_needs_reinit =3D false; =20 @@ -1037,7 +1037,7 @@ static int rk_udphy_power_on(struct rk_udphy *udphy, = u8 mode) =20 static void rk_udphy_power_off(struct rk_udphy *udphy, u8 mode) { - if (!(udphy->mode & mode)) { + if (!(udphy->hw_mode & mode)) { dev_info(udphy->dev, "mode 0x%02x is not support\n", mode); return; } @@ -1296,7 +1296,7 @@ static int rk_udphy_usb3_phy_init(struct phy *phy) guard(mutex)(&udphy->mutex); =20 /* DP only or high-speed, disable U3 port */ - if (!(udphy->mode & UDPHY_MODE_USB) || udphy->hs) { + if (!(udphy->hw_mode & UDPHY_MODE_USB) || udphy->hs) { rk_udphy_u3_port_disable(udphy, true); return 0; } @@ -1311,7 +1311,7 @@ static int rk_udphy_usb3_phy_exit(struct phy *phy) guard(mutex)(&udphy->mutex); =20 /* DP only or high-speed */ - if (!(udphy->mode & UDPHY_MODE_USB) || udphy->hs) + if (!(udphy->hw_mode & UDPHY_MODE_USB) || udphy->hs) return 0; =20 rk_udphy_power_off(udphy, UDPHY_MODE_USB); --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2333E41DE00; Tue, 14 Jul 2026 19:26:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057188; cv=none; b=joQsqVD9iUjS35VjzUfWUZUOs2xrplGlSe4f/fjJUInOL9g+7fwTq+5NzgHLHwIPygmwqyT/fRBwNqYCTSrlQo0bLVfrK1ZwRrflZw895xxq9SeugVJTrB4Sze/Cv3FPkpmJFGNchnHjLWBeCOhubCkvqfCMQE80uvfGNQ1uNrU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057188; c=relaxed/simple; bh=M54LbsncQT5jYlqMFCLizC23E1+olTQdW5tTRe+DwTk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=phXYAhTvJkKlIUlF368gZ8kLZfZES/DMX7hwm7EU6W2gymEWQhja0jW/Wo+w0EH6qEhEj9KmWf5qBgCfJ15EdEipzSWddE3vDL+uBMbmiZUkEHZeDS84a6gDzQ3OXPzrc8tVqci04a2f3sO1CnBlTKn78FvZYWJ3twqTFdrfJjU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=IDL5jx+w; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="IDL5jx+w" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057170; bh=M54LbsncQT5jYlqMFCLizC23E1+olTQdW5tTRe+DwTk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=IDL5jx+w8q0KB2zaRv9Y2xJv5rJpwVg3AigD0oaEtms3FrM+vb0YjwjR39TtTr9TK zPrL8XH+5HxRBwsyY/MvoOUaowQoqqGpvRWHmTKUMQIVl/I0wChVbVX924kuO/IhX2 LMRbCdG/SG2hcqY+aDCwFEMZisULgQ44VwkT7x7PzrDe5YZZBEsnSs0GIcv3yJFu9V FsQqn6Y6DekD008XWxzHKuByusHjwWOjFeNbSBs/oyrvbBCDgkkrbmtC0l1gQBzN9p pUjwC1BBxoBftw1y2zVH9JbpDKTAbkI04LSLbFZUgkeAx2gUZFTw0A45dTbM7Qlb1w p0G8Ni6Mw3Z0g== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 3C0E517E12A2; Tue, 14 Jul 2026 21:26:10 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id 0C851480077; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:34 +0200 Subject: [PATCH v13 33/35] phy: rockchip: usbdp: Fix power state handling Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-33-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=7999; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=M54LbsncQT5jYlqMFCLizC23E1+olTQdW5tTRe+DwTk=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVDdkcqZDHNqzZAtDOHfcyKpcjZdGBeHT 75PX3F7min8NokCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qa0FgP/A2/39LjE70a9w8oXHzrJHKcSHQfctImdUcsBYvU7ZKi8FDOs9UKIpkgqkCKlhSH4ar oYQ/k3bWUQK6ofQyo1fkyLPMa8lhNxZIQr8LU5JquU7dcBQYEI97hWtzvxPDHgQrdkuuj8PZrfL tIt8XPevT+lDk/jNG9InS8bS5I+9EmX6gy7apaOQj2APD+SFjzOBSGAesMJgkg3hyhpsb7Vfd30 7pPQT0Cg5jBSmBtXhJORZTN7pJVWEZYvneN7oP/ob9+inrY8ZAwJ0Rw84Dugqv764SSB5+0TecL MYOpB86mkytR9PlQRanWrUZb0L1OqDqCqUr7c3eAHGquB80mV7qGAY7qbemQQHlXZ7RriFsTjy9 67w1oQYUAyvTxHUpqoTDTOQ2jHeRDjkBKScTmD7Y7yUgZ9qsV/0GF85lnf5G4XjSICvPSsAZrTJ n58TFHdaykYf6IlYNWcFRt1wUa+f95H4k4hPLUc8mYUTfu6ODzbzt5wWBWEznDrrLLKjnDsUOpa 3eZi7v2LA8cb5j+nQDcfoARCHH96CIFBffFwyv9aW//TajezvDNnLMRFVI+lhXHzc3y3gQTozzR Kbvq2im6Id+b1iecK5c0X4jrcxQbgS7zgDlRjpFTK5VCuTFkSpYshY+N3V3s3EA7l9xOQyizrZu R4taJnK7QeLoxC+2j8aQ1wA== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Restructure power state handling by introducing sw_mode in addition to the hw_mode field, so that the PHY knows about the currently supported modes from the hardware perspective, the current modes requested by software and the actual hardware status. Now anything updating either the hardware or software state can simply update the status field and call rk_udphy_update_power_state(). This makes it a lot more obvious what is going on and also fixes a few potential resource leaks identified by Sashiko as a side-effect. For example if USB3 is requested by software while the USB-C is in DP-only mode, things are decently handled after this. Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 143 +++++++++++++++++++-------= ---- 1 file changed, 90 insertions(+), 53 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 405b3d943602..e597cdfe8d79 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -173,9 +173,10 @@ struct rk_udphy { =20 /* PHY status management */ bool flip; - bool phy_needs_reinit; + bool phy_needs_reinit; /* lane mux changed */ u8 hw_mode; /* modes currently supported by hardware */ - u8 status; + u8 sw_mode; /* modes currently requested */ + u8 status; /* current PHY power state */ =20 /* utilized for USB */ bool hs; /* flag for high-speed */ @@ -985,70 +986,95 @@ static int rk_udphy_parse_dt(struct rk_udphy *udphy) return rk_udphy_reset_init(udphy, dev); } =20 -static int rk_udphy_power_on(struct rk_udphy *udphy, u8 mode) +static int rk_udphy_update_power_state(struct rk_udphy *udphy) { + bool usb3_port_enable; + u8 target_mode; int ret; =20 - if (!(udphy->hw_mode & mode)) { - dev_info(udphy->dev, "mode 0x%02x is not support\n", mode); + /* + * Initialize PHY mode according to the hardware setup (either described + * in DT or negotiated via the Type-C controller) instead of requesting + * only the needed PHY side, because that would break the USB/DP data + * streams when the other PHY is being requested. This is not an issue + * during the Type-C negotiation as that happens during the hotplug phase + * and not during normal operation. Also disable everything if the + * software has not requested anything, as there shouldn't be any active + * data streams in that case. + */ + target_mode =3D udphy->hw_mode; + if (udphy->sw_mode =3D=3D UDPHY_MODE_NONE) + target_mode =3D UDPHY_MODE_NONE; + + usb3_port_enable =3D !udphy->hs && (target_mode & UDPHY_MODE_USB); + + if (!udphy->phy_needs_reinit && udphy->status =3D=3D target_mode) { + if (udphy->sw_mode & UDPHY_MODE_USB) + rk_udphy_u3_port_disable(udphy, !usb3_port_enable); return 0; } =20 - if (udphy->status =3D=3D UDPHY_MODE_NONE) { - phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_PRE_RESET); + /* Avoid to re-init disabled PHY */ + if (udphy->status =3D=3D target_mode && target_mode =3D=3D UDPHY_MODE_NON= E) + return 0; =20 + /* + * Inform DWC3 driver, that we are about to reset the PHY, so that it can + * assert its PIPE reset lines and avoid DWC3 getting into a buggy state. + * This is intentionally done for a PHY disable, since that also changes + * the clocks routed to the PHY. + */ + ret =3D phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_PRE_RESET); + if (ret) + return ret; + + /* + * Disable USB3 port, which among other things re-routes a DWC3 clock to + * avoid SErrors when the DWC3 registers are accessed while the PHY is + * disabled. This is only done, when the DWC3 is running as the accessed + * GRF registers and in PD_USB. + */ + if (udphy->sw_mode & UDPHY_MODE_USB) { rk_udphy_u3_port_disable(udphy, true); udelay(10); + } =20 + if (udphy->status =3D=3D UDPHY_MODE_NONE) { + /* Power up (incl. clocks) */ ret =3D rk_udphy_setup(udphy); if (ret) { phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_POST_RESET); return ret; } - - if (!udphy->hs && udphy->hw_mode & UDPHY_MODE_USB) - rk_udphy_u3_port_disable(udphy, false); - udphy->phy_needs_reinit =3D false; - - phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_POST_RESET); - } else if (udphy->phy_needs_reinit) { - phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_PRE_RESET); - - rk_udphy_u3_port_disable(udphy, true); - udelay(10); - + } else if (target_mode =3D=3D UDPHY_MODE_NONE) { + /* Power down (incl. clocks) */ + rk_udphy_disable(udphy); + } else { + /* Mode change =3D> re-init */ ret =3D rk_udphy_init(udphy); if (ret) { phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_POST_RESET); return ret; } - - if (!udphy->hs && udphy->hw_mode & UDPHY_MODE_USB) - rk_udphy_u3_port_disable(udphy, false); - udphy->phy_needs_reinit =3D false; - - phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_POST_RESET); } =20 - udphy->status |=3D mode; - - return 0; -} + /* Ensure USB3 support is enabled when supported */ + if (udphy->sw_mode & UDPHY_MODE_USB) + rk_udphy_u3_port_disable(udphy, !usb3_port_enable); =20 -static void rk_udphy_power_off(struct rk_udphy *udphy, u8 mode) -{ - if (!(udphy->hw_mode & mode)) { - dev_info(udphy->dev, "mode 0x%02x is not support\n", mode); - return; - } - - if (!udphy->status) - return; + /* + * Inform DWC3, that we are done with the reset, so that it can deassert + * its PIPE reset line. This is sent in pair with a PRE_RESET allowing + * consumer driver to do paired resource requests (e.g. clocks) in their + * notification handlers. As we reroute the clocks, its also fine to + * send this after completely disabling the PHY. + */ + phy_notify_reset(udphy->phy_u3, PHY_NOTIFY_POST_RESET); =20 - udphy->status &=3D ~mode; + udphy->status =3D target_mode; + udphy->phy_needs_reinit =3D false; =20 - if (udphy->status =3D=3D UDPHY_MODE_NONE) - rk_udphy_disable(udphy); + return 0; } =20 static int rk_udphy_dp_phy_power_on(struct phy *phy) @@ -1057,11 +1083,15 @@ static int rk_udphy_dp_phy_power_on(struct phy *phy) int ret; =20 scoped_guard(mutex, &udphy->mutex) { + udphy->sw_mode |=3D UDPHY_MODE_DP; + phy_set_bus_width(phy, udphy->dp_lanes); =20 - ret =3D rk_udphy_power_on(udphy, UDPHY_MODE_DP); - if (ret) + ret =3D rk_udphy_update_power_state(udphy); + if (ret) { + udphy->sw_mode &=3D ~UDPHY_MODE_DP; return ret; + } =20 rk_udphy_dp_lane_enable(udphy, udphy->dp_lanes); =20 @@ -1084,10 +1114,10 @@ static int rk_udphy_dp_phy_power_off(struct phy *ph= y) =20 guard(mutex)(&udphy->mutex); =20 - rk_udphy_dp_lane_enable(udphy, 0); - rk_udphy_power_off(udphy, UDPHY_MODE_DP); + udphy->sw_mode &=3D ~UDPHY_MODE_DP; =20 - return 0; + rk_udphy_dp_lane_enable(udphy, 0); + return rk_udphy_update_power_state(udphy); } =20 /* @@ -1292,16 +1322,24 @@ static const struct phy_ops rk_udphy_dp_phy_ops =3D= { static int rk_udphy_usb3_phy_init(struct phy *phy) { struct rk_udphy *udphy =3D phy_get_drvdata(phy); + int ret; =20 guard(mutex)(&udphy->mutex); =20 - /* DP only or high-speed, disable U3 port */ - if (!(udphy->hw_mode & UDPHY_MODE_USB) || udphy->hs) { + if (udphy->hs) { rk_udphy_u3_port_disable(udphy, true); return 0; } =20 - return rk_udphy_power_on(udphy, UDPHY_MODE_USB); + udphy->sw_mode |=3D UDPHY_MODE_USB; + + ret =3D rk_udphy_update_power_state(udphy); + if (ret) { + udphy->sw_mode &=3D ~UDPHY_MODE_USB; + return ret; + } + + return 0; } =20 static int rk_udphy_usb3_phy_exit(struct phy *phy) @@ -1310,13 +1348,12 @@ static int rk_udphy_usb3_phy_exit(struct phy *phy) =20 guard(mutex)(&udphy->mutex); =20 - /* DP only or high-speed */ - if (!(udphy->hw_mode & UDPHY_MODE_USB) || udphy->hs) + if (udphy->hs) return 0; =20 - rk_udphy_power_off(udphy, UDPHY_MODE_USB); + udphy->sw_mode &=3D ~UDPHY_MODE_USB; =20 - return 0; + return rk_udphy_update_power_state(udphy); } =20 static const struct phy_ops rk_udphy_usb3_phy_ops =3D { --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C106527A91D; Tue, 14 Jul 2026 19:35:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057729; cv=none; b=pGOSA0F0lYe/RM39z+ysdugYOYaBk2pVEuq4VUACtAwxF1W5UoB0P7qla/LdmD9x0+AxO/fTRKqOjg2TE86Tz+MIKPSItnCajhC4F6po3jOD8MD+SgN8fLeH758nMZ9ocezn5qFZjgCb+qUDv2IRaW/fqcrFw8oiI1ohBhSi6us= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057729; c=relaxed/simple; bh=KrO1QK4//StkgMJIK/o6MlDMIM5lHO4umCxT2+qIO8c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fYYEk/kjp7+mKDI9Ijz4CwuDz11Ea6WDVkazPNsql96Fmh8ijE8ff/UpgNiRljcXnhyeP+2rna/qbnsXHVKw2SkCGYbOs47CoQ1Us8cx+wip3H8uNFaemGV11KH37QtIopLsnrK/oCYi6Uh7c6XkRx+0im5W/uUGi0EbK/aT+C8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=AHA94tSi; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="AHA94tSi" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057726; bh=KrO1QK4//StkgMJIK/o6MlDMIM5lHO4umCxT2+qIO8c=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=AHA94tSiPWgwsq2DyPIeSJE0wVgOBVGzHHhcnAfz3n7/JyeZtWqeJPGrfpfU1bKwX EN9g3w9e8hmekSk+QgTF+wbl+mRnbdJ1H075hxrRkwUnbiUTBo73mzw/UKCc9gBbD6 hGJteq8DxKuHY5cEVF+/gFNdd93SYnZVZLQEfNwayFY8w2xTSb2ZwIrlfiJdyQSoqe 6nqtJn5wxrXWbYz25LHRpKZ6xS3pXsrpLFUAdFFmS8GT0r8mrz8YTbge+vJhdKyqeN 2hd7knhBKDIm3HgTy/wYPzso05+vvutJ3yuSXCsLdEX131v6KLgPIH/FP+2trDKgNG ZH26tU1Jc6nNQ== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id D078517E0956; Tue, 14 Jul 2026 21:35:25 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id 0E15F480079; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:35 +0200 Subject: [PATCH v13 34/35] phy: rockchip: usbdp: Re-init PHY on mux change Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-34-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1050; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=KrO1QK4//StkgMJIK/o6MlDMIM5lHO4umCxT2+qIO8c=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVCzntzUEtABrBhDotBxk9zsFW1+aiIw8 iuPzkVZ99/Vt4kCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qaLEgP/0WLQHet8RD1OOsumbMiLtY5l5BRWnUbvRBv0O1I0Fiiz02GGXISEVTWhdl79xWnQbY jWkXFdORJro2nZc1vasEJ+/GyhtD03RE8TywespOQpNTIzgfZKaSfRmv20nN2atD3fdQXtOA3ci g7Ul/5UTxhTY9QLVXQm2r1DDoviKgFNcVfoKaELm+1GPlh4SSlXmYanRp91gYIhb723rkEzccIu uCNSk+3EuMttRtd8ZqNGXOUEnrDie8LBaiW214xJ1sD60rvP+MIJe7jNU5+F04tzF2eEmaw5fuG RR/8NPtYOiSDo29dDzQcZ6sseZIoSZsXnhip9q1xsy3AE4Ybo4vCpPD4UxopZeCC4q4AmWctyP9 BI1ggAOrzIgnM2MULRO9rl9V00p3fz0duJiTBkBiB/AUR2MqyINEcSTl1ljOkZAZQTqYYoZUPLU ZT+qV2REHR2ixJJlUVDMZOqrNFFSIQ0h1ez27UChKavzJEATVU3IJVYXfgHWFkaSO1Geu3TQAkJ u2GJWAD+i4Btn7q8aUtTfRRlmbGAchbbS2zthv+iP46NV04Xnl7juXqghRaLOh6eQsyVThkpbvy 4HTybhqpKYSwACHyfQUYw/aGUGU05Coz8Geqj38tnIIhNHUMiVHVOpsL68COc3dHn03Mg6Tai6V kTAMGFATIpOL2kjCCdKQgNA== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Ensure that the right part of the PHY are powered up when the mode changes. This ensures the PHY is re-initialized in the following two scenarios, which are currently broken: - cable orientation changes without DP being involved - switching from DP-only into a mode with USB support Fixes: 2f70bbddeb45 ("phy: rockchip: add usbdp combo phy driver") Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index e597cdfe8d79..87d6df682176 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -1392,7 +1392,7 @@ static int rk_udphy_typec_mux_set(struct typec_mux_de= v *mux, =20 rk_udphy_set_typec_state(udphy, state->mode); =20 - return 0; + return rk_udphy_update_power_state(udphy); } =20 static void rk_udphy_typec_mux_unregister(void *data) --=20 2.53.0 From nobody Sat Jul 25 18:54:00 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3340C424D65; Tue, 14 Jul 2026 19:26:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057190; cv=none; b=mWLjYjZeT32LcYNY8YM7gE3OzZ9WEU0enM4Z/kcSdI2Ug6Jm3eNZZMz8OzyN6Sz9NQGJPI3c8lnxLc8HJfoUFH3o7+d8DiuBrcEAD3H8nm6E8uedGFxkmJThu4tDEPLrgdPCmhPjZpxvErJ7sTrOxFegLjplRCU9k5miAeRqUHA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784057190; c=relaxed/simple; bh=b6e/NN0NwoVBfTz7YMNqEiTFnSbtgh0wx9Yx0+vhNFM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WtEJjCuwdKc5qgc3uKd33qPWkYMaMY3z/cVspWkm8EATvG8h0CkJ/c+HiCvPaCIVEVOZ+aZkvHcQ2fmTjK7PrRH2dCXg+jehq0222ExvyZ3F5hzYBjmc1Ybe7SjzeMZHqhu7SpzEwauduOQCN9j8SunoPVX9WCPQ2kAQq0lQ0bA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=Y49xeKFo; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="Y49xeKFo" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784057170; bh=b6e/NN0NwoVBfTz7YMNqEiTFnSbtgh0wx9Yx0+vhNFM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Y49xeKFocmKLCRs8N8QXQ/8MKdg+UG99o2cKan3khp6cEozaamBzn25qyCzsVvR3o /4j0Zab8EnZ5R+YsvnmX5dLjFvSvL8TY/rUq3XHhjI5yLVTUn325k7r00GGgSpP2ZF aI/U7zN7O+9mCwZSyQnA/9VKYxP9p9/zEXu2earnuiSjbAGT0hztL7ZQYcBUbk7Yzb xU8SSjdxbz3MoVU3alsHC7/xl7VCK/fRin+bWNWrxDxf4KPZX6v2PbsCSzqAREGvN6 cPs5rEgd+IpCqvs70Z9c6XOgB6kHt8ft9t8IwSlLsKsD4ITC4G2XnaHoROy+2xLMb7 n0GVhrkavMH0Q== Received: from jupiter.universe (unknown [100.64.1.62]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: sre) by bali.collaboradmins.com (Postfix) with ESMTPSA id 43D1017E1317; Tue, 14 Jul 2026 21:26:10 +0200 (CEST) Received: by jupiter.universe (Postfix, from userid 1000) id 0F8E648007A; Tue, 14 Jul 2026 21:26:09 +0200 (CEST) From: Sebastian Reichel Date: Tue, 14 Jul 2026 21:26:36 +0200 Subject: [PATCH v13 35/35] phy: rockchip: usbdp: Add USB-C state without DP enabled Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260714-rockchip-usbdp-cleanup-v13-35-6cb3e769d4c5@collabora.com> References: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> In-Reply-To: <20260714-rockchip-usbdp-cleanup-v13-0-6cb3e769d4c5@collabora.com> To: Vinod Koul , Neil Armstrong , Heiko Stuebner , Frank Wang , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thinh Nguyen , Greg Kroah-Hartman , Philipp Zabel Cc: Andy Yan , Dmitry Baryshkov , Yubing Zhang , Alexey Charkov , linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Sebastian Reichel X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3387; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=b6e/NN0NwoVBfTz7YMNqEiTFnSbtgh0wx9Yx0+vhNFM=; b=owJ4nAFtApL9kA0DAAoB2O7X88g7+poByyZiAGpWjVAU9rrTmWfa2AjuXyyf60CZbS90XKDeu agwV6WAtG1rqYkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJqVo1QAAoJENju1/PI O/qaDYgP/0PYaeImzl3bU+kMa7B+Ygvo9KJcLemJgYOaLJLuT4MF7AeowqVSa0cpkcoPUg67+Rf vbOyWbWsfzHMfsyymK8H6N5SZUsJwYX2/U9RpmzmzkyHSJa3KbSY5YMwVPH4wXmtv+2AAgbabjo EuRyNIiZLJcfcOCaFkZrPCPFwVrgjajYrAA9FH3aK5Il79oSOXFvrkOHg6AMIcd/7/eaoi4iWaY BJ4DCwA2jdMM8cS9kHcFJ8iclJK592/XCvAQB5CWbew4G6NtrfOUWVmhW7Jsa0stVNwAKSOGvfB xORfKO2WQkmgUVpFnlsc6hev1ttd1dfAxR9WzEe7+10j4w9mTFGL9zSW9TflXwJlCKKER/ZFEg6 gqdMjTBANmpVVvk58HpnLGX0MDJ1y3zZhGVD6dPS5S2vgcNacUnTaQ9qUQzGwISSDnAPHeS+OR7 z/BpzHeek1ZuJkuoJuCZKG6utvmH+PhuFiU2uAdYMcumBYB3eIEie9/bUdIJacvkjAnHNPgIdw0 466uc3vZQEVnQYh6351SSpe/Ke1dV2adkBapAhJsbeYZq+aIWHG+4lOc/csWfBvRvYjQMhljcIy DOurlsAjYgIAXPTRPQOKAM7spiU3xtjAjMLv6ukn7lTMBVBEa17fHn7+azjD58qCa70PxvpT35v 6zmpTN76/TEHychEmtVYrww== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A The driver currently only differs between 4 lanes DP mode or combined DP + USB3 mode. This makes sense from a lane routing point of view, as the hardware only has 2 lanes of USB3. But adding a separate state for USB-only helps with power management, since we always power up all PHY parts according to the current hardware setup to avoid data stream interruptions. Even if some lanes are muxed to the DP controller there is no need to keep the DP side enabled if something without DP AltMode is plugged into USB-C. This potentially triggers some more USB reconnections during the PD AltMode negotiation when switching from USB-only to combined USB+DP mode. This should be fine, as the cable is freshly plugged at this point. Signed-off-by: Sebastian Reichel --- drivers/phy/rockchip/phy-rockchip-usbdp.c | 57 ++++++++++++++++++---------= ---- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockch= ip/phy-rockchip-usbdp.c index 87d6df682176..ef6fdf3d02bd 100644 --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c @@ -580,32 +580,14 @@ static void rk_udphy_dp_lane_enable(struct rk_udphy *= udphy, int dp_lanes) CMN_DP_CMN_RSTN, FIELD_PREP(CMN_DP_CMN_RSTN, 0x0)); } =20 -static void rk_udphy_mode_set(struct rk_udphy *udphy, u8 hw_mode) +static void rk_udphy_set_lane_mux(struct rk_udphy *udphy) { - if (udphy->hw_mode =3D=3D hw_mode) - return; - - udphy->phy_needs_reinit =3D true; - udphy->hw_mode =3D hw_mode; -} - -static void rk_udphy_set_typec_state(struct rk_udphy *udphy, unsigned long= state) -{ - u8 hw_mode; - - switch (state) { - case TYPEC_DP_STATE_C: - case TYPEC_DP_STATE_E: + if (udphy->dp_lanes =3D=3D 4) { udphy->lane_mux_sel[0] =3D PHY_LANE_MUX_DP; udphy->lane_mux_sel[1] =3D PHY_LANE_MUX_DP; udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_DP; udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_DP; - hw_mode =3D UDPHY_MODE_DP; - udphy->dp_lanes =3D 4; - break; - - case TYPEC_DP_STATE_D: - default: + } else { if (udphy->flip) { udphy->lane_mux_sel[0] =3D PHY_LANE_MUX_DP; udphy->lane_mux_sel[1] =3D PHY_LANE_MUX_DP; @@ -617,12 +599,39 @@ static void rk_udphy_set_typec_state(struct rk_udphy = *udphy, unsigned long state udphy->lane_mux_sel[2] =3D PHY_LANE_MUX_DP; udphy->lane_mux_sel[3] =3D PHY_LANE_MUX_DP; } - hw_mode =3D UDPHY_MODE_DP_USB; - udphy->dp_lanes =3D 2; + } +} + +static void rk_udphy_mode_set(struct rk_udphy *udphy, u8 hw_mode, u8 dp_la= nes) +{ + if (udphy->hw_mode =3D=3D hw_mode && udphy->dp_lanes =3D=3D dp_lanes) + return; + + udphy->phy_needs_reinit =3D true; + udphy->hw_mode =3D hw_mode; + udphy->dp_lanes =3D dp_lanes; +} + +static void rk_udphy_set_typec_state(struct rk_udphy *udphy, unsigned long= state) +{ + switch (state) { + case TYPEC_DP_STATE_C: + case TYPEC_DP_STATE_E: + rk_udphy_mode_set(udphy, UDPHY_MODE_DP, 4); + break; + + case TYPEC_DP_STATE_D: + rk_udphy_mode_set(udphy, UDPHY_MODE_DP_USB, 2); + break; + + case TYPEC_STATE_SAFE: + case TYPEC_STATE_USB: + default: + rk_udphy_mode_set(udphy, UDPHY_MODE_USB, 0); break; } =20 - rk_udphy_mode_set(udphy, hw_mode); + rk_udphy_set_lane_mux(udphy); } =20 static void rk_udphy_set_typec_default_mapping(struct rk_udphy *udphy) --=20 2.53.0