diff options
author | Yilun Lin <yllin@chromium.org> | 2019-08-26 17:09:53 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-09-10 10:47:13 +0000 |
commit | ff1cf395c685a9bd9455224051ae5be241dc898a (patch) | |
tree | 0f060a8d4e3ed810e0db8f4b747f9b40d160ccef /common/usb_pd_protocol.c | |
parent | 4a893513f58bc01fa5daeab1e9243dd83a4099e6 (diff) | |
download | chrome-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>
Diffstat (limited to 'common/usb_pd_protocol.c')
-rw-r--r-- | common/usb_pd_protocol.c | 10 |
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; |