diff options
author | Sam Hurst <shurst@google.com> | 2021-03-18 11:58:43 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-04-09 15:42:15 +0000 |
commit | 11c2b94e9a70d958a3d9c336fc870596faf75b1e (patch) | |
tree | e988d4b74ca76c376722b3241b7c224c16577a54 /common/usbc/usb_pe_drp_sm.c | |
parent | f2320bb56febd84a86c3acfe748096c397959c61 (diff) | |
download | chrome-ec-11c2b94e9a70d958a3d9c336fc870596faf75b1e.tar.gz |
TCPMV2: Default PD Policy Management
A simple implementation to manage PD Policies
on honeybun devices. This is meant as an
interim solution until a more robust solution
is implemented
BUG=b:183026242
BRANCH=none
TEST=make runtests
Tested on Voxel by plugging in a dock
Signed-off-by: Sam Hurst <shurst@google.com>
Change-Id: Ib8b38754e21b8497fe28855a7f80d2962a4ae7f4
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2774128
Reviewed-by: Yuval Peress <peress@chromium.org>
Reviewed-by: Diana Z <dzigterman@chromium.org>
Commit-Queue: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'common/usbc/usb_pe_drp_sm.c')
-rw-r--r-- | common/usbc/usb_pe_drp_sm.c | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c index b91101dcdf..698f905bef 100644 --- a/common/usbc/usb_pe_drp_sm.c +++ b/common/usbc/usb_pe_drp_sm.c @@ -23,6 +23,7 @@ #include "usb_dp_alt_mode.h" #include "usb_mode.h" #include "usb_pd_dpm.h" +#include "usb_pd_policy.h" #include "usb_pd.h" #include "usb_pd_tcpm.h" #include "usb_pd_timer.h" @@ -1806,29 +1807,23 @@ __maybe_unused static bool pe_attempt_port_discovery(int port) if (PE_CHK_FLAG(port, PE_FLAGS_VDM_SETUP_DONE)) return false; - /* - * TODO: POLICY decision: move policy functionality out to a separate - * file. For now, try once to become DFP/Vconn source - */ - if (PE_CHK_FLAG(port, PE_FLAGS_DR_SWAP_TO_DFP)) { + /* Apply Port Discovery DR Swap Policy */ + if (port_discovery_dr_swap_policy(port, pe[port].data_role, + PE_CHK_FLAG(port, PE_FLAGS_DR_SWAP_TO_DFP))) { + PE_SET_FLAG(port, PE_FLAGS_LOCALLY_INITIATED_AMS); PE_CLR_FLAG(port, PE_FLAGS_DR_SWAP_TO_DFP); - - if (pe[port].data_role == PD_ROLE_UFP) { - PE_SET_FLAG(port, PE_FLAGS_LOCALLY_INITIATED_AMS); - set_state_pe(port, PE_DRS_SEND_SWAP); - return true; - } + set_state_pe(port, PE_DRS_SEND_SWAP); + return true; } + /* Apply Port Discovery VCONN Swap Policy */ if (IS_ENABLED(CONFIG_USBC_VCONN) && - PE_CHK_FLAG(port, PE_FLAGS_VCONN_SWAP_TO_ON)) { + port_discovery_vconn_swap_policy(port, + PE_CHK_FLAG(port, PE_FLAGS_VCONN_SWAP_TO_ON))) { + PE_SET_FLAG(port, PE_FLAGS_LOCALLY_INITIATED_AMS); PE_CLR_FLAG(port, PE_FLAGS_VCONN_SWAP_TO_ON); - - if (!tc_is_vconn_src(port)) { - PE_SET_FLAG(port, PE_FLAGS_LOCALLY_INITIATED_AMS); - set_state_pe(port, PE_VCS_SEND_SWAP); - return true; - } + set_state_pe(port, PE_VCS_SEND_SWAP); + return true; } /* If mode entry was successful, disable the timer */ |