diff options
author | Scott Collyer <scollyer@google.com> | 2021-03-31 11:33:43 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-04-21 17:59:14 +0000 |
commit | dec4d9ddfd30a978b0ddb2fe95d68f00b61e31ee (patch) | |
tree | f4598399f2b7018d279369c48f0bc2384074ea3c /common/usbc/usb_pe_drp_sm.c | |
parent | f79ac11c5d3e0b79f1012eaf97d201706ec80c23 (diff) | |
download | chrome-ec-dec4d9ddfd30a978b0ddb2fe95d68f00b61e31ee.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>
Diffstat (limited to 'common/usbc/usb_pe_drp_sm.c')
-rw-r--r-- | common/usbc/usb_pe_drp_sm.c | 12 |
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 */ |