diff options
author | Sam Hurst <shurst@google.com> | 2020-04-26 09:50:55 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-04-29 21:50:31 +0000 |
commit | fe253207e94a3033c44d126ec5ab5208f24efe47 (patch) | |
tree | fb92869ba21cecf52858914d1db241d25b0b46f5 | |
parent | 9abfcc7ced52511ce1c6d501a4b54014fa21f19e (diff) | |
download | chrome-ec-fe253207e94a3033c44d126ec5ab5208f24efe47.tar.gz |
TCPMv2: Signal to TC Layer that PR Swap is complete on state exit
Inform Type-C layer that Power Role Swap is complete on state
exit from pe_prs_src_snk_wait_source_on and pe_prs_snk_src_source_on
states. This gurantees that the Type-C layer exits power role swap
mode if the two PE states previously mentioned exit due to an error.
BUG=b:155011510
BRANCH=none
TEST=make -j buildall
manual: using a hatch, PD_FAFT passes
Change-Id: Ifd887006761332ed340b35163cf1a08ee1b4e4cf
Signed-off-by: Sam Hurst <shurst@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2167136
Reviewed-by: Jett Rink <jettrink@chromium.org>
-rw-r--r-- | common/usbc/usb_pe_drp_sm.c | 15 | ||||
-rw-r--r-- | common/usbc/usb_prl_sm.c | 2 |
2 files changed, 14 insertions, 3 deletions
diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c index c8a5011d47..c424f6d8a7 100644 --- a/common/usbc/usb_pe_drp_sm.c +++ b/common/usbc/usb_pe_drp_sm.c @@ -3358,8 +3358,8 @@ static void pe_prs_src_snk_wait_source_on_run(int port) ext = PD_HEADER_EXT(rx_emsg[port].header); if ((ext == 0) && (cnt == 0) && (type == PD_CTRL_PS_RDY)) { - tc_pr_swap_complete(port); pe[port].ps_source_timer = TIMER_DISABLED; + PE_SET_FLAG(port, PE_FLAGS_PR_SWAP_COMPLETE); set_state_pe(port, PE_SNK_STARTUP); return; @@ -3380,6 +3380,11 @@ static void pe_prs_src_snk_wait_source_on_run(int port) } } +static void pe_prs_src_snk_wait_source_on_exit(int port) +{ + tc_pr_swap_complete(port); +} + /** * PE_PRS_SRC_SNK_Send_Swap */ @@ -3606,11 +3611,15 @@ static void pe_prs_snk_src_source_on_run(int port) /* Run swap source timer on entry to pe_src_startup */ PE_SET_FLAG(port, PE_FLAGS_PR_SWAP_COMPLETE); - tc_pr_swap_complete(port); set_state_pe(port, PE_SRC_STARTUP); } } +static void pe_prs_snk_src_source_on_exit(int port) +{ + tc_pr_swap_complete(port); +} + /** * PE_PRS_SNK_SRC_Send_Swap * PE_FRS_SNK_SRC_Send_Swap @@ -5338,6 +5347,7 @@ static const struct usb_state pe_states[] = { [PE_PRS_SRC_SNK_WAIT_SOURCE_ON] = { .entry = pe_prs_src_snk_wait_source_on_entry, .run = pe_prs_src_snk_wait_source_on_run, + .exit = pe_prs_src_snk_wait_source_on_exit, }, [PE_PRS_SRC_SNK_SEND_SWAP] = { .entry = pe_prs_src_snk_send_swap_entry, @@ -5368,6 +5378,7 @@ static const struct usb_state pe_states[] = { [PE_PRS_SNK_SRC_SOURCE_ON] = { .entry = pe_prs_snk_src_source_on_entry, .run = pe_prs_snk_src_source_on_run, + .exit = pe_prs_snk_src_source_on_exit, .parent = &pe_states[PE_PRS_FRS_SHARED], }, /* State actions are shared with PE_FRS_SNK_SRC_SEND_SWAP */ diff --git a/common/usbc/usb_prl_sm.c b/common/usbc/usb_prl_sm.c index cdfc59e637..8b375abfab 100644 --- a/common/usbc/usb_prl_sm.c +++ b/common/usbc/usb_prl_sm.c @@ -1585,7 +1585,7 @@ static void prl_rx_wait_for_phy_message(const int port, int evt) if (cnt > CHK_BUF_SIZE) cnt = CHK_BUF_SIZE; - /* dump received packet content (only dump ping at debug level 3) */ + /* dump received packet content (only dump ping at debug level MAX) */ if ((prl_debug_level >= DEBUG_LEVEL_1 && type != PD_CTRL_PING) || prl_debug_level >= DEBUG_LEVEL_3) { int p; |