summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2020-04-27 15:05:30 -0600
committerCommit Bot <commit-bot@chromium.org>2020-04-28 06:04:42 +0000
commit156d34f4a27750a512f78894068cdd82a950192b (patch)
tree4d50739796862b8f6c4cc067c6b80bf557ff52b2
parent095c317197113838f90e815884fe26eae7818dfa (diff)
downloadchrome-ec-156d34f4a27750a512f78894068cdd82a950192b.tar.gz
TCPMv2: Return after set_state in READY states
Best practice is to return after setting state. Otherwise, we may end up setting state again in the run function and causing issues. BRANCH=None BUG=b:155087579,b:153866585 TEST=on kindred with TCPMv2, we don't go into discovery after receiving a Vconn swap request Signed-off-by: Diana Z <dzigterman@chromium.org> Change-Id: Ic4bc647f89d5aa1450230eb1fa212c86a524c0d6 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2168577 Reviewed-by: Jett Rink <jettrink@chromium.org>
-rw-r--r--common/usbc/usb_pe_drp_sm.c38
1 files changed, 23 insertions, 15 deletions
diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c
index 49d0084b90..b13cad2eab 100644
--- a/common/usbc/usb_pe_drp_sm.c
+++ b/common/usbc/usb_pe_drp_sm.c
@@ -1731,13 +1731,14 @@ static void pe_src_ready_run(int port)
default:
set_state_pe(port, PE_SEND_NOT_SUPPORTED);
}
+ return;
}
/* Data Message Requests */
else if (cnt > 0) {
switch (type) {
case PD_DATA_REQUEST:
set_state_pe(port, PE_SRC_NEGOTIATE_CAPABILITY);
- break;
+ return;
case PD_DATA_SINK_CAP:
break;
case PD_DATA_VENDOR_DEF:
@@ -1750,12 +1751,13 @@ static void pe_src_ready_run(int port)
set_state_pe(port,
PE_HANDLE_CUSTOM_VDM_REQUEST);
}
- break;
+ return;
case PD_DATA_BIST:
set_state_pe(port, PE_BIST_TX);
- break;
+ return;
default:
set_state_pe(port, PE_SEND_NOT_SUPPORTED);
+ return;
}
}
/* Control Message Requests */
@@ -1769,16 +1771,16 @@ static void pe_src_ready_run(int port)
break;
case PD_CTRL_GET_SOURCE_CAP:
set_state_pe(port, PE_SRC_SEND_CAPABILITIES);
- break;
+ return;
case PD_CTRL_GET_SINK_CAP:
set_state_pe(port, PE_SNK_GIVE_SINK_CAP);
- break;
+ return;
case PD_CTRL_GOTO_MIN:
break;
case PD_CTRL_PR_SWAP:
set_state_pe(port,
PE_PRS_SRC_SNK_EVALUATE_SWAP);
- break;
+ return;
case PD_CTRL_DR_SWAP:
if (PE_CHK_FLAG(port,
PE_FLAGS_MODAL_OPERATION)) {
@@ -1787,17 +1789,19 @@ static void pe_src_ready_run(int port)
}
set_state_pe(port, PE_DRS_EVALUATE_SWAP);
- break;
+ return;
case PD_CTRL_VCONN_SWAP:
set_state_pe(port, PE_VCS_EVALUATE_SWAP);
- break;
+ return;
default:
set_state_pe(port, PE_SEND_NOT_SUPPORTED);
+ return;
}
}
} else if (PE_CHK_FLAG(port, PE_FLAGS_DISCOVER_PORT_CONTINUE)) {
PE_CLR_FLAG(port, PE_FLAGS_DISCOVER_PORT_CONTINUE);
set_state_pe(port, PE_VDM_REQUEST);
+ return;
}
if (pe[port].wait_and_add_jitter_timer == TIMER_DISABLED ||
@@ -2484,6 +2488,7 @@ static void pe_snk_ready_run(int port)
default:
set_state_pe(port, PE_SEND_NOT_SUPPORTED);
}
+ return;
}
/* Data Messages */
else if (cnt > 0) {
@@ -2509,6 +2514,7 @@ static void pe_snk_ready_run(int port)
default:
set_state_pe(port, PE_SEND_NOT_SUPPORTED);
}
+ return;
}
/* Control Messages */
else {
@@ -2517,41 +2523,43 @@ static void pe_snk_ready_run(int port)
/* Do nothing */
break;
case PD_CTRL_PING:
- /* Do noghing */
+ /* Do nothing */
break;
case PD_CTRL_GET_SOURCE_CAP:
set_state_pe(port, PE_SNK_GET_SOURCE_CAP);
- break;
+ return;
case PD_CTRL_GET_SINK_CAP:
set_state_pe(port, PE_SNK_GIVE_SINK_CAP);
- break;
+ return;
case PD_CTRL_GOTO_MIN:
set_state_pe(port, PE_SNK_TRANSITION_SINK);
- break;
+ return;
case PD_CTRL_PR_SWAP:
set_state_pe(port,
PE_PRS_SNK_SRC_EVALUATE_SWAP);
- break;
+ return;
case PD_CTRL_DR_SWAP:
if (PE_CHK_FLAG(port, PE_FLAGS_MODAL_OPERATION))
set_state_pe(port, PE_SNK_HARD_RESET);
else
set_state_pe(port,
PE_DRS_EVALUATE_SWAP);
- break;
+ return;
case PD_CTRL_VCONN_SWAP:
set_state_pe(port, PE_VCS_EVALUATE_SWAP);
- break;
+ return;
case PD_CTRL_NOT_SUPPORTED:
/* Do nothing */
break;
default:
set_state_pe(port, PE_SEND_NOT_SUPPORTED);
+ return;
}
}
} else if (PE_CHK_FLAG(port, PE_FLAGS_DISCOVER_PORT_CONTINUE)) {
PE_CLR_FLAG(port, PE_FLAGS_DISCOVER_PORT_CONTINUE);
set_state_pe(port, PE_VDM_REQUEST);
+ return;
}
if (pe[port].wait_and_add_jitter_timer == TIMER_DISABLED ||