Skip to content

Commit 78e0ea4

Browse files
Badhri Jagan Sridharangregkh
authored andcommitted
tcpm: Avoid soft reset when partner does not support get_status
When partner does not support get_status message, tcpm right now responds with soft reset message. This causes PD renegotiation to happen and resets PPS link. Avoid soft resetting the link when partner does not support get_status message to mitigate PPS resets. [ 208.926752] Setting voltage/current limit 9500 mV 2450 mA [ 208.930407] set_auto_vbus_discharge_threshold mode:3 pps_active:y vbus:9500 ret:0 [ 208.930418] state change SNK_TRANSITION_SINK -> SNK_READY [rev3 POWER_NEGOTIATION] [ 208.930455] AMS POWER_NEGOTIATION finished // ALERT message from the Source [ 213.948442] PD RX, header: 0x19a6 [1] [ 213.948451] state change SNK_READY -> GET_STATUS_SEND [rev3 GETTING_SOURCE_SINK_STATUS] [ 213.948457] PD TX, header: 0x492 [ 213.950402] PD TX complete, status: 0 [ 213.950427] pending state change GET_STATUS_SEND -> GET_STATUS_SEND_TIMEOUT @ 60 ms [rev3 GETTING_SOURCE_SINK_STATUS] // NOT_SUPPORTED from the Source [ 213.959954] PD RX, header: 0xbb0 [1] // sink sends SOFT_RESET [ 213.959958] state change GET_STATUS_SEND -> SNK_SOFT_RESET [rev3 GETTING_SOURCE_SINK_STATUS] [ 213.959962] AMS GETTING_SOURCE_SINK_STATUS finished [ 213.959964] AMS SOFT_RESET_AMS start [ 213.959966] state change SNK_SOFT_RESET -> AMS_START [rev3 SOFT_RESET_AMS] [ 213.959969] state change AMS_START -> SOFT_RESET_SEND [rev3 SOFT_RESET_AMS] Cc: [email protected] Fixes: 8dea75e ("usb: typec: tcpm: Protocol Error handling") Signed-off-by: Badhri Jagan Sridharan <[email protected]> Acked-by: Heikki Krogerus <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 2d6d801 commit 78e0ea4

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

drivers/usb/typec/tcpm/tcpm.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2754,6 +2754,13 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port,
27542754
port->sink_cap_done = true;
27552755
tcpm_set_state(port, ready_state(port), 0);
27562756
break;
2757+
/*
2758+
* Some port partners do not support GET_STATUS, avoid soft reset the link to
2759+
* prevent redundant power re-negotiation
2760+
*/
2761+
case GET_STATUS_SEND:
2762+
tcpm_set_state(port, ready_state(port), 0);
2763+
break;
27572764
case SRC_READY:
27582765
case SNK_READY:
27592766
if (port->vdm_state > VDM_STATE_READY) {

0 commit comments

Comments
 (0)