* [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks
@ 2026-07-18 17:06 Jens Glathe via B4 Relay
2026-07-18 17:06 ` [PATCH 1/5] dt-bindings: usb: parade,ps8830: Add parade,disable-usb4 property Jens Glathe via B4 Relay
` (6 more replies)
0 siblings, 7 replies; 24+ messages in thread
From: Jens Glathe via B4 Relay @ 2026-07-18 17:06 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio
Cc: linux-usb, devicetree, linux-kernel, linux-arm-msm, stable,
Dr. David Alan Gilbert, Jens Glathe
On Qualcomm X1E80100 platforms (e.g. Lenovo ThinkPad T14s Gen 6)
using the Parade PS883x retimer, connecting USB4-capable docks such
as the Lenovo 40B0 via a regular Type-C cable (which forces the dock
into Type-C fallback mode) often results in working USB but no
DisplayPort output.
This series addresses the issue with two main changes:
- Add a new optional DT property "parade,disable-usb4". When present,
the PS883x driver rejects USB4 mode (-EOPNOTSUPP). This forces the
Type-C stack to fall back to USB3 + DP Alt Mode, which works
reliably with the 40B0.
- Refactor DP altmode handling to also support the legacy
TYPEC_DP_STATE_F request (deprecated since DP Alt Mode 1.0b) sent by
the 40B0 and other docks (e.g. SSK SC220).
- Add a short delay after writing configuration registers, which
improves hotplug reliability.
This is a temporary workaround until full USB4 DP tunneling support is
available in the X1E USB4 controller and qmp-combo PHY stack.
Note: The DT patch adds the new property to all currently upstream
boards using the PS883x retimer (15 files). Happy to split it on v2
if requested.
As an additional observation, the same dock with type-c cable works well
on Thinkpad X13s, Thinkbook 16 G7 QOY, Ideapad 5 14Q8X9, but doesn't need
the ps883x changes (naturally).
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
---
Jens Glathe (5):
dt-bindings: usb: parade,ps8830: Add parade,disable-usb4 property
usb: typec: ps883x: Return -EOPNOTSUPP for USB4 when parade,disable-usb4 is set
usb: typec: mux: ps883x: refactor DP altmode handling and support TYPEC_DP_STATE_F
usb: typec: mux: ps883x: add a delay after writing config regs
arm64: dts: qcom: x1: disable ps883x USB4 capability
.../devicetree/bindings/usb/parade,ps8830.yaml | 6 +++
arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts | 4 ++
.../qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts | 2 +
arch/arm64/boot/dts/qcom/purwa-iot-evk.dts | 6 +++
arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi | 4 ++
arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi | 4 ++
arch/arm64/boot/dts/qcom/x1-crd.dtsi | 6 +++
arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi | 4 ++
arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi | 2 +
arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi | 4 ++
arch/arm64/boot/dts/qcom/x1e001de-devkit.dts | 6 +++
.../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi | 4 ++
.../boot/dts/qcom/x1e80100-dell-xps13-9345.dts | 4 ++
.../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 6 +++
.../dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts | 2 +
.../boot/dts/qcom/x1e80100-microsoft-romulus.dtsi | 4 ++
drivers/usb/typec/mux/ps883x.c | 47 +++++++++++++++-------
17 files changed, 100 insertions(+), 15 deletions(-)
---
base-commit: 0718283ab28bc3907e10b61a6b4be6fefa1cbb2f
change-id: 20260718-ps883x-disable-usb4-19b0fc13b5ab
Best regards,
--
Jens Glathe <jens.glathe@oldschoolsolutions.biz>
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH 1/5] dt-bindings: usb: parade,ps8830: Add parade,disable-usb4 property
2026-07-18 17:06 [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks Jens Glathe via B4 Relay
@ 2026-07-18 17:06 ` Jens Glathe via B4 Relay
2026-07-21 10:24 ` Krzysztof Kozlowski
2026-07-18 17:06 ` [PATCH 2/5] usb: typec: ps883x: Return -EOPNOTSUPP for USB4 when parade,disable-usb4 is set Jens Glathe via B4 Relay
` (5 subsequent siblings)
6 siblings, 1 reply; 24+ messages in thread
From: Jens Glathe via B4 Relay @ 2026-07-18 17:06 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio
Cc: linux-usb, devicetree, linux-kernel, linux-arm-msm, stable,
Dr. David Alan Gilbert, Jens Glathe
From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Document a new optional boolean property "parade,disable-usb4".
When present, the retimer rejects USB4 mode by returning -EOPNOTSUPP,
forcing a fallback to USB3 + DP Alternate Mode.
Assisted-by: Grok(xAI):4.3
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
---
Documentation/devicetree/bindings/usb/parade,ps8830.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/usb/parade,ps8830.yaml b/Documentation/devicetree/bindings/usb/parade,ps8830.yaml
index eaeab1c01a594..44242907461eb 100644
--- a/Documentation/devicetree/bindings/usb/parade,ps8830.yaml
+++ b/Documentation/devicetree/bindings/usb/parade,ps8830.yaml
@@ -66,6 +66,12 @@ properties:
Sideband Use (SBU) AUX lines endpoint to the Type-C connector for the purpose of
handling altmode muxing and orientation switching.
+ parade,disable-usb4:
+ type: boolean
+ description:
+ When present, the retimer rejects USB4 mode (returns -EOPNOTSUPP).
+ This forces the Type-C stack to fall back to USB3 + DP Alternate Mode.
+
required:
- compatible
- reg
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 2/5] usb: typec: ps883x: Return -EOPNOTSUPP for USB4 when parade,disable-usb4 is set
2026-07-18 17:06 [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks Jens Glathe via B4 Relay
2026-07-18 17:06 ` [PATCH 1/5] dt-bindings: usb: parade,ps8830: Add parade,disable-usb4 property Jens Glathe via B4 Relay
@ 2026-07-18 17:06 ` Jens Glathe via B4 Relay
2026-07-19 1:14 ` Dr. David Alan Gilbert
2026-07-21 17:57 ` Dmitry Baryshkov
2026-07-18 17:06 ` [PATCH 3/5] usb: typec: mux: ps883x: refactor DP altmode handling and support TYPEC_DP_STATE_F Jens Glathe via B4 Relay
` (4 subsequent siblings)
6 siblings, 2 replies; 24+ messages in thread
From: Jens Glathe via B4 Relay @ 2026-07-18 17:06 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio
Cc: linux-usb, devicetree, linux-kernel, linux-arm-msm, stable,
Dr. David Alan Gilbert, Jens Glathe
From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
On Qualcomm X1E80100 platforms using the Parade PS883x retimer (like
Lenovo ThinkPad T14s Gen6), hotplugging USB4-capable docks such as the
Lenovo 40B0 results in working USB but no DisplayPort output on the
dock's HDMI/DP ports.
When the dock negotiates USB4, the retimer receives TYPEC_MODE_USB4
and forwards it via typec_mux_set(). The qmp_combo PHY then selects
QMPPHY_MODE_USB3_ONLY because no classic DP altmode SVID is present in
the state, leaving the DP transmitter and AUX channel disabled.
Add a DT property "parade,disable-usb4" that, when present, makes the
PS883x driver reject USB4 modes as not supported. DP altmode
configuration is still applied if negotiated, so both USB and
DisplayPort continue to work.
This is a temporary workaround until proper USB4 DP tunneling support
is available in the X1E USB4 controller and qmp_combo PHY stack.
Link: https://patch.msgid.link/20260312101431.2375709-1-krishna.kurapati@oss.qualcomm.com
Assisted-by: Grok(xAI):4.3
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
---
drivers/usb/typec/mux/ps883x.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
index 64e0a61b776a1..3fa26ce01a9c9 100644
--- a/drivers/usb/typec/mux/ps883x.c
+++ b/drivers/usb/typec/mux/ps883x.c
@@ -62,6 +62,7 @@ struct ps883x_retimer {
enum typec_orientation orientation;
bool in_reset;
+ bool disable_usb4;
};
static int ps883x_enable_vregs(struct ps883x_retimer *retimer)
@@ -249,6 +250,13 @@ static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state
cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
break;
case TYPEC_MODE_USB4:
+ if (retimer->disable_usb4) {
+ dev_info(&retimer->client->dev,
+ "USB4 disabled via DT property, rejecting USB4 mode\n");
+ return -EOPNOTSUPP;
+ }
+
+ /* Normal USB4 handling */
eudo_data = state->data;
cfg2 |= CONN_STATUS_2_USB4_CONNECTED;
@@ -378,6 +386,8 @@ static int ps883x_retimer_probe(struct i2c_client *client)
retimer->client = client;
+ retimer->disable_usb4 = device_property_read_bool(dev, "parade,disable-usb4");
+
mutex_init(&retimer->lock);
retimer->regmap = devm_regmap_init_i2c(client, &ps883x_retimer_regmap);
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 3/5] usb: typec: mux: ps883x: refactor DP altmode handling and support TYPEC_DP_STATE_F
2026-07-18 17:06 [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks Jens Glathe via B4 Relay
2026-07-18 17:06 ` [PATCH 1/5] dt-bindings: usb: parade,ps8830: Add parade,disable-usb4 property Jens Glathe via B4 Relay
2026-07-18 17:06 ` [PATCH 2/5] usb: typec: ps883x: Return -EOPNOTSUPP for USB4 when parade,disable-usb4 is set Jens Glathe via B4 Relay
@ 2026-07-18 17:06 ` Jens Glathe via B4 Relay
2026-07-21 10:45 ` Heikki Krogerus
2026-07-21 18:02 ` Dmitry Baryshkov
2026-07-18 17:06 ` [PATCH 4/5] usb: typec: mux: ps883x: add a delay after writing config regs Jens Glathe via B4 Relay
` (3 subsequent siblings)
6 siblings, 2 replies; 24+ messages in thread
From: Jens Glathe via B4 Relay @ 2026-07-18 17:06 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio
Cc: linux-usb, devicetree, linux-kernel, linux-arm-msm, stable,
Dr. David Alan Gilbert, Jens Glathe
From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Several docks, including the Lenovo 40B0 and SSK SC220, still send the
legacy TYPEC_DP_STATE_F mode request (deprecated since DisplayPort Alt
Mode spec version 1.0b). Treat it as USB3 + DP altmode (same as
TYPEC_DP_STATE_D) so that DP altmode works correctly, especially on
the 40B0 in Type-C fallback mode.
Extract the state handling into ps883x_apply_dp_altmode() (modelled
after qmp-combo-phy) for consistency.
Assisted-by: Grok(xAI):4.3
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
---
drivers/usb/typec/mux/ps883x.c | 35 ++++++++++++++++++++---------------
1 file changed, 20 insertions(+), 15 deletions(-)
diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
index 3fa26ce01a9c9..3533d4f363286 100644
--- a/drivers/usb/typec/mux/ps883x.c
+++ b/drivers/usb/typec/mux/ps883x.c
@@ -188,6 +188,25 @@ static int ps883x_configure(struct ps883x_retimer *retimer, int cfg0,
return 0;
}
+static void ps883x_apply_dp_altmode(int *cfg0, int *cfg1, int dp_state)
+{
+ *cfg1 |= CONN_STATUS_1_DP_CONNECTED | CONN_STATUS_1_DP_HPD_LEVEL;
+
+ switch (dp_state) {
+ case TYPEC_DP_STATE_D:
+ case TYPEC_DP_STATE_F:
+ *cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
+ fallthrough;
+ case TYPEC_DP_STATE_C:
+ case TYPEC_DP_STATE_E:
+ *cfg1 |= CONN_STATUS_1_DP_SINK_REQUESTED |
+ CONN_STATUS_1_DP_PIN_ASSIGNMENT_C_D;
+ break;
+ default:
+ break;
+ }
+}
+
static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state *state)
{
struct typec_thunderbolt_data *tb_data;
@@ -203,24 +222,10 @@ static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state
if (state->alt) {
switch (state->alt->svid) {
case USB_TYPEC_DP_SID:
- cfg1 |= CONN_STATUS_1_DP_CONNECTED |
- CONN_STATUS_1_DP_HPD_LEVEL;
-
- switch (state->mode) {
- case TYPEC_DP_STATE_D:
- cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
- fallthrough;
- case TYPEC_DP_STATE_C:
- cfg1 |= CONN_STATUS_1_DP_SINK_REQUESTED |
- CONN_STATUS_1_DP_PIN_ASSIGNMENT_C_D;
- break;
- default: /* MODE_E */
- break;
- }
+ ps883x_apply_dp_altmode(&cfg0, &cfg1, state->mode);
break;
case USB_TYPEC_TBT_SID:
tb_data = state->data;
-
/* Unconditional */
cfg2 |= CONN_STATUS_2_TBT_CONNECTED;
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 4/5] usb: typec: mux: ps883x: add a delay after writing config regs
2026-07-18 17:06 [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks Jens Glathe via B4 Relay
` (2 preceding siblings ...)
2026-07-18 17:06 ` [PATCH 3/5] usb: typec: mux: ps883x: refactor DP altmode handling and support TYPEC_DP_STATE_F Jens Glathe via B4 Relay
@ 2026-07-18 17:06 ` Jens Glathe via B4 Relay
2026-07-21 10:53 ` Heikki Krogerus
2026-07-18 17:06 ` [PATCH 5/5] arm64: dts: qcom: x1: disable ps883x USB4 capability Jens Glathe via B4 Relay
` (2 subsequent siblings)
6 siblings, 1 reply; 24+ messages in thread
From: Jens Glathe via B4 Relay @ 2026-07-18 17:06 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio
Cc: linux-usb, devicetree, linux-kernel, linux-arm-msm, stable,
Dr. David Alan Gilbert, Jens Glathe
From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
The config regs seem to need a few ms to propagate the changes through the
system (like, PLLs). This improves the hotplug dp altmode success rate
on the Lenovo 40B0 dock to 100%.
Tested with T14s G6 and 40B0 dock on the HDMI port with a type-c host cable.
Assisted-by: Gemini:3
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
---
drivers/usb/typec/mux/ps883x.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
index 3533d4f363286..3ca2952e6a0a3 100644
--- a/drivers/usb/typec/mux/ps883x.c
+++ b/drivers/usb/typec/mux/ps883x.c
@@ -185,6 +185,8 @@ static int ps883x_configure(struct ps883x_retimer *retimer, int cfg0,
return ret;
}
+ usleep_range(20000, 30000);
+
return 0;
}
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 5/5] arm64: dts: qcom: x1: disable ps883x USB4 capability
2026-07-18 17:06 [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks Jens Glathe via B4 Relay
` (3 preceding siblings ...)
2026-07-18 17:06 ` [PATCH 4/5] usb: typec: mux: ps883x: add a delay after writing config regs Jens Glathe via B4 Relay
@ 2026-07-18 17:06 ` Jens Glathe via B4 Relay
2026-07-19 1:15 ` Dr. David Alan Gilbert
2026-07-21 0:43 ` [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks Sebastian Reichel
2026-07-21 17:56 ` Dmitry Baryshkov
6 siblings, 1 reply; 24+ messages in thread
From: Jens Glathe via B4 Relay @ 2026-07-18 17:06 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio
Cc: linux-usb, devicetree, linux-kernel, linux-arm-msm, stable,
Dr. David Alan Gilbert, Jens Glathe
From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Add the "parade,disable-usb4" property to the PS883x node so that the
retimer driver treats USB4 as USB3. This allows the combo PHY to remain
in a DP-capable mode, restoring working DisplayPort output over the
dock while keeping USB functional.
This is a temporary platform workaround until proper USB4 DP tunneling
support is available.
Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
---
arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts | 4 ++++
arch/arm64/boot/dts/qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts | 2 ++
arch/arm64/boot/dts/qcom/purwa-iot-evk.dts | 6 ++++++
arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi | 4 ++++
arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi | 4 ++++
arch/arm64/boot/dts/qcom/x1-crd.dtsi | 6 ++++++
arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi | 4 ++++
arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi | 2 ++
arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi | 4 ++++
arch/arm64/boot/dts/qcom/x1e001de-devkit.dts | 6 ++++++
arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi | 4 ++++
arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts | 4 ++++
arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 6 ++++++
arch/arm64/boot/dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts | 2 ++
arch/arm64/boot/dts/qcom/x1e80100-microsoft-romulus.dtsi | 4 ++++
15 files changed, 62 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts b/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
index 9fa86bb6438ec..5ec77c5912f8e 100644
--- a/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
+++ b/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
@@ -762,6 +762,8 @@ typec-mux@8 {
orientation-switch;
retimer-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -877,6 +879,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts b/arch/arm64/boot/dts/qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts
index bfb7cea56df96..328a360843f4c 100644
--- a/arch/arm64/boot/dts/qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts
+++ b/arch/arm64/boot/dts/qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts
@@ -601,6 +601,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/purwa-iot-evk.dts b/arch/arm64/boot/dts/qcom/purwa-iot-evk.dts
index ad503beec1d3d..9ce080b9ae896 100644
--- a/arch/arm64/boot/dts/qcom/purwa-iot-evk.dts
+++ b/arch/arm64/boot/dts/qcom/purwa-iot-evk.dts
@@ -703,6 +703,8 @@ typec-mux@8 {
orientation-switch;
retimer-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -760,6 +762,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -865,6 +869,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi b/arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi
index 48c4ad648354e..d67ded1da5875 100644
--- a/arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi
@@ -678,6 +678,8 @@ typec-mux@8 {
orientation-switch;
retimer-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -798,6 +800,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi b/arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi
index 66d566808f583..e1033d3bef359 100644
--- a/arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi
@@ -845,6 +845,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -945,6 +947,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/x1-crd.dtsi b/arch/arm64/boot/dts/qcom/x1-crd.dtsi
index 9602d65c8b3db..002a974c88751 100644
--- a/arch/arm64/boot/dts/qcom/x1-crd.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1-crd.dtsi
@@ -967,6 +967,8 @@ typec-mux@8 {
orientation-switch;
retimer-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -1024,6 +1026,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -1112,6 +1116,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi b/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
index d6de4da02dcd3..fa17cdafc07b4 100644
--- a/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
@@ -852,6 +852,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -947,6 +949,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi b/arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi
index 02708f23a8657..4dd62092b8809 100644
--- a/arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi
@@ -917,6 +917,8 @@ typec-mux@8 {
orientation-switch;
retimer-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi b/arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi
index 7559557610ed4..1aa075d6eeda5 100644
--- a/arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi
@@ -759,6 +759,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -822,6 +824,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/x1e001de-devkit.dts b/arch/arm64/boot/dts/qcom/x1e001de-devkit.dts
index 2e38402e2c140..ada5da526634a 100644
--- a/arch/arm64/boot/dts/qcom/x1e001de-devkit.dts
+++ b/arch/arm64/boot/dts/qcom/x1e001de-devkit.dts
@@ -795,6 +795,8 @@ typec-mux@8 {
orientation-switch;
retimer-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -852,6 +854,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -943,6 +947,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
index 5d49df41be02a..c8bfb38c64ad5 100644
--- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
@@ -895,6 +895,8 @@ typec-mux@8 {
orientation-switch;
retimer-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -1018,6 +1020,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts b/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts
index ce7b10ea89b6d..11412099eaec1 100644
--- a/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts
+++ b/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts
@@ -726,6 +726,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -789,6 +791,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
index beb1475d7fa0c..d16d3627796b8 100644
--- a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
+++ b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
@@ -863,6 +863,8 @@ typec-mux@8 {
orientation-switch;
retimer-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -920,6 +922,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -977,6 +981,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts b/arch/arm64/boot/dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts
index f95b1f9f439d3..55f9df8e5f403 100644
--- a/arch/arm64/boot/dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts
+++ b/arch/arm64/boot/dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts
@@ -857,6 +857,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm64/boot/dts/qcom/x1e80100-microsoft-romulus.dtsi b/arch/arm64/boot/dts/qcom/x1e80100-microsoft-romulus.dtsi
index 28342cb84ded7..4ccfbe7e14eb8 100644
--- a/arch/arm64/boot/dts/qcom/x1e80100-microsoft-romulus.dtsi
+++ b/arch/arm64/boot/dts/qcom/x1e80100-microsoft-romulus.dtsi
@@ -902,6 +902,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -984,6 +986,8 @@ typec-mux@8 {
retimer-switch;
orientation-switch;
+ parade,disable-usb4;
+
ports {
#address-cells = <1>;
#size-cells = <0>;
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH 2/5] usb: typec: ps883x: Return -EOPNOTSUPP for USB4 when parade,disable-usb4 is set
2026-07-18 17:06 ` [PATCH 2/5] usb: typec: ps883x: Return -EOPNOTSUPP for USB4 when parade,disable-usb4 is set Jens Glathe via B4 Relay
@ 2026-07-19 1:14 ` Dr. David Alan Gilbert
2026-07-21 17:57 ` Dmitry Baryshkov
1 sibling, 0 replies; 24+ messages in thread
From: Dr. David Alan Gilbert @ 2026-07-19 1:14 UTC (permalink / raw)
To: jens.glathe
Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio, linux-usb, devicetree, linux-kernel, linux-arm-msm,
stable
* Jens Glathe via B4 Relay (devnull+jens.glathe.oldschoolsolutions.biz@kernel.org) wrote:
> From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
>
> On Qualcomm X1E80100 platforms using the Parade PS883x retimer (like
> Lenovo ThinkPad T14s Gen6), hotplugging USB4-capable docks such as the
> Lenovo 40B0 results in working USB but no DisplayPort output on the
> dock's HDMI/DP ports.
>
> When the dock negotiates USB4, the retimer receives TYPEC_MODE_USB4
> and forwards it via typec_mux_set(). The qmp_combo PHY then selects
> QMPPHY_MODE_USB3_ONLY because no classic DP altmode SVID is present in
> the state, leaving the DP transmitter and AUX channel disabled.
>
> Add a DT property "parade,disable-usb4" that, when present, makes the
> PS883x driver reject USB4 modes as not supported. DP altmode
> configuration is still applied if negotiated, so both USB and
> DisplayPort continue to work.
>
> This is a temporary workaround until proper USB4 DP tunneling support
> is available in the X1E USB4 controller and qmp_combo PHY stack.
>
> Link: https://patch.msgid.link/20260312101431.2375709-1-krishna.kurapati@oss.qualcomm.com
> Assisted-by: Grok(xAI):4.3
> Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Tested-by: Dr. David Alan Gilbert <dave@treblig.org>
On zenbook a14 with the following patches and a TB cable
> ---
> drivers/usb/typec/mux/ps883x.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
> index 64e0a61b776a1..3fa26ce01a9c9 100644
> --- a/drivers/usb/typec/mux/ps883x.c
> +++ b/drivers/usb/typec/mux/ps883x.c
> @@ -62,6 +62,7 @@ struct ps883x_retimer {
>
> enum typec_orientation orientation;
> bool in_reset;
> + bool disable_usb4;
> };
>
> static int ps883x_enable_vregs(struct ps883x_retimer *retimer)
> @@ -249,6 +250,13 @@ static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state
> cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
> break;
> case TYPEC_MODE_USB4:
> + if (retimer->disable_usb4) {
> + dev_info(&retimer->client->dev,
> + "USB4 disabled via DT property, rejecting USB4 mode\n");
> + return -EOPNOTSUPP;
> + }
> +
> + /* Normal USB4 handling */
> eudo_data = state->data;
>
> cfg2 |= CONN_STATUS_2_USB4_CONNECTED;
> @@ -378,6 +386,8 @@ static int ps883x_retimer_probe(struct i2c_client *client)
>
> retimer->client = client;
>
> + retimer->disable_usb4 = device_property_read_bool(dev, "parade,disable-usb4");
> +
> mutex_init(&retimer->lock);
>
> retimer->regmap = devm_regmap_init_i2c(client, &ps883x_retimer_regmap);
>
> --
> 2.53.0
>
>
--
-----Open up your eyes, open up your mind, open up your code -------
/ Dr. David Alan Gilbert | Running GNU/Linux | Happy \
\ dave @ treblig.org | | In Hex /
\ _________________________|_____ http://www.treblig.org |_______/
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 5/5] arm64: dts: qcom: x1: disable ps883x USB4 capability
2026-07-18 17:06 ` [PATCH 5/5] arm64: dts: qcom: x1: disable ps883x USB4 capability Jens Glathe via B4 Relay
@ 2026-07-19 1:15 ` Dr. David Alan Gilbert
0 siblings, 0 replies; 24+ messages in thread
From: Dr. David Alan Gilbert @ 2026-07-19 1:15 UTC (permalink / raw)
To: jens.glathe
Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio, linux-usb, devicetree, linux-kernel, linux-arm-msm,
stable
* Jens Glathe via B4 Relay (devnull+jens.glathe.oldschoolsolutions.biz@kernel.org) wrote:
> From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
>
> Add the "parade,disable-usb4" property to the PS883x node so that the
> retimer driver treats USB4 as USB3. This allows the combo PHY to remain
> in a DP-capable mode, restoring working DisplayPort output over the
> dock while keeping USB functional.
>
> This is a temporary platform workaround until proper USB4 DP tunneling
> support is available.
>
> Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Tested-by: Dr. David Alan Gilbert <dave@treblig.org>
on zenbook a14 with tb cable
> ---
> arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts | 4 ++++
> arch/arm64/boot/dts/qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts | 2 ++
> arch/arm64/boot/dts/qcom/purwa-iot-evk.dts | 6 ++++++
> arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi | 4 ++++
> arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi | 4 ++++
> arch/arm64/boot/dts/qcom/x1-crd.dtsi | 6 ++++++
> arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi | 4 ++++
> arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi | 2 ++
> arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi | 4 ++++
> arch/arm64/boot/dts/qcom/x1e001de-devkit.dts | 6 ++++++
> arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi | 4 ++++
> arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts | 4 ++++
> arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 6 ++++++
> arch/arm64/boot/dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts | 2 ++
> arch/arm64/boot/dts/qcom/x1e80100-microsoft-romulus.dtsi | 4 ++++
> 15 files changed, 62 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts b/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
> index 9fa86bb6438ec..5ec77c5912f8e 100644
> --- a/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
> +++ b/arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts
> @@ -762,6 +762,8 @@ typec-mux@8 {
> orientation-switch;
> retimer-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -877,6 +879,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts b/arch/arm64/boot/dts/qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts
> index bfb7cea56df96..328a360843f4c 100644
> --- a/arch/arm64/boot/dts/qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts
> +++ b/arch/arm64/boot/dts/qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts
> @@ -601,6 +601,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/purwa-iot-evk.dts b/arch/arm64/boot/dts/qcom/purwa-iot-evk.dts
> index ad503beec1d3d..9ce080b9ae896 100644
> --- a/arch/arm64/boot/dts/qcom/purwa-iot-evk.dts
> +++ b/arch/arm64/boot/dts/qcom/purwa-iot-evk.dts
> @@ -703,6 +703,8 @@ typec-mux@8 {
> orientation-switch;
> retimer-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -760,6 +762,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -865,6 +869,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi b/arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi
> index 48c4ad648354e..d67ded1da5875 100644
> --- a/arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi
> @@ -678,6 +678,8 @@ typec-mux@8 {
> orientation-switch;
> retimer-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -798,6 +800,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi b/arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi
> index 66d566808f583..e1033d3bef359 100644
> --- a/arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi
> @@ -845,6 +845,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -945,6 +947,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/x1-crd.dtsi b/arch/arm64/boot/dts/qcom/x1-crd.dtsi
> index 9602d65c8b3db..002a974c88751 100644
> --- a/arch/arm64/boot/dts/qcom/x1-crd.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1-crd.dtsi
> @@ -967,6 +967,8 @@ typec-mux@8 {
> orientation-switch;
> retimer-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -1024,6 +1026,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -1112,6 +1116,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi b/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
> index d6de4da02dcd3..fa17cdafc07b4 100644
> --- a/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi
> @@ -852,6 +852,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -947,6 +949,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi b/arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi
> index 02708f23a8657..4dd62092b8809 100644
> --- a/arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi
> @@ -917,6 +917,8 @@ typec-mux@8 {
> orientation-switch;
> retimer-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi b/arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi
> index 7559557610ed4..1aa075d6eeda5 100644
> --- a/arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi
> @@ -759,6 +759,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -822,6 +824,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/x1e001de-devkit.dts b/arch/arm64/boot/dts/qcom/x1e001de-devkit.dts
> index 2e38402e2c140..ada5da526634a 100644
> --- a/arch/arm64/boot/dts/qcom/x1e001de-devkit.dts
> +++ b/arch/arm64/boot/dts/qcom/x1e001de-devkit.dts
> @@ -795,6 +795,8 @@ typec-mux@8 {
> orientation-switch;
> retimer-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -852,6 +854,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -943,6 +947,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
> index 5d49df41be02a..c8bfb38c64ad5 100644
> --- a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi
> @@ -895,6 +895,8 @@ typec-mux@8 {
> orientation-switch;
> retimer-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -1018,6 +1020,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts b/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts
> index ce7b10ea89b6d..11412099eaec1 100644
> --- a/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts
> +++ b/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts
> @@ -726,6 +726,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -789,6 +791,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> index beb1475d7fa0c..d16d3627796b8 100644
> --- a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> +++ b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
> @@ -863,6 +863,8 @@ typec-mux@8 {
> orientation-switch;
> retimer-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -920,6 +922,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -977,6 +981,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts b/arch/arm64/boot/dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts
> index f95b1f9f439d3..55f9df8e5f403 100644
> --- a/arch/arm64/boot/dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts
> +++ b/arch/arm64/boot/dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts
> @@ -857,6 +857,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-microsoft-romulus.dtsi b/arch/arm64/boot/dts/qcom/x1e80100-microsoft-romulus.dtsi
> index 28342cb84ded7..4ccfbe7e14eb8 100644
> --- a/arch/arm64/boot/dts/qcom/x1e80100-microsoft-romulus.dtsi
> +++ b/arch/arm64/boot/dts/qcom/x1e80100-microsoft-romulus.dtsi
> @@ -902,6 +902,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
> @@ -984,6 +986,8 @@ typec-mux@8 {
> retimer-switch;
> orientation-switch;
>
> + parade,disable-usb4;
> +
> ports {
> #address-cells = <1>;
> #size-cells = <0>;
>
> --
> 2.53.0
>
>
--
-----Open up your eyes, open up your mind, open up your code -------
/ Dr. David Alan Gilbert | Running GNU/Linux | Happy \
\ dave @ treblig.org | | In Hex /
\ _________________________|_____ http://www.treblig.org |_______/
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks
2026-07-18 17:06 [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks Jens Glathe via B4 Relay
` (4 preceding siblings ...)
2026-07-18 17:06 ` [PATCH 5/5] arm64: dts: qcom: x1: disable ps883x USB4 capability Jens Glathe via B4 Relay
@ 2026-07-21 0:43 ` Sebastian Reichel
2026-07-21 16:24 ` Dr. David Alan Gilbert
2026-07-21 17:56 ` Dmitry Baryshkov
6 siblings, 1 reply; 24+ messages in thread
From: Sebastian Reichel @ 2026-07-21 0:43 UTC (permalink / raw)
To: jens.glathe
Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio, linux-usb, devicetree, linux-kernel, linux-arm-msm,
stable, Dr. David Alan Gilbert
[-- Attachment #1: Type: text/plain, Size: 3768 bytes --]
Hello,
On Sat, Jul 18, 2026 at 07:06:28PM +0200, Jens Glathe via B4 Relay wrote:
> On Qualcomm X1E80100 platforms (e.g. Lenovo ThinkPad T14s Gen 6)
> using the Parade PS883x retimer, connecting USB4-capable docks such
> as the Lenovo 40B0 via a regular Type-C cable (which forces the dock
> into Type-C fallback mode) often results in working USB but no
> DisplayPort output.
>
> This series addresses the issue with two main changes:
>
> - Add a new optional DT property "parade,disable-usb4". When present,
> the PS883x driver rejects USB4 mode (-EOPNOTSUPP). This forces the
> Type-C stack to fall back to USB3 + DP Alt Mode, which works
> reliably with the 40B0.
>
> - Refactor DP altmode handling to also support the legacy
> TYPEC_DP_STATE_F request (deprecated since DP Alt Mode 1.0b) sent by
> the 40B0 and other docks (e.g. SSK SC220).
>
> - Add a short delay after writing configuration registers, which
> improves hotplug reliability.
>
> This is a temporary workaround until full USB4 DP tunneling support is
> available in the X1E USB4 controller and qmp-combo PHY stack.
>
> Note: The DT patch adds the new property to all currently upstream
> boards using the PS883x retimer (15 files). Happy to split it on v2
> if requested.
I don't think a kernel driver limitation is a good reason for the DT
property. I suggest to add something like this in the ps883x driver
instead:
/*
* Hamoa does not yet support USB4, disable it for now to gracefully
* fall back to USB3 + DP AltMode. This should be removed once USB4
* support landed for X1E.
*/
if (of_machine_is_compatible("qcom,x1e80100"))
disable_usb4 = true;
Greetings,
-- Sebastian
> As an additional observation, the same dock with type-c cable works well
> on Thinkpad X13s, Thinkbook 16 G7 QOY, Ideapad 5 14Q8X9, but doesn't need
> the ps883x changes (naturally).
>
> Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
> ---
> Jens Glathe (5):
> dt-bindings: usb: parade,ps8830: Add parade,disable-usb4 property
> usb: typec: ps883x: Return -EOPNOTSUPP for USB4 when parade,disable-usb4 is set
> usb: typec: mux: ps883x: refactor DP altmode handling and support TYPEC_DP_STATE_F
> usb: typec: mux: ps883x: add a delay after writing config regs
> arm64: dts: qcom: x1: disable ps883x USB4 capability
>
> .../devicetree/bindings/usb/parade,ps8830.yaml | 6 +++
> arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts | 4 ++
> .../qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts | 2 +
> arch/arm64/boot/dts/qcom/purwa-iot-evk.dts | 6 +++
> arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi | 4 ++
> arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi | 4 ++
> arch/arm64/boot/dts/qcom/x1-crd.dtsi | 6 +++
> arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi | 4 ++
> arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi | 2 +
> arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi | 4 ++
> arch/arm64/boot/dts/qcom/x1e001de-devkit.dts | 6 +++
> .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi | 4 ++
> .../boot/dts/qcom/x1e80100-dell-xps13-9345.dts | 4 ++
> .../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 6 +++
> .../dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts | 2 +
> .../boot/dts/qcom/x1e80100-microsoft-romulus.dtsi | 4 ++
> drivers/usb/typec/mux/ps883x.c | 47 +++++++++++++++-------
> 17 files changed, 100 insertions(+), 15 deletions(-)
> ---
> base-commit: 0718283ab28bc3907e10b61a6b4be6fefa1cbb2f
> change-id: 20260718-ps883x-disable-usb4-19b0fc13b5ab
>
> Best regards,
> --
> Jens Glathe <jens.glathe@oldschoolsolutions.biz>
>
>
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 1/5] dt-bindings: usb: parade,ps8830: Add parade,disable-usb4 property
2026-07-18 17:06 ` [PATCH 1/5] dt-bindings: usb: parade,ps8830: Add parade,disable-usb4 property Jens Glathe via B4 Relay
@ 2026-07-21 10:24 ` Krzysztof Kozlowski
0 siblings, 0 replies; 24+ messages in thread
From: Krzysztof Kozlowski @ 2026-07-21 10:24 UTC (permalink / raw)
To: Jens Glathe
Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio, linux-usb, devicetree, linux-kernel, linux-arm-msm,
stable, Dr. David Alan Gilbert
On Sat, Jul 18, 2026 at 07:06:29PM +0200, Jens Glathe wrote:
> Document a new optional boolean property "parade,disable-usb4".
> When present, the retimer rejects USB4 mode by returning -EOPNOTSUPP,
> forcing a fallback to USB3 + DP Alternate Mode.
>
> Assisted-by: Grok(xAI):4.3
> Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
> ---
> Documentation/devicetree/bindings/usb/parade,ps8830.yaml | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/usb/parade,ps8830.yaml b/Documentation/devicetree/bindings/usb/parade,ps8830.yaml
> index eaeab1c01a594..44242907461eb 100644
> --- a/Documentation/devicetree/bindings/usb/parade,ps8830.yaml
> +++ b/Documentation/devicetree/bindings/usb/parade,ps8830.yaml
> @@ -66,6 +66,12 @@ properties:
> Sideband Use (SBU) AUX lines endpoint to the Type-C connector for the purpose of
> handling altmode muxing and orientation switching.
>
> + parade,disable-usb4:
> + type: boolean
> + description:
> + When present, the retimer rejects USB4 mode (returns -EOPNOTSUPP).
You described the desired Linux feature or behavior, not the actual
hardware. The bindings are about the latter, so instead you need to
rephrase the property and its description to match actual hardware
capabilities/features/configuration etc.
> + This forces the Type-C stack to fall back to USB3 + DP Alternate Mode.
> +
> required:
> - compatible
> - reg
>
> --
> 2.53.0
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/5] usb: typec: mux: ps883x: refactor DP altmode handling and support TYPEC_DP_STATE_F
2026-07-18 17:06 ` [PATCH 3/5] usb: typec: mux: ps883x: refactor DP altmode handling and support TYPEC_DP_STATE_F Jens Glathe via B4 Relay
@ 2026-07-21 10:45 ` Heikki Krogerus
2026-07-21 18:02 ` Dmitry Baryshkov
1 sibling, 0 replies; 24+ messages in thread
From: Heikki Krogerus @ 2026-07-21 10:45 UTC (permalink / raw)
To: jens.glathe
Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Bjorn Andersson, Konrad Dybcio,
linux-usb, devicetree, linux-kernel, linux-arm-msm, stable,
Dr. David Alan Gilbert
On Sat, Jul 18, 2026 at 07:06:31PM +0200, Jens Glathe via B4 Relay wrote:
> From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
>
> Several docks, including the Lenovo 40B0 and SSK SC220, still send the
> legacy TYPEC_DP_STATE_F mode request (deprecated since DisplayPort Alt
> Mode spec version 1.0b). Treat it as USB3 + DP altmode (same as
> TYPEC_DP_STATE_D) so that DP altmode works correctly, especially on
> the 40B0 in Type-C fallback mode.
>
> Extract the state handling into ps883x_apply_dp_altmode() (modelled
> after qmp-combo-phy) for consistency.
>
> Assisted-by: Grok(xAI):4.3
> Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> ---
> drivers/usb/typec/mux/ps883x.c | 35 ++++++++++++++++++++---------------
> 1 file changed, 20 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
> index 3fa26ce01a9c9..3533d4f363286 100644
> --- a/drivers/usb/typec/mux/ps883x.c
> +++ b/drivers/usb/typec/mux/ps883x.c
> @@ -188,6 +188,25 @@ static int ps883x_configure(struct ps883x_retimer *retimer, int cfg0,
> return 0;
> }
>
> +static void ps883x_apply_dp_altmode(int *cfg0, int *cfg1, int dp_state)
> +{
> + *cfg1 |= CONN_STATUS_1_DP_CONNECTED | CONN_STATUS_1_DP_HPD_LEVEL;
> +
> + switch (dp_state) {
> + case TYPEC_DP_STATE_D:
> + case TYPEC_DP_STATE_F:
> + *cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
> + fallthrough;
> + case TYPEC_DP_STATE_C:
> + case TYPEC_DP_STATE_E:
> + *cfg1 |= CONN_STATUS_1_DP_SINK_REQUESTED |
> + CONN_STATUS_1_DP_PIN_ASSIGNMENT_C_D;
> + break;
> + default:
> + break;
> + }
> +}
> +
> static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state *state)
> {
> struct typec_thunderbolt_data *tb_data;
> @@ -203,24 +222,10 @@ static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state
> if (state->alt) {
> switch (state->alt->svid) {
> case USB_TYPEC_DP_SID:
> - cfg1 |= CONN_STATUS_1_DP_CONNECTED |
> - CONN_STATUS_1_DP_HPD_LEVEL;
> -
> - switch (state->mode) {
> - case TYPEC_DP_STATE_D:
> - cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
> - fallthrough;
> - case TYPEC_DP_STATE_C:
> - cfg1 |= CONN_STATUS_1_DP_SINK_REQUESTED |
> - CONN_STATUS_1_DP_PIN_ASSIGNMENT_C_D;
> - break;
> - default: /* MODE_E */
> - break;
> - }
> + ps883x_apply_dp_altmode(&cfg0, &cfg1, state->mode);
> break;
> case USB_TYPEC_TBT_SID:
> tb_data = state->data;
> -
> /* Unconditional */
> cfg2 |= CONN_STATUS_2_TBT_CONNECTED;
>
>
> --
> 2.53.0
>
--
heikki
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 4/5] usb: typec: mux: ps883x: add a delay after writing config regs
2026-07-18 17:06 ` [PATCH 4/5] usb: typec: mux: ps883x: add a delay after writing config regs Jens Glathe via B4 Relay
@ 2026-07-21 10:53 ` Heikki Krogerus
2026-07-22 17:36 ` Jens Glathe
0 siblings, 1 reply; 24+ messages in thread
From: Heikki Krogerus @ 2026-07-21 10:53 UTC (permalink / raw)
To: jens.glathe
Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Bjorn Andersson, Konrad Dybcio,
linux-usb, devicetree, linux-kernel, linux-arm-msm, stable,
Dr. David Alan Gilbert
Hi,
On Sat, Jul 18, 2026 at 07:06:32PM +0200, Jens Glathe via B4 Relay wrote:
> From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
>
> The config regs seem to need a few ms to propagate the changes through the
> system (like, PLLs). This improves the hotplug dp altmode success rate
> on the Lenovo 40B0 dock to 100%.
20ms - 30ms is a bit more than a few ms.
> Tested with T14s G6 and 40B0 dock on the HDMI port with a type-c host cable.
>
> Assisted-by: Gemini:3
> Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
> ---
> drivers/usb/typec/mux/ps883x.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
> index 3533d4f363286..3ca2952e6a0a3 100644
> --- a/drivers/usb/typec/mux/ps883x.c
> +++ b/drivers/usb/typec/mux/ps883x.c
> @@ -185,6 +185,8 @@ static int ps883x_configure(struct ps883x_retimer *retimer, int cfg0,
> return ret;
> }
>
> + usleep_range(20000, 30000);
/* <explanation why is the delay is necessary> */
fsleep(20000);
> return 0;
> }
thanks,
--
heikki
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks
2026-07-21 0:43 ` [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks Sebastian Reichel
@ 2026-07-21 16:24 ` Dr. David Alan Gilbert
2026-07-21 23:34 ` Sebastian Reichel
0 siblings, 1 reply; 24+ messages in thread
From: Dr. David Alan Gilbert @ 2026-07-21 16:24 UTC (permalink / raw)
To: Sebastian Reichel
Cc: jens.glathe, Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio, linux-usb, devicetree, linux-kernel, linux-arm-msm,
stable
* Sebastian Reichel (sre@kernel.org) wrote:
> Hello,
>
> On Sat, Jul 18, 2026 at 07:06:28PM +0200, Jens Glathe via B4 Relay wrote:
> > On Qualcomm X1E80100 platforms (e.g. Lenovo ThinkPad T14s Gen 6)
> > using the Parade PS883x retimer, connecting USB4-capable docks such
> > as the Lenovo 40B0 via a regular Type-C cable (which forces the dock
> > into Type-C fallback mode) often results in working USB but no
> > DisplayPort output.
> >
> > This series addresses the issue with two main changes:
> >
> > - Add a new optional DT property "parade,disable-usb4". When present,
> > the PS883x driver rejects USB4 mode (-EOPNOTSUPP). This forces the
> > Type-C stack to fall back to USB3 + DP Alt Mode, which works
> > reliably with the 40B0.
> >
> > - Refactor DP altmode handling to also support the legacy
> > TYPEC_DP_STATE_F request (deprecated since DP Alt Mode 1.0b) sent by
> > the 40B0 and other docks (e.g. SSK SC220).
> >
> > - Add a short delay after writing configuration registers, which
> > improves hotplug reliability.
> >
> > This is a temporary workaround until full USB4 DP tunneling support is
> > available in the X1E USB4 controller and qmp-combo PHY stack.
> >
> > Note: The DT patch adds the new property to all currently upstream
> > boards using the PS883x retimer (15 files). Happy to split it on v2
> > if requested.
>
> I don't think a kernel driver limitation is a good reason for the DT
> property. I suggest to add something like this in the ps883x driver
> instead:
>
> /*
> * Hamoa does not yet support USB4, disable it for now to gracefully
> * fall back to USB3 + DP AltMode. This should be removed once USB4
> * support landed for X1E.
> */
> if (of_machine_is_compatible("qcom,x1e80100"))
> disable_usb4 = true;
It seems a bit of a weird abstraction break to put a machine type check
down in a device that's not specific to qcom.
I'd bet it's not just qcom's suffering from this as well.
Dave
> Greetings,
>
> -- Sebastian
>
> > As an additional observation, the same dock with type-c cable works well
> > on Thinkpad X13s, Thinkbook 16 G7 QOY, Ideapad 5 14Q8X9, but doesn't need
> > the ps883x changes (naturally).
> >
> > Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
> > ---
> > Jens Glathe (5):
> > dt-bindings: usb: parade,ps8830: Add parade,disable-usb4 property
> > usb: typec: ps883x: Return -EOPNOTSUPP for USB4 when parade,disable-usb4 is set
> > usb: typec: mux: ps883x: refactor DP altmode handling and support TYPEC_DP_STATE_F
> > usb: typec: mux: ps883x: add a delay after writing config regs
> > arm64: dts: qcom: x1: disable ps883x USB4 capability
> >
> > .../devicetree/bindings/usb/parade,ps8830.yaml | 6 +++
> > arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts | 4 ++
> > .../qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts | 2 +
> > arch/arm64/boot/dts/qcom/purwa-iot-evk.dts | 6 +++
> > arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi | 4 ++
> > arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi | 4 ++
> > arch/arm64/boot/dts/qcom/x1-crd.dtsi | 6 +++
> > arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi | 4 ++
> > arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi | 2 +
> > arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi | 4 ++
> > arch/arm64/boot/dts/qcom/x1e001de-devkit.dts | 6 +++
> > .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi | 4 ++
> > .../boot/dts/qcom/x1e80100-dell-xps13-9345.dts | 4 ++
> > .../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 6 +++
> > .../dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts | 2 +
> > .../boot/dts/qcom/x1e80100-microsoft-romulus.dtsi | 4 ++
> > drivers/usb/typec/mux/ps883x.c | 47 +++++++++++++++-------
> > 17 files changed, 100 insertions(+), 15 deletions(-)
> > ---
> > base-commit: 0718283ab28bc3907e10b61a6b4be6fefa1cbb2f
> > change-id: 20260718-ps883x-disable-usb4-19b0fc13b5ab
> >
> > Best regards,
> > --
> > Jens Glathe <jens.glathe@oldschoolsolutions.biz>
> >
> >
> >
--
-----Open up your eyes, open up your mind, open up your code -------
/ Dr. David Alan Gilbert | Running GNU/Linux | Happy \
\ dave @ treblig.org | | In Hex /
\ _________________________|_____ http://www.treblig.org |_______/
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks
2026-07-18 17:06 [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks Jens Glathe via B4 Relay
` (5 preceding siblings ...)
2026-07-21 0:43 ` [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks Sebastian Reichel
@ 2026-07-21 17:56 ` Dmitry Baryshkov
6 siblings, 0 replies; 24+ messages in thread
From: Dmitry Baryshkov @ 2026-07-21 17:56 UTC (permalink / raw)
To: jens.glathe
Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio, linux-usb, devicetree, linux-kernel, linux-arm-msm,
stable, Dr. David Alan Gilbert
On Sat, Jul 18, 2026 at 07:06:28PM +0200, Jens Glathe via B4 Relay wrote:
> On Qualcomm X1E80100 platforms (e.g. Lenovo ThinkPad T14s Gen 6)
> using the Parade PS883x retimer, connecting USB4-capable docks such
> as the Lenovo 40B0 via a regular Type-C cable (which forces the dock
> into Type-C fallback mode) often results in working USB but no
> DisplayPort output.
Just for my understanding, here you mean a Type-C cable with all 4 lanes
and the SBU lines?
>
> This series addresses the issue with two main changes:
>
> - Add a new optional DT property "parade,disable-usb4". When present,
> the PS883x driver rejects USB4 mode (-EOPNOTSUPP). This forces the
> Type-C stack to fall back to USB3 + DP Alt Mode, which works
> reliably with the 40B0.
>
> - Refactor DP altmode handling to also support the legacy
> TYPEC_DP_STATE_F request (deprecated since DP Alt Mode 1.0b) sent by
> the 40B0 and other docks (e.g. SSK SC220).
>
> - Add a short delay after writing configuration registers, which
> improves hotplug reliability.
>
> This is a temporary workaround until full USB4 DP tunneling support is
> available in the X1E USB4 controller and qmp-combo PHY stack.
>
> Note: The DT patch adds the new property to all currently upstream
> boards using the PS883x retimer (15 files). Happy to split it on v2
> if requested.
>
> As an additional observation, the same dock with type-c cable works well
> on Thinkpad X13s, Thinkbook 16 G7 QOY, Ideapad 5 14Q8X9, but doesn't need
> the ps883x changes (naturally).
>
> Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
> ---
> Jens Glathe (5):
> dt-bindings: usb: parade,ps8830: Add parade,disable-usb4 property
> usb: typec: ps883x: Return -EOPNOTSUPP for USB4 when parade,disable-usb4 is set
> usb: typec: mux: ps883x: refactor DP altmode handling and support TYPEC_DP_STATE_F
> usb: typec: mux: ps883x: add a delay after writing config regs
> arm64: dts: qcom: x1: disable ps883x USB4 capability
>
> .../devicetree/bindings/usb/parade,ps8830.yaml | 6 +++
> arch/arm64/boot/dts/qcom/hamoa-iot-evk.dts | 4 ++
> .../qcom/hamoa-lenovo-ideacentre-mini-01q8x10.dts | 2 +
> arch/arm64/boot/dts/qcom/purwa-iot-evk.dts | 6 +++
> arch/arm64/boot/dts/qcom/x1-asus-vivobook-s15.dtsi | 4 ++
> arch/arm64/boot/dts/qcom/x1-asus-zenbook-a14.dtsi | 4 ++
> arch/arm64/boot/dts/qcom/x1-crd.dtsi | 6 +++
> arch/arm64/boot/dts/qcom/x1-dell-thena.dtsi | 4 ++
> arch/arm64/boot/dts/qcom/x1-hp-omnibook-x14.dtsi | 2 +
> arch/arm64/boot/dts/qcom/x1-microsoft-denali.dtsi | 4 ++
> arch/arm64/boot/dts/qcom/x1e001de-devkit.dts | 6 +++
> .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dtsi | 4 ++
> .../boot/dts/qcom/x1e80100-dell-xps13-9345.dts | 4 ++
> .../boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 6 +++
> .../dts/qcom/x1e80100-medion-sprchrgd-14-s1.dts | 2 +
> .../boot/dts/qcom/x1e80100-microsoft-romulus.dtsi | 4 ++
> drivers/usb/typec/mux/ps883x.c | 47 +++++++++++++++-------
> 17 files changed, 100 insertions(+), 15 deletions(-)
> ---
> base-commit: 0718283ab28bc3907e10b61a6b4be6fefa1cbb2f
> change-id: 20260718-ps883x-disable-usb4-19b0fc13b5ab
>
> Best regards,
> --
> Jens Glathe <jens.glathe@oldschoolsolutions.biz>
>
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 2/5] usb: typec: ps883x: Return -EOPNOTSUPP for USB4 when parade,disable-usb4 is set
2026-07-18 17:06 ` [PATCH 2/5] usb: typec: ps883x: Return -EOPNOTSUPP for USB4 when parade,disable-usb4 is set Jens Glathe via B4 Relay
2026-07-19 1:14 ` Dr. David Alan Gilbert
@ 2026-07-21 17:57 ` Dmitry Baryshkov
2026-07-22 8:45 ` Jens Glathe
1 sibling, 1 reply; 24+ messages in thread
From: Dmitry Baryshkov @ 2026-07-21 17:57 UTC (permalink / raw)
To: jens.glathe
Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio, linux-usb, devicetree, linux-kernel, linux-arm-msm,
stable, Dr. David Alan Gilbert
On Sat, Jul 18, 2026 at 07:06:30PM +0200, Jens Glathe via B4 Relay wrote:
> From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
>
> On Qualcomm X1E80100 platforms using the Parade PS883x retimer (like
> Lenovo ThinkPad T14s Gen6), hotplugging USB4-capable docks such as the
> Lenovo 40B0 results in working USB but no DisplayPort output on the
> dock's HDMI/DP ports.
>
> When the dock negotiates USB4, the retimer receives TYPEC_MODE_USB4
> and forwards it via typec_mux_set(). The qmp_combo PHY then selects
> QMPPHY_MODE_USB3_ONLY because no classic DP altmode SVID is present in
> the state, leaving the DP transmitter and AUX channel disabled.
Would it be enough to make QMP combo PHY to treat USB4 as USB3+DP for
the sake of this issue?
>
> Add a DT property "parade,disable-usb4" that, when present, makes the
> PS883x driver reject USB4 modes as not supported. DP altmode
> configuration is still applied if negotiated, so both USB and
> DisplayPort continue to work.
>
> This is a temporary workaround until proper USB4 DP tunneling support
> is available in the X1E USB4 controller and qmp_combo PHY stack.
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/5] usb: typec: mux: ps883x: refactor DP altmode handling and support TYPEC_DP_STATE_F
2026-07-18 17:06 ` [PATCH 3/5] usb: typec: mux: ps883x: refactor DP altmode handling and support TYPEC_DP_STATE_F Jens Glathe via B4 Relay
2026-07-21 10:45 ` Heikki Krogerus
@ 2026-07-21 18:02 ` Dmitry Baryshkov
1 sibling, 0 replies; 24+ messages in thread
From: Dmitry Baryshkov @ 2026-07-21 18:02 UTC (permalink / raw)
To: jens.glathe
Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio, linux-usb, devicetree, linux-kernel, linux-arm-msm,
stable, Dr. David Alan Gilbert
On Sat, Jul 18, 2026 at 07:06:31PM +0200, Jens Glathe via B4 Relay wrote:
> From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
>
> Several docks, including the Lenovo 40B0 and SSK SC220, still send the
> legacy TYPEC_DP_STATE_F mode request (deprecated since DisplayPort Alt
> Mode spec version 1.0b). Treat it as USB3 + DP altmode (same as
> TYPEC_DP_STATE_D) so that DP altmode works correctly, especially on
> the 40B0 in Type-C fallback mode.
>
> Extract the state handling into ps883x_apply_dp_altmode() (modelled
> after qmp-combo-phy) for consistency.
>
> Assisted-by: Grok(xAI):4.3
> Signed-off-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
> ---
> drivers/usb/typec/mux/ps883x.c | 35 ++++++++++++++++++++---------------
> 1 file changed, 20 insertions(+), 15 deletions(-)
Generally it's not recommended to mix refactorings and the sensible
changes. Nevertheless:
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
(feel free to retain it if you split it into two patches).
>
> diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
> index 3fa26ce01a9c9..3533d4f363286 100644
> --- a/drivers/usb/typec/mux/ps883x.c
> +++ b/drivers/usb/typec/mux/ps883x.c
> @@ -188,6 +188,25 @@ static int ps883x_configure(struct ps883x_retimer *retimer, int cfg0,
> return 0;
> }
>
> +static void ps883x_apply_dp_altmode(int *cfg0, int *cfg1, int dp_state)
> +{
> + *cfg1 |= CONN_STATUS_1_DP_CONNECTED | CONN_STATUS_1_DP_HPD_LEVEL;
> +
> + switch (dp_state) {
> + case TYPEC_DP_STATE_D:
> + case TYPEC_DP_STATE_F:
> + *cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
> + fallthrough;
> + case TYPEC_DP_STATE_C:
> + case TYPEC_DP_STATE_E:
> + *cfg1 |= CONN_STATUS_1_DP_SINK_REQUESTED |
> + CONN_STATUS_1_DP_PIN_ASSIGNMENT_C_D;
> + break;
> + default:
> + break;
> + }
> +}
> +
> static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state *state)
> {
> struct typec_thunderbolt_data *tb_data;
> @@ -203,24 +222,10 @@ static int ps883x_set(struct ps883x_retimer *retimer, struct typec_retimer_state
> if (state->alt) {
> switch (state->alt->svid) {
> case USB_TYPEC_DP_SID:
> - cfg1 |= CONN_STATUS_1_DP_CONNECTED |
> - CONN_STATUS_1_DP_HPD_LEVEL;
> -
> - switch (state->mode) {
> - case TYPEC_DP_STATE_D:
> - cfg0 |= CONN_STATUS_0_USB_3_1_CONNECTED;
> - fallthrough;
> - case TYPEC_DP_STATE_C:
> - cfg1 |= CONN_STATUS_1_DP_SINK_REQUESTED |
> - CONN_STATUS_1_DP_PIN_ASSIGNMENT_C_D;
> - break;
> - default: /* MODE_E */
> - break;
> - }
> + ps883x_apply_dp_altmode(&cfg0, &cfg1, state->mode);
> break;
> case USB_TYPEC_TBT_SID:
> tb_data = state->data;
> -
> /* Unconditional */
> cfg2 |= CONN_STATUS_2_TBT_CONNECTED;
>
>
> --
> 2.53.0
>
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks
2026-07-21 16:24 ` Dr. David Alan Gilbert
@ 2026-07-21 23:34 ` Sebastian Reichel
2026-07-22 8:27 ` Konrad Dybcio
2026-07-22 8:38 ` Jens Glathe
0 siblings, 2 replies; 24+ messages in thread
From: Sebastian Reichel @ 2026-07-21 23:34 UTC (permalink / raw)
To: Dr. David Alan Gilbert
Cc: jens.glathe, Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio, linux-usb, devicetree, linux-kernel, linux-arm-msm,
stable
[-- Attachment #1: Type: text/plain, Size: 3818 bytes --]
Hi,
On Tue, Jul 21, 2026 at 04:24:06PM +0000, Dr. David Alan Gilbert wrote:
> * Sebastian Reichel (sre@kernel.org) wrote:
> > On Sat, Jul 18, 2026 at 07:06:28PM +0200, Jens Glathe via B4 Relay wrote:
> > > On Qualcomm X1E80100 platforms (e.g. Lenovo ThinkPad T14s Gen 6)
> > > using the Parade PS883x retimer, connecting USB4-capable docks such
> > > as the Lenovo 40B0 via a regular Type-C cable (which forces the dock
> > > into Type-C fallback mode) often results in working USB but no
> > > DisplayPort output.
> > >
> > > This series addresses the issue with two main changes:
> > >
> > > - Add a new optional DT property "parade,disable-usb4". When present,
> > > the PS883x driver rejects USB4 mode (-EOPNOTSUPP). This forces the
> > > Type-C stack to fall back to USB3 + DP Alt Mode, which works
> > > reliably with the 40B0.
> > >
> > > - Refactor DP altmode handling to also support the legacy
> > > TYPEC_DP_STATE_F request (deprecated since DP Alt Mode 1.0b) sent by
> > > the 40B0 and other docks (e.g. SSK SC220).
> > >
> > > - Add a short delay after writing configuration registers, which
> > > improves hotplug reliability.
> > >
> > > This is a temporary workaround until full USB4 DP tunneling support is
> > > available in the X1E USB4 controller and qmp-combo PHY stack.
> > >
> > > Note: The DT patch adds the new property to all currently upstream
> > > boards using the PS883x retimer (15 files). Happy to split it on v2
> > > if requested.
> >
> > I don't think a kernel driver limitation is a good reason for the DT
> > property. I suggest to add something like this in the ps883x driver
> > instead:
> >
> > /*
> > * Hamoa does not yet support USB4, disable it for now to gracefully
> > * fall back to USB3 + DP AltMode. This should be removed once USB4
> > * support landed for X1E.
> > */
> > if (of_machine_is_compatible("qcom,x1e80100"))
> > disable_usb4 = true;
>
> It seems a bit of a weird abstraction break to put a machine type
> check down in a device that's not specific to qcom.
It's obviously a hack, but this quirk would be simple and fully
contained within the kernel and thus does not create a new ABI (in
opposite to the DT property). Once the kernel supports USB4 on Hamoa
it could simply be dropped and people have working USB4 with their
existing DT.
> I'd bet it's not just qcom's suffering from this as well.
Qcom boards are the only users of ps883x (the driver is exclusively
probed via DT at the moment). So right now one could also simply
remove any USB4 support from ps883x, but that would work against the
people working on _adding_ proper USB4 support.
IIUIC the problem is, that the Qcom board supports USB4, negotiates
this via the PD protocol and then soft-fails because the software
support is not yet ready. Most other ARM platforms do not have any
USB4/Thunderbolt hardware support to begin with and wouldn't
negotiate it, so they do not run into this in the first place.
AFAIK only Qcom and Apple M series support it. A quick search
suggsts Apple used an Intel retimer in the past and a custom one
nowadays. From the looks of it the x86 world cannot use this driver
either and probably handles retimers transparently in ACPI, so it's
effectively Qcom specific until other vendors start adding USB4
support. The only thing announced potentially running into this
would be the Nvidia RTX Spark, which first needs to be released,
then find a bunch of people motivated to implement upstream support.
Nothing with USB4 capabilities has been announced from Mediatek or
Rockchip. So I wouldn't hold my breath for another user and still
suggested adding the machine check instead of simply disabling USB4
for everyone ;)
Greetings,
-- Sebastian
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks
2026-07-21 23:34 ` Sebastian Reichel
@ 2026-07-22 8:27 ` Konrad Dybcio
2026-07-22 15:34 ` Sebastian Reichel
2026-07-22 8:38 ` Jens Glathe
1 sibling, 1 reply; 24+ messages in thread
From: Konrad Dybcio @ 2026-07-22 8:27 UTC (permalink / raw)
To: Sebastian Reichel, Dr. David Alan Gilbert
Cc: jens.glathe, Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio, linux-usb, devicetree, linux-kernel, linux-arm-msm,
stable
On 7/22/26 1:34 AM, Sebastian Reichel wrote:
> Hi,
>
> On Tue, Jul 21, 2026 at 04:24:06PM +0000, Dr. David Alan Gilbert wrote:
>> * Sebastian Reichel (sre@kernel.org) wrote:
>>> On Sat, Jul 18, 2026 at 07:06:28PM +0200, Jens Glathe via B4 Relay wrote:
>>>> On Qualcomm X1E80100 platforms (e.g. Lenovo ThinkPad T14s Gen 6)
>>>> using the Parade PS883x retimer, connecting USB4-capable docks such
>>>> as the Lenovo 40B0 via a regular Type-C cable (which forces the dock
>>>> into Type-C fallback mode) often results in working USB but no
>>>> DisplayPort output.
[...]
> AFAIK only Qcom and Apple M series support it. A quick search
> suggsts Apple used an Intel retimer in the past and a custom one
> nowadays. From the looks of it the x86 world cannot use this driver
> either and probably handles retimers transparently in ACPI, so it's
> effectively Qcom specific until other vendors start adding USB4
> support. The only thing announced potentially running into this
> would be the Nvidia RTX Spark, which first needs to be released,
> then find a bunch of people motivated to implement upstream support.
> Nothing with USB4 capabilities has been announced from Mediatek or
> Rockchip. So I wouldn't hold my breath for another user and still
> suggested adding the machine check instead of simply disabling USB4
> for everyone ;)
The PS883x is used on x86 machines too. Apart from I2C, it also
""speaks thunderbolt"" - the bus has a way for retimers to enumerate
and communicate with the routers (controllers) through a sideband
UART-like interface. But for that, it still probably needs the
platform firmware to program it into the right mode over I2C,
which Linux is unaware of (as it effectively should be).
FWIW, we do the same on X2. An MCU takes care of setting it up.
Konrad
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks
2026-07-21 23:34 ` Sebastian Reichel
2026-07-22 8:27 ` Konrad Dybcio
@ 2026-07-22 8:38 ` Jens Glathe
2026-07-22 16:03 ` Sebastian Reichel
1 sibling, 1 reply; 24+ messages in thread
From: Jens Glathe @ 2026-07-22 8:38 UTC (permalink / raw)
To: Sebastian Reichel, Dr. David Alan Gilbert
Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio, linux-usb, devicetree, linux-kernel, linux-arm-msm,
stable
Hi,
On 7/22/26 01:34, Sebastian Reichel wrote:
> Hi,
>
> On Tue, Jul 21, 2026 at 04:24:06PM +0000, Dr. David Alan Gilbert wrote:
>> * Sebastian Reichel (sre@kernel.org) wrote:
>>> I don't think a kernel driver limitation is a good reason for the DT
>>> property. I suggest to add something like this in the ps883x driver
>>> instead:
>>>
>>> /*
>>> * Hamoa does not yet support USB4, disable it for now to gracefully
>>> * fall back to USB3 + DP AltMode. This should be removed once USB4
>>> * support landed for X1E.
>>> */
>>> if (of_machine_is_compatible("qcom,x1e80100"))
>>> disable_usb4 = true;
>> It seems a bit of a weird abstraction break to put a machine type
>> check down in a device that's not specific to qcom.
> It's obviously a hack, but this quirk would be simple and fully
> contained within the kernel and thus does not create a new ABI (in
> opposite to the DT property). Once the kernel supports USB4 on Hamoa
> it could simply be dropped and people have working USB4 with their
> existing DT.
>
>> I'd bet it's not just qcom's suffering from this as well.
> Qcom boards are the only users of ps883x (the driver is exclusively
> probed via DT at the moment). So right now one could also simply
> remove any USB4 support from ps883x, but that would work against the
> people working on _adding_ proper USB4 support.
>
> IIUIC the problem is, that the Qcom board supports USB4, negotiates
> this via the PD protocol and then soft-fails because the software
> support is not yet ready. Most other ARM platforms do not have any
> USB4/Thunderbolt hardware support to begin with and wouldn't
> negotiate it, so they do not run into this in the first place.
>
> AFAIK only Qcom and Apple M series support it. A quick search
> suggsts Apple used an Intel retimer in the past and a custom one
> nowadays. From the looks of it the x86 world cannot use this driver
> either and probably handles retimers transparently in ACPI, so it's
> effectively Qcom specific until other vendors start adding USB4
> support. The only thing announced potentially running into this
> would be the Nvidia RTX Spark, which first needs to be released,
> then find a bunch of people motivated to implement upstream support.
> Nothing with USB4 capabilities has been announced from Mediatek or
> Rockchip. So I wouldn't hold my breath for another user and still
> suggested adding the machine check instead of simply disabling USB4
> for everyone ;)
>
> Greetings,
>
> -- Sebastian
I understand, however I wouldn't want to nerf ps883x for the Hamoa
platform until the USB4 stack is complete. The issues you currently run
into is:
- you use a tbt4 / usb4 cable and nothing works,
- you have a tbt4 / usb4 capable device in fallback mode that does
complex stuff when negotiating and firmware / a partial USB4 stack
requests USB4, which ends up not working.
Both cases are not the hardware's fault, it is capable of USB4. The
driver stack isn't. Therefore I would prefer to deliberately disable
USB4 modes by device via the DT. That way it can fall back to
re-negotiating something the driver stack is capable of. PS883x is not
the place where this starts, but where it's convenient to stop.
I did some tests without USB4 disabled and the 40B0 stack in type-c
cable fallback mode, and most of the time it just works. Except for an
unlucky plug, and despite it shouldn't request USB4, the request lands
at the redriver. Disabling USB4 modes reliably let's it renegotiate.
with best regards
Jens
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 2/5] usb: typec: ps883x: Return -EOPNOTSUPP for USB4 when parade,disable-usb4 is set
2026-07-21 17:57 ` Dmitry Baryshkov
@ 2026-07-22 8:45 ` Jens Glathe
0 siblings, 0 replies; 24+ messages in thread
From: Jens Glathe @ 2026-07-22 8:45 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Heikki Krogerus, Bjorn Andersson,
Konrad Dybcio, linux-usb, devicetree, linux-kernel, linux-arm-msm,
stable, Dr. David Alan Gilbert
Hi,
On 7/21/26 19:57, Dmitry Baryshkov wrote:
> On Sat, Jul 18, 2026 at 07:06:30PM +0200, Jens Glathe via B4 Relay wrote:
>> From: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
>>
>> On Qualcomm X1E80100 platforms using the Parade PS883x retimer (like
>> Lenovo ThinkPad T14s Gen6), hotplugging USB4-capable docks such as the
>> Lenovo 40B0 results in working USB but no DisplayPort output on the
>> dock's HDMI/DP ports.
>>
>> When the dock negotiates USB4, the retimer receives TYPEC_MODE_USB4
>> and forwards it via typec_mux_set(). The qmp_combo PHY then selects
>> QMPPHY_MODE_USB3_ONLY because no classic DP altmode SVID is present in
>> the state, leaving the DP transmitter and AUX channel disabled.
> Would it be enough to make QMP combo PHY to treat USB4 as USB3+DP for
> the sake of this issue?
AFAIU, no. USB4 has some tunneling protocol for DP altmode, not
dedicated lanes. Therefore you need to either support that or enforce
USB3 DP altmode negotiation. The role-switch on the qmmphy would be too
late IMO.
with best regards
Jens
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks
2026-07-22 8:27 ` Konrad Dybcio
@ 2026-07-22 15:34 ` Sebastian Reichel
0 siblings, 0 replies; 24+ messages in thread
From: Sebastian Reichel @ 2026-07-22 15:34 UTC (permalink / raw)
To: Konrad Dybcio
Cc: Dr. David Alan Gilbert, jens.glathe, Greg Kroah-Hartman,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Abel Vesa,
Heikki Krogerus, Bjorn Andersson, Konrad Dybcio, linux-usb,
devicetree, linux-kernel, linux-arm-msm, stable
[-- Attachment #1: Type: text/plain, Size: 2214 bytes --]
Hi,
On Wed, Jul 22, 2026 at 10:27:57AM +0200, Konrad Dybcio wrote:
> On 7/22/26 1:34 AM, Sebastian Reichel wrote:
> > On Tue, Jul 21, 2026 at 04:24:06PM +0000, Dr. David Alan Gilbert wrote:
> >> * Sebastian Reichel (sre@kernel.org) wrote:
> >>> On Sat, Jul 18, 2026 at 07:06:28PM +0200, Jens Glathe via B4 Relay wrote:
> >>>> On Qualcomm X1E80100 platforms (e.g. Lenovo ThinkPad T14s Gen 6)
> >>>> using the Parade PS883x retimer, connecting USB4-capable docks such
> >>>> as the Lenovo 40B0 via a regular Type-C cable (which forces the dock
> >>>> into Type-C fallback mode) often results in working USB but no
> >>>> DisplayPort output.
>
> [...]
>
> > AFAIK only Qcom and Apple M series support it. A quick search
> > suggsts Apple used an Intel retimer in the past and a custom one
> > nowadays. From the looks of it the x86 world cannot use this driver
> > either and probably handles retimers transparently in ACPI, so it's
> > effectively Qcom specific until other vendors start adding USB4
> > support. The only thing announced potentially running into this
> > would be the Nvidia RTX Spark, which first needs to be released,
> > then find a bunch of people motivated to implement upstream support.
> > Nothing with USB4 capabilities has been announced from Mediatek or
> > Rockchip. So I wouldn't hold my breath for another user and still
> > suggested adding the machine check instead of simply disabling USB4
> > for everyone ;)
>
> The PS883x is used on x86 machines too.
In context of x86 I was more talking about the driver than the chip
itself. The driver can only be loaded via DT. Any quirks and hacks
in the driver are unrelevant if the driver is not used by a
platform.
> Apart from I2C, it also ""speaks thunderbolt"" - the bus has a way
> for retimers to enumerate and communicate with the routers
> (controllers) through a sideband UART-like interface. But for
> that, it still probably needs the platform firmware to program it
> into the right mode over I2C, which Linux is unaware of (as it
> effectively should be).
>
> FWIW, we do the same on X2. An MCU takes care of setting it up.
Thanks for the info.
Greetings,
-- Sebastian
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks
2026-07-22 8:38 ` Jens Glathe
@ 2026-07-22 16:03 ` Sebastian Reichel
2026-07-22 17:18 ` Jens Glathe
0 siblings, 1 reply; 24+ messages in thread
From: Sebastian Reichel @ 2026-07-22 16:03 UTC (permalink / raw)
To: Jens Glathe
Cc: Dr. David Alan Gilbert, Greg Kroah-Hartman, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Abel Vesa, Heikki Krogerus,
Bjorn Andersson, Konrad Dybcio, linux-usb, devicetree,
linux-kernel, linux-arm-msm, stable
[-- Attachment #1: Type: text/plain, Size: 5234 bytes --]
Hi,
On Wed, Jul 22, 2026 at 10:38:34AM +0200, Jens Glathe wrote:
> On 7/22/26 01:34, Sebastian Reichel wrote:
> > On Tue, Jul 21, 2026 at 04:24:06PM +0000, Dr. David Alan Gilbert wrote:
> > > * Sebastian Reichel (sre@kernel.org) wrote:
> > > > I don't think a kernel driver limitation is a good reason for the DT
> > > > property. I suggest to add something like this in the ps883x driver
> > > > instead:
> > > >
> > > > /*
> > > > * Hamoa does not yet support USB4, disable it for now to gracefully
> > > > * fall back to USB3 + DP AltMode. This should be removed once USB4
> > > > * support landed for X1E.
> > > > */
> > > > if (of_machine_is_compatible("qcom,x1e80100"))
> > > > disable_usb4 = true;
> > > It seems a bit of a weird abstraction break to put a machine type
> > > check down in a device that's not specific to qcom.
> > It's obviously a hack, but this quirk would be simple and fully
> > contained within the kernel and thus does not create a new ABI (in
> > opposite to the DT property). Once the kernel supports USB4 on Hamoa
> > it could simply be dropped and people have working USB4 with their
> > existing DT.
> >
> > > I'd bet it's not just qcom's suffering from this as well.
> > Qcom boards are the only users of ps883x (the driver is exclusively
> > probed via DT at the moment). So right now one could also simply
> > remove any USB4 support from ps883x, but that would work against the
> > people working on _adding_ proper USB4 support.
> >
> > IIUIC the problem is, that the Qcom board supports USB4, negotiates
> > this via the PD protocol and then soft-fails because the software
> > support is not yet ready. Most other ARM platforms do not have any
> > USB4/Thunderbolt hardware support to begin with and wouldn't
> > negotiate it, so they do not run into this in the first place.
> >
> > AFAIK only Qcom and Apple M series support it. A quick search
> > suggsts Apple used an Intel retimer in the past and a custom one
> > nowadays. From the looks of it the x86 world cannot use this driver
> > either and probably handles retimers transparently in ACPI, so it's
> > effectively Qcom specific until other vendors start adding USB4
> > support. The only thing announced potentially running into this
> > would be the Nvidia RTX Spark, which first needs to be released,
> > then find a bunch of people motivated to implement upstream support.
> > Nothing with USB4 capabilities has been announced from Mediatek or
> > Rockchip. So I wouldn't hold my breath for another user and still
> > suggested adding the machine check instead of simply disabling USB4
> > for everyone ;)
> >
> > Greetings,
> >
> > -- Sebastian
>
> I understand, however I wouldn't want to nerf ps883x for the Hamoa
> platform until the USB4 stack is complete. The issues you
> currently run into is:
That's exactly what this series is doing and not really a problem
considering USB4 is not working anyways.
> - you use a tbt4 / usb4 cable and nothing works,
>
> - you have a tbt4 / usb4 capable device in fallback mode that does complex
> stuff when negotiating and firmware / a partial USB4 stack requests USB4,
> which ends up not working.
>
> Both cases are not the hardware's fault, it is capable of USB4. The driver
> stack isn't. Therefore I would prefer to deliberately disable USB4 modes by
> device via the DT.
DT is not a kernel config file. You can find that in .config. The DT
describes the hardware. Writing in DT "no-usb4" means that the
hardware does not support USB4. But the board files you are changing
can do USB4 in hardware. Thus the DT entry is wrong.
> That way it can fall back to re-negotiating something the driver
> stack is capable of. PS883x is not the place where this starts,
> but where it's convenient to stop.
I understand that part. That's why I suggested to just put the
disable_usb4 = true; in there without the DT check instead of
something completley differnt. That's exactly the same, except
that the information is fully contained within the kernel.
This is actually __less__ intrusive:
- less code
- there is no need to touch all board files
- the hardware description stays correct
- it does not create ABI (you are supposed to continue supporting
the new flag also after known users dropped it)
- affects the same devices (all X1E)
- but automatically also affects newly added boards
- it's easier to revert (no need to touch all board files)
If you don't want to have a hack, the proper fix would be to detect
that the follow-up stack is not capable of handlin USB4 and avoid
exposing it. I'm aware that this is a quite complex task and
considering USB4 is WIP anyways, I would go with the hack until
then.
> I did some tests without USB4 disabled and the 40B0 stack in
> type-c cable fallback mode, and most of the time it just works.
> Except for an unlucky plug, and despite it shouldn't request USB4,
> the request lands at the redriver. Disabling USB4 modes reliably
> let's it renegotiate.
I'm not doubting the result of the patch series and plan to test
with my TB capable Dell U2725QE later.
Greetings,
-- Sebastian
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks
2026-07-22 16:03 ` Sebastian Reichel
@ 2026-07-22 17:18 ` Jens Glathe
0 siblings, 0 replies; 24+ messages in thread
From: Jens Glathe @ 2026-07-22 17:18 UTC (permalink / raw)
To: Sebastian Reichel
Cc: Dr. David Alan Gilbert, Greg Kroah-Hartman, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Abel Vesa, Heikki Krogerus,
Bjorn Andersson, Konrad Dybcio, linux-usb, devicetree,
linux-kernel, linux-arm-msm, stable
Hi Sebastian,
On 7/22/26 18:03, Sebastian Reichel wrote:
> Hi,
>
> On Wed, Jul 22, 2026 at 10:38:34AM +0200, Jens Glathe wrote:
>> I understand, however I wouldn't want to nerf ps883x for the Hamoa
>> platform until the USB4 stack is complete. The issues you
>> currently run into is:
> That's exactly what this series is doing and not really a problem
> considering USB4 is not working anyways.
...yet :) Alright, nerf patch it is. Question is how broad we need to
specify. You have ps883x on all x1 (Hamoa and Purwa, like, Zenbook A14,
IdeaCentre Mini X, HP Omnibook X14 fe1). So probably those compatibles:
qcom,x1e80100, qcom,x1p42100, qcom,hamoa, qcom,purwa. Looks like a
nerfing table :)
I will do this in v2.
with best regards
Jens
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 4/5] usb: typec: mux: ps883x: add a delay after writing config regs
2026-07-21 10:53 ` Heikki Krogerus
@ 2026-07-22 17:36 ` Jens Glathe
0 siblings, 0 replies; 24+ messages in thread
From: Jens Glathe @ 2026-07-22 17:36 UTC (permalink / raw)
To: Heikki Krogerus
Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Abel Vesa, Bjorn Andersson, Konrad Dybcio,
linux-usb, devicetree, linux-kernel, linux-arm-msm, stable,
Dr. David Alan Gilbert
Hi,
On 7/21/26 12:53, Heikki Krogerus wrote:
> Hi,
>
> On Sat, Jul 18, 2026 at 07:06:32PM +0200, Jens Glathe via B4 Relay wrote:
>> From: Jens Glathe<jens.glathe@oldschoolsolutions.biz>
>>
>> The config regs seem to need a few ms to propagate the changes through the
>> system (like, PLLs). This improves the hotplug dp altmode success rate
>> on the Lenovo 40B0 dock to 100%.
[...]
> + usleep_range(20000, 30000);
> /* <explanation why is the delay is necessary> */
> fsleep(20000);
Thanks for the suggestion. It will be in v2.
with best regards
Jens
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2026-07-22 17:36 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-18 17:06 [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks Jens Glathe via B4 Relay
2026-07-18 17:06 ` [PATCH 1/5] dt-bindings: usb: parade,ps8830: Add parade,disable-usb4 property Jens Glathe via B4 Relay
2026-07-21 10:24 ` Krzysztof Kozlowski
2026-07-18 17:06 ` [PATCH 2/5] usb: typec: ps883x: Return -EOPNOTSUPP for USB4 when parade,disable-usb4 is set Jens Glathe via B4 Relay
2026-07-19 1:14 ` Dr. David Alan Gilbert
2026-07-21 17:57 ` Dmitry Baryshkov
2026-07-22 8:45 ` Jens Glathe
2026-07-18 17:06 ` [PATCH 3/5] usb: typec: mux: ps883x: refactor DP altmode handling and support TYPEC_DP_STATE_F Jens Glathe via B4 Relay
2026-07-21 10:45 ` Heikki Krogerus
2026-07-21 18:02 ` Dmitry Baryshkov
2026-07-18 17:06 ` [PATCH 4/5] usb: typec: mux: ps883x: add a delay after writing config regs Jens Glathe via B4 Relay
2026-07-21 10:53 ` Heikki Krogerus
2026-07-22 17:36 ` Jens Glathe
2026-07-18 17:06 ` [PATCH 5/5] arm64: dts: qcom: x1: disable ps883x USB4 capability Jens Glathe via B4 Relay
2026-07-19 1:15 ` Dr. David Alan Gilbert
2026-07-21 0:43 ` [PATCH 0/5] usb: typec: ps883x: fixes for older Thunderbolt 4 / USB4 docks Sebastian Reichel
2026-07-21 16:24 ` Dr. David Alan Gilbert
2026-07-21 23:34 ` Sebastian Reichel
2026-07-22 8:27 ` Konrad Dybcio
2026-07-22 15:34 ` Sebastian Reichel
2026-07-22 8:38 ` Jens Glathe
2026-07-22 16:03 ` Sebastian Reichel
2026-07-22 17:18 ` Jens Glathe
2026-07-21 17:56 ` Dmitry Baryshkov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox