diff options
author | Jett Rink <jettrink@chromium.org> | 2019-09-04 09:58:03 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-09-05 23:10:18 +0000 |
commit | ad2887717164edd1a6b296117a239957f8d48c5e (patch) | |
tree | a48d1350ce6a08933121569d04b0328f93e21595 /common/usbc/usb_pe_ctvpd_sm.c | |
parent | df7ecbc55f4b7d67174a14db9dc781789f07ac60 (diff) | |
download | chrome-ec-ad2887717164edd1a6b296117a239957f8d48c5e.tar.gz |
usb: clean up statemachine pausing
Remove recursive call for resuming after a pause. Reset the state
machine by zero'ing out the statemachine context instead of existing the
more recent state (which can have other unintended consequences)
BRANCH=none
BUG=none
TEST=builds, pass units tests
Change-Id: I107ad6cf158b84fe201cc80a51ee11f8784e9b24
Signed-off-by: Jett Rink <jettrink@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1783531
Commit-Queue: Denis Brockus <dbrockus@chromium.org>
Reviewed-by: Denis Brockus <dbrockus@chromium.org>
Diffstat (limited to 'common/usbc/usb_pe_ctvpd_sm.c')
-rw-r--r-- | common/usbc/usb_pe_ctvpd_sm.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/common/usbc/usb_pe_ctvpd_sm.c b/common/usbc/usb_pe_ctvpd_sm.c index 90e22fb78c..f7db231907 100644 --- a/common/usbc/usb_pe_ctvpd_sm.c +++ b/common/usbc/usb_pe_ctvpd_sm.c @@ -46,7 +46,10 @@ static void set_state_pe(const int port, enum usb_pe_state new_state) void pe_init(int port) { + const struct sm_ctx cleared = {}; + pe[port].flags = 0; + pe[port].ctx = cleared; set_state_pe(port, PE_REQUEST); } @@ -55,26 +58,19 @@ void pe_run(int port, int evt, int en) static enum sm_local_state local_state[CONFIG_USB_PD_PORT_COUNT]; switch (local_state[port]) { + case SM_PAUSED: + if (!en) + break; + /* fall through */ case SM_INIT: pe_init(port); local_state[port] = SM_RUN; /* fall through */ case SM_RUN: - if (!en) { - /* Exit all states and pause state machine. */ - set_state(port, &pe[port].ctx, NULL); + if (en) + exe_state(port, &pe[port].ctx); + else local_state[port] = SM_PAUSED; - break; - } - - exe_state(port, &pe[port].ctx); - break; - case SM_PAUSED: - if (en) { - /* Restart state machine right now. */ - local_state[port] = SM_INIT; - pe_run(port, evt, en); - } break; } } |