diff options
author | Denis Brockus <dbrockus@google.com> | 2021-03-02 12:04:03 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-03-02 23:44:21 +0000 |
commit | 37ba1a68353bcc32520f82286c30647188558350 (patch) | |
tree | 7ec54497310c9708af434f4c3fe7bc0ce4fd0917 /common/usbc | |
parent | b5ea1e1f5d38eff3eae49ebf233324a546870a65 (diff) | |
download | chrome-ec-37ba1a68353bcc32520f82286c30647188558350.tar.gz |
TCPMv2: PD Timers - Allow StateMachine timer group range disables
BUG=none
BRANCH=none
TEST=normal USB-C operation
Signed-off-by: Denis Brockus <dbrockus@google.com>
Change-Id: I9c5bc90cc68ba424ad7632c10ba513103288b414
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2729620
Commit-Queue: Denis Brockus <dbrockus@chromium.org>
Tested-by: Denis Brockus <dbrockus@chromium.org>
Reviewed-by: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'common/usbc')
-rw-r--r-- | common/usbc/usb_pd_timer.c | 26 | ||||
-rw-r--r-- | common/usbc/usb_pe_drp_sm.c | 5 | ||||
-rw-r--r-- | common/usbc/usb_prl_sm.c | 2 |
3 files changed, 29 insertions, 4 deletions
diff --git a/common/usbc/usb_pd_timer.c b/common/usbc/usb_pd_timer.c index e06de20389..67a574904f 100644 --- a/common/usbc/usb_pd_timer.c +++ b/common/usbc/usb_pd_timer.c @@ -151,6 +151,32 @@ void pd_timer_disable(int port, enum pd_task_timer timer) PD_SET_DISABLED(port, mask); } +void pd_timer_disable_range(int port, enum pd_timer_range range) +{ + int start, end; + enum pd_task_timer timer; + + switch (range) { + case PE_TIMER_RANGE: + start = PE_TIMER_START; + end = PE_TIMER_END; + break; + case PR_TIMER_RANGE: + start = PR_TIMER_START; + end = PR_TIMER_END; + break; + case TC_TIMER_RANGE: + start = TC_TIMER_START; + end = TC_TIMER_END; + break; + default: + return; + } + + for (timer = start; timer <= end; ++timer) + pd_timer_disable(port, timer); +} + bool pd_timer_is_disabled(int port, enum pd_task_timer timer) { uint32_t mask = 1 << timer; diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c index ff42152a2b..b883351d84 100644 --- a/common/usbc/usb_pe_drp_sm.c +++ b/common/usbc/usb_pe_drp_sm.c @@ -739,10 +739,7 @@ static void pe_init(int port) pe[port].flags = 0; pe[port].dpm_request = 0; pe[port].dpm_curr_request = 0; - pd_timer_disable(port, PE_TIMER_NO_RESPONSE); - pd_timer_disable(port, PE_TIMER_SINK_REQUEST); - pd_timer_disable(port, PE_TIMER_SOURCE_CAP); - pd_timer_disable(port, PE_TIMER_WAIT_AND_ADD_JITTER); + pd_timer_disable_range(port, PE_TIMER_RANGE); pe[port].data_role = pd_get_data_role(port); pe[port].tx_type = TCPC_TX_INVALID; pe[port].events = 0; diff --git a/common/usbc/usb_prl_sm.c b/common/usbc/usb_prl_sm.c index 9c9292b256..b27c1d4f2a 100644 --- a/common/usbc/usb_prl_sm.c +++ b/common/usbc/usb_prl_sm.c @@ -566,6 +566,8 @@ static void prl_init(int port) prl_tx[port].msg_id_counter[i] = 0; } + pd_timer_disable_range(port, PR_TIMER_RANGE); + /* Clear state machines and set initial states */ prl_tx[port].ctx = cleared; set_state_prl_tx(port, PRL_TX_PHY_LAYER_RESET); |