summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Collyer <scollyer@google.com>2021-03-31 11:33:43 -0700
committerCommit Bot <commit-bot@chromium.org>2021-04-21 17:59:14 +0000
commitdec4d9ddfd30a978b0ddb2fe95d68f00b61e31ee (patch)
treef4598399f2b7018d279369c48f0bc2384074ea3c
parentf79ac11c5d3e0b79f1012eaf97d201706ec80c23 (diff)
downloadchrome-ec-factory-13929.B-main.tar.gz
TCPMv2: PE: Clear PRS request following acceptfactory-13929.B-main
This CL adds logic to clear any pending DPM_REQUEST_PR_SWAP once we accept a PRS request from the port partner. This prevents a possible back to back swap if we want to PRS, but the port partner sends the request before PRS swap request is generated. BUG=b:182441965 BRANCH=quiche TEST=tested quiche with kohaku where quiche attaches in sink role. This case causes quiche to want to power role swap and causes the port partner to request a power role swap. Verified that only 1 power role swap occurs. Signed-off-by: Scott Collyer <scollyer@google.com> Change-Id: I05ee27897d5900e71257d268acd3bd37c8abb787 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2799450 Tested-by: Scott Collyer <scollyer@chromium.org> Reviewed-by: Diana Z <dzigterman@chromium.org> Commit-Queue: Scott Collyer <scollyer@chromium.org>
-rw-r--r--common/usbc/usb_pe_drp_sm.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c
index 2dc4649fe3..75e78039a8 100644
--- a/common/usbc/usb_pe_drp_sm.c
+++ b/common/usbc/usb_pe_drp_sm.c
@@ -4315,6 +4315,12 @@ static void pe_prs_src_snk_evaluate_swap_run(int port)
PE_CLR_FLAG(port, PE_FLAGS_ACCEPT);
/*
+ * Clear any pending DPM power role swap request so we
+ * don't trigger a power role swap request back to src
+ * power role.
+ */
+ PE_CLR_DPM_REQUEST(port, DPM_REQUEST_PR_SWAP);
+ /*
* Power Role Swap OK, transition to
* PE_PRS_SRC_SNK_Transition_to_off
*/
@@ -4558,6 +4564,12 @@ static void pe_prs_snk_src_evaluate_swap_run(int port)
PE_CLR_FLAG(port, PE_FLAGS_ACCEPT);
/*
+ * Clear any pending DPM power role swap request so we
+ * don't trigger a power role swap request back to sink
+ * power role.
+ */
+ PE_CLR_DPM_REQUEST(port, DPM_REQUEST_PR_SWAP);
+ /*
* Accept message sent, transition to
* PE_PRS_SNK_SRC_Transition_to_off
*/