summaryrefslogtreecommitdiff
path: root/common/usbc/usb_tc_drp_acc_trysrc_sm.c
diff options
context:
space:
mode:
authorAseda Aboagye <aaboagye@google.com>2021-11-18 16:17:51 -0600
committerAseda Aboagye <aaboagye@google.com>2021-11-18 16:17:51 -0600
commitc5bd23a4b204565dab616f7fa4ee8a0b7b433d4c (patch)
treee0c957fe0bc99144057c50b2bff004a1c9a1fe45 /common/usbc/usb_tc_drp_acc_trysrc_sm.c
parenteff51ca60572c33a4abf9390798de8e684d1469c (diff)
parent904255ef8d8c694fd21addc39ab3648178e5b354 (diff)
downloadchrome-ec-c5bd23a4b204565dab616f7fa4ee8a0b7b433d4c.tar.gz
Merge remote-tracking branch cros/main into firmware-keeby-14119.B-main
Relevant changes: git log --oneline eff51ca60..904255ef8 -- baseboard/dedede board/cappy2 board/corori board/driblee board/gooey board/haboki board/lalala board/waddledoo2 common/charge_state_v2.c common/mkbp_* common/ocpc.c common/usbc/usb_tc_drp_acc_trysrc_sm.c common/usbc/usb_sm.c common/usbc/*_pd_* common/usbc/dp_alt_mode.c common/usbc/usb_prl_sm.c common/usbc/usb_pe_drp_sm.c common/usb_charger.c common/usb_common.c common/usbc_ocp.c driver/charger/sm5803.* driver/charger/isl923x.* driver/tcpm/raa489000.* driver/tcpm/it83* include/power/icelake.h include/intel_x86.h power/icelake.c power/intel_x86.c util/getversion.sh 904255ef8 TCPMv2: Ensure modes are exited on hard reset BRANCH=None BUG=b:206745483 TEST=`make -j buildall` Signed-off-by: Aseda Aboagye <aaboagye@google.com> Change-Id: I70eff1ad825526634dc9fd5ed17ae4746b0d9636
Diffstat (limited to 'common/usbc/usb_tc_drp_acc_trysrc_sm.c')
-rw-r--r--common/usbc/usb_tc_drp_acc_trysrc_sm.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/common/usbc/usb_tc_drp_acc_trysrc_sm.c b/common/usbc/usb_tc_drp_acc_trysrc_sm.c
index b8e3fc712b..3fa9528699 100644
--- a/common/usbc/usb_tc_drp_acc_trysrc_sm.c
+++ b/common/usbc/usb_tc_drp_acc_trysrc_sm.c
@@ -700,9 +700,11 @@ __maybe_unused static void tc_enable_try_src(int en)
}
/*
- * Exit all modes due to a detach event
+ * Exit all modes due to a detach event or hard reset
+ *
* Note: this skips the ExitMode VDM steps in the PE because it is assumed the
- * partner is not present to receive them, and the PE will no longer be running.
+ * partner is not present to receive them, and the PE will no longer be running,
+ * or we've forced an abrupt mode exit through a hard reset.
*/
static void tc_set_modes_exit(int port)
{
@@ -1304,6 +1306,13 @@ static bool tc_perform_src_hard_reset(int port)
/* Set role to DFP */
tc_set_data_role(port, PD_ROLE_DFP);
+ /*
+ * USB PD Rev 3.0 Ver 2.0 6.8.3.2: "A Hard Reset Shall cause
+ * all Active Modes to be exited by both Port Partners and any
+ * Cable Plugs"
+ */
+ tc_set_modes_exit(port);
+
tc[port].ps_reset_state = PS_STATE1;
pd_timer_enable(port, TC_TIMER_TIMEOUT, PD_T_SRC_RECOVER);
return false;
@@ -1349,6 +1358,13 @@ static bool tc_perform_snk_hard_reset(int port)
tc_set_data_role(port, PD_ROLE_UFP);
/*
+ * USB PD Rev 3.0 Ver 2.0 6.8.3.2: "A Hard Reset Shall cause
+ * all Active Modes to be exited by both Port Partners and any
+ * Cable Plugs"
+ */
+ tc_set_modes_exit(port);
+
+ /*
* When VCONN is supported, the Hard Reset Shall cause
* the Port with the Rd resistor asserted to turn off
* VCONN.