diff options
author | Patryk Duda <pdk@semihalf.com> | 2020-06-15 12:46:55 +0200 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-06-23 09:19:44 +0000 |
commit | 6ac3fe8e804516b12c5747e0aae728fcc3f79153 (patch) | |
tree | 62bb37ed7fd1c8baf5700b5d8c2fbf52085bdbdc /common/usbc/usb_pe_drp_sm.c | |
parent | ee588d44e253154dce00d03d74aa568dcadef90f (diff) | |
download | chrome-ec-6ac3fe8e804516b12c5747e0aae728fcc3f79153.tar.gz |
TCPMv2: Do not reset negotiated PD revision level during soft reset
PD3.0 6.2.1.1.5 Specification Revision clearly states that negotiated
Specification Revision level should be used until Detach, Hard Reset
or Error Recovery happens.
Current implementation of soft reset performs full reinitialization of
PRL state machines, flags, counters including negotiated Specification
Revision level. As a result when sending PD_CTRL_SOFT_RESET DUT was
waiting for SinkTxOk, but it was never observed because ServoV4 was
running PD2.0 stack.
This issue was fixed by separating parts of SM_INIT state which
shouldn't be reset during soft reset.
BUG=b:158996004
BRANCH=none
TEST=Flash nocturne with firmware which contains fix.
Make sure ServoV4 runs PD2.0 revision.
Run firmware_PDResetSoft test, make sure that hard reset doesn't occur.
Signed-off-by: Patryk Duda <pdk@semihalf.com>
Change-Id: I852817a63772dbc8baab74ff6b0c425228b2f49b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2246020
Reviewed-by: Jett Rink <jettrink@chromium.org>
Diffstat (limited to 'common/usbc/usb_pe_drp_sm.c')
-rw-r--r-- | common/usbc/usb_pe_drp_sm.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c index 16a8dc48b7..3133a09864 100644 --- a/common/usbc/usb_pe_drp_sm.c +++ b/common/usbc/usb_pe_drp_sm.c @@ -2958,8 +2958,8 @@ static void pe_send_soft_reset_entry(int port) { print_current_state(port); - /* Reset Protocol Layer */ - prl_reset(port); + /* Reset Protocol Layer (softly) */ + prl_reset_soft(port); pe[port].sender_response_timer = TIMER_DISABLED; } |