summaryrefslogtreecommitdiff
path: root/common/usbc/usb_pe_drp_sm.c
diff options
context:
space:
mode:
authorPatryk Duda <pdk@semihalf.com>2020-06-15 12:46:55 +0200
committerCommit Bot <commit-bot@chromium.org>2020-06-23 09:19:44 +0000
commit6ac3fe8e804516b12c5747e0aae728fcc3f79153 (patch)
tree62bb37ed7fd1c8baf5700b5d8c2fbf52085bdbdc /common/usbc/usb_pe_drp_sm.c
parentee588d44e253154dce00d03d74aa568dcadef90f (diff)
downloadchrome-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.c4
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;
}