summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlec Berg <alecaberg@chromium.org>2015-01-10 12:03:17 -0800
committerAlec Berg <alecaberg@chromium.org>2015-01-10 23:45:06 +0000
commitcf8f65d34af0aff42e66bd395a74adf2874bd200 (patch)
treee1ae510622acc8c6b4c160dbe27ddb86391aa1b1
parent7f0664777333dc72c3efa4c487f63531964cc4b9 (diff)
downloadchrome-ec-cf8f65d34af0aff42e66bd395a74adf2874bd200.tar.gz
pd: make VDO responses faster
Allow VDO responses to be sent faster by taking out the check for incoming packet when a VDO is pending. This check isn't needed because we already check if the PD state machine is busy sending something. With this change, the turn around time for responding to Discover Identity on zinger is ~200us. BUG=chrome-os-partner:35327 BRANCH=samus TEST=loaded onto zinger and used twinkie to verify that discover identity is responded to in ~200us every time. used ectool to perform remote update on zinger, now takes ~18s (compared to ~55s). Also, used following bash loop to constantly sent PD voltage requests: while true; do dut-control "usbpd_uart_cmd:pd 1 dev 5"; sleep 0.3; dut-control "usbpd_uart_cmd:pd 1 dev 20"; sleep 0.3; done Used bash loop while updating zinger via ectool. I programmed zinger ~50 times and verified: - we never missed a PD voltage request - never got any PD protocol or phy layer errors (no collisions) - zinger successfully jumped to RW after each (no packets missed) Note: sending any other PD traffic while programming zinger does obviously slow down zinger update (~30s with my bash loop above). Change-Id: I94d1ac01440d096671972fa9c21c149ea432863f Signed-off-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/240150 Reviewed-by: Todd Broch <tbroch@chromium.org> Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
-rw-r--r--common/usb_pd_protocol.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c
index cedf027094..72094f9912 100644
--- a/common/usb_pd_protocol.c
+++ b/common/usb_pd_protocol.c
@@ -1470,7 +1470,7 @@ static uint64_t vdm_get_ready_timeout(uint32_t vdm_hdr)
return timeout;
}
-static void pd_vdm_send_state_machine(int port, int incoming_packet)
+static void pd_vdm_send_state_machine(int port)
{
int res;
uint16_t header;
@@ -1487,7 +1487,7 @@ static void pd_vdm_send_state_machine(int port, int incoming_packet)
* if there's traffic or we're not in PDO ready state don't send
* a VDM.
*/
- if (incoming_packet || pdo_busy(port))
+ if (pdo_busy(port))
break;
/* Prepare and send VDM */
@@ -1723,7 +1723,7 @@ void pd_task(void)
while (1) {
/* process VDM messages last */
- pd_vdm_send_state_machine(port, incoming_packet);
+ pd_vdm_send_state_machine(port);
/* monitor for incoming packet if in a connected state */
if (pd_is_connected(port) && pd_comm_enabled)