summaryrefslogtreecommitdiff
path: root/common/usbc/usb_pe_drp_sm.c
diff options
context:
space:
mode:
authorDenis Brockus <dbrockus@google.com>2021-03-02 10:50:09 -0700
committerCommit Bot <commit-bot@chromium.org>2021-03-02 22:10:26 +0000
commit80ac785011bb593f51884e8ed9517739158e5c87 (patch)
tree4950aa05c979ac9e5a19086b3f2a681e57edbe5f /common/usbc/usb_pe_drp_sm.c
parenta1df9f9300d92446ad96eb6cdc32700c87a33b9b (diff)
downloadchrome-ec-80ac785011bb593f51884e8ed9517739158e5c87.tar.gz
TCPMv2: PE_TIMER_WAIT_AND_ADD_JITTER should not restart on partner initiated messages
BUG=b:181339670 BRANCH=none TEST=verify basic USB-C operation Signed-off-by: Denis Brockus <dbrockus@google.com> Change-Id: Ic126b9cc87e3d76ffd4fe369c9259e1c6fc2500f Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2729270 Tested-by: Denis Brockus <dbrockus@chromium.org> Reviewed-by: Diana Z <dzigterman@chromium.org> Commit-Queue: Denis Brockus <dbrockus@chromium.org>
Diffstat (limited to 'common/usbc/usb_pe_drp_sm.c')
-rw-r--r--common/usbc/usb_pe_drp_sm.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c
index 34013c8c0d..4f7044b7ec 100644
--- a/common/usbc/usb_pe_drp_sm.c
+++ b/common/usbc/usb_pe_drp_sm.c
@@ -741,6 +741,7 @@ static void pe_init(int port)
pe[port].dpm_curr_request = 0;
pd_timer_disable(port, PE_TIMER_NO_RESPONSE);
pd_timer_disable(port, PE_TIMER_SOURCE_CAP);
+ pd_timer_disable(port, PE_TIMER_WAIT_AND_ADD_JITTER);
pe[port].data_role = pd_get_data_role(port);
pe[port].tx_type = TCPC_TX_INVALID;
pe[port].events = 0;
@@ -1920,7 +1921,8 @@ static void pe_update_wait_and_add_jitter_timer(int port)
* ~345ms to prevent multiple collisions.
*/
if (prl_get_rev(port, TCPC_TX_SOP) == PD_REV20 &&
- PE_CHK_FLAG(port, PE_FLAGS_FIRST_MSG)) {
+ PE_CHK_FLAG(port, PE_FLAGS_FIRST_MSG) &&
+ pd_timer_is_disabled(port, PE_TIMER_WAIT_AND_ADD_JITTER)) {
pd_timer_enable(port, PE_TIMER_WAIT_AND_ADD_JITTER,
SRC_SNK_READY_HOLD_OFF_US +
(get_time().le.lo & 0xf) * 23 * MSEC);
@@ -2431,8 +2433,11 @@ static void pe_src_transition_supply_run(int port)
* jitter delay when operating in PD2.0 mode. Skip
* if we already have a contract.
*/
- if (!pe_is_explicit_contract(port))
+ if (!pe_is_explicit_contract(port)) {
PE_SET_FLAG(port, PE_FLAGS_FIRST_MSG);
+ pd_timer_disable(port,
+ PE_TIMER_WAIT_AND_ADD_JITTER);
+ }
/* NOTE: Second pass through this code block */
/* Explicit Contract is now in place */
@@ -2683,11 +2688,6 @@ static void pe_src_ready_run(int port)
}
}
-static void pe_src_ready_exit(int port)
-{
- pd_timer_disable(port, PE_TIMER_WAIT_AND_ADD_JITTER);
-}
-
/**
* PE_SRC_Disabled
*/
@@ -3230,6 +3230,7 @@ static void pe_snk_transition_sink_run(int port)
* jitter delay when operating in PD2.0 mode.
*/
PE_SET_FLAG(port, PE_FLAGS_FIRST_MSG);
+ pd_timer_disable(port, PE_TIMER_WAIT_AND_ADD_JITTER);
/*
* If we've successfully completed our new power
@@ -3485,7 +3486,6 @@ static void pe_snk_ready_run(int port)
static void pe_snk_ready_exit(int port)
{
pd_timer_disable(port, PE_TIMER_SINK_REQUEST);
- pd_timer_disable(port, PE_TIMER_WAIT_AND_ADD_JITTER);
}
/**
@@ -6848,7 +6848,6 @@ static __const_data const struct usb_state pe_states[] = {
[PE_SRC_READY] = {
.entry = pe_src_ready_entry,
.run = pe_src_ready_run,
- .exit = pe_src_ready_exit,
},
[PE_SRC_DISABLED] = {
.entry = pe_src_disabled_entry,