summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2017-10-13 08:24:12 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2017-10-30 17:04:43 +0000
commitde068bff83a77ba2977f34a589e99dd3e07614fd (patch)
treeeb2d90f4a80c83767f1a792e3deb47855b20566e
parent0e5abb63f262e51a771a54f1b53cc896e4bd9433 (diff)
downloadchrome-ec-de068bff83a77ba2977f34a589e99dd3e07614fd.tar.gz
tcpc: Don't retry sending of source caps
TCPM will retry sending of source caps on failure and retrying in TCPC will cause us to violate PD_T_SEND_SOURCE_CAP. BUG=None TEST=Attach servo_v4 to twinkie, verify source caps are sent in ~100ms intervals and not in bursts of four. BRANCH=servo_v4 Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Change-Id: I3264e5578afbde7b9d2c003b6744974329a253d4 Reviewed-on: https://chromium-review.googlesource.com/719729 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Vincent Palatin <vpalatin@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/739992
-rw-r--r--common/usb_pd_tcpc.c4
-rw-r--r--test/usb_pd.c5
2 files changed, 8 insertions, 1 deletions
diff --git a/common/usb_pd_tcpc.c b/common/usb_pd_tcpc.c
index a8a4c94e67..8ac51f63e2 100644
--- a/common/usb_pd_tcpc.c
+++ b/common/usb_pd_tcpc.c
@@ -362,9 +362,11 @@ static int send_validate_message(int port, uint16_t header,
static uint32_t payload[7];
uint8_t expected_msg_id = PD_HEADER_ID(header);
uint8_t cnt = PD_HEADER_CNT(header);
+ int retries = PD_HEADER_TYPE(header) == PD_DATA_SOURCE_CAP ?
+ 0 : PD_RETRY_COUNT;
/* retry 3 times if we are not getting a valid answer */
- for (r = 0; r <= PD_RETRY_COUNT; r++) {
+ for (r = 0; r <= retries; r++) {
int bit_len, head;
/* write the encoded packet in the transmission buffer */
bit_len = prepare_message(port, header, cnt, data);
diff --git a/test/usb_pd.c b/test/usb_pd.c
index ea68c66599..3368484a24 100644
--- a/test/usb_pd.c
+++ b/test/usb_pd.c
@@ -212,8 +212,13 @@ static int test_sink(void)
TEST_ASSERT(pd_test_tx_msg_verify_crc(1));
TEST_ASSERT(pd_test_tx_msg_verify_eop(1));
+ /* Wake from pd_start_tx */
+ task_wake(PD_PORT_TO_TASK_ID(1));
+ usleep(30 * MSEC);
+
/* Looks good. Ack the source cap. */
simulate_goodcrc(1, PD_ROLE_SINK, pd_port[1].msg_tx_id);
+ /* Wake from pd_rx_start */
task_wake(PD_PORT_TO_TASK_ID(1));
usleep(30 * MSEC);
inc_tx_id(1);