summaryrefslogtreecommitdiff
path: root/common/usbc/usb_pe_drp_sm.c
diff options
context:
space:
mode:
authorSam Hurst <shurst@google.com>2021-03-18 11:58:43 -0700
committerCommit Bot <commit-bot@chromium.org>2021-04-09 15:42:15 +0000
commit11c2b94e9a70d958a3d9c336fc870596faf75b1e (patch)
treee988d4b74ca76c376722b3241b7c224c16577a54 /common/usbc/usb_pe_drp_sm.c
parentf2320bb56febd84a86c3acfe748096c397959c61 (diff)
downloadchrome-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.c31
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 */