summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYilun Lin <yllin@chromium.org>2019-08-26 17:09:53 +0800
committerCommit Bot <commit-bot@chromium.org>2019-09-10 10:47:13 +0000
commitff1cf395c685a9bd9455224051ae5be241dc898a (patch)
tree0f060a8d4e3ed810e0db8f4b747f9b40d160ccef
parent4a893513f58bc01fa5daeab1e9243dd83a4099e6 (diff)
downloadchrome-ec-ff1cf395c685a9bd9455224051ae5be241dc898a.tar.gz
tcpm: Hold tPSHardReset after receiving hard reset from sink device
USB-PD3.0 ver1.2 "7.3.13 Sink Initiated Hard Reset" Policy Engine should wait tPSHardReset after receiving Hard Reset. TEST=Pass the USB-PD Compliance Test TDA.2.3.1.1: POW-SRC-LOAD-P-PC TDA.2.3.1.2: POW-SRC-LOAD-CP-ACC BUG=b:139914412 BRANCH=none Change-Id: I2595d9f8618de7ec85e834195d77cd9928d198f6 Signed-off-by: Yilun Lin <yllin@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1770331 Reviewed-by: Jett Rink <jettrink@chromium.org>
-rw-r--r--common/usb_pd_protocol.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c
index 123fbaa475..a5423748f0 100644
--- a/common/usb_pd_protocol.c
+++ b/common/usb_pd_protocol.c
@@ -1369,10 +1369,9 @@ static void pd_set_vconn_role(int port, int role)
void pd_execute_hard_reset(int port)
{
- if (pd[port].last_state == PD_STATE_HARD_RESET_SEND)
- CPRINTF("C%d HARD RST TX\n", port);
- else
- CPRINTF("C%d HARD RST RX\n", port);
+ int hard_rst_tx = pd[port].last_state == PD_STATE_HARD_RESET_SEND;
+
+ CPRINTF("C%d HARD RST %cX\n", port, hard_rst_tx ? 'T' : 'R');
pd[port].msg_id = 0;
invalidate_last_message_id(port);
@@ -1428,6 +1427,9 @@ void pd_execute_hard_reset(int port)
}
#endif /* CONFIG_USB_PD_DUAL_ROLE */
+ if (!hard_rst_tx)
+ usleep(PD_T_PS_HARD_RESET);
+
/* We are a source, cut power */
pd_power_supply_reset(port);
pd[port].src_recover = get_time().val + PD_T_SRC_RECOVER;