pd: implement SenderResponseTimer on request messages

Add tSenderResponse timeout to waiting for response from a request
message. If timeout triggers, send hard reset.

BUG=chrome-os-partner:33687
BRANCH=samus
TEST=test with zinger that we can negotiate normally. then modify
zinger code to not send any response when it receives a request and
see that samus sends hard reset from PD_STATE_SNK_REQUESTED.

Signed-off-by: Alec Berg <alecaberg@chromium.org>
Change-Id: If147d809cfe185ec714e292a4814fbbfb50af04b
Reviewed-on: https://chromium-review.googlesource.com/230521
Reviewed-by: Todd Broch <tbroch@chromium.org>
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
This commit is contained in:
Alec Berg
2014-11-18 10:52:03 -08:00
committed by chrome-internal-fetch
parent eb936b8df8
commit 673255588b

View File

@@ -1653,7 +1653,11 @@ void pd_task(void)
break;
case PD_STATE_SRC_NEGOCIATE:
/* wait for a "Request" message */
timeout = 500*MSEC;
if (pd[port].last_state != pd[port].task_state)
set_state_timeout(port,
get_time().val +
PD_T_SENDER_RESPONSE,
PD_STATE_HARD_RESET);
break;
case PD_STATE_SRC_ACCEPTED:
/* Accept sent, wait for enabling the new voltage */
@@ -1903,9 +1907,14 @@ void pd_task(void)
}
break;
case PD_STATE_SNK_REQUESTED:
/* Ensure the power supply actually becomes ready */
hard_reset_count = 0;
timeout = 10 * MSEC;
/* Wait for ACCEPT or REJECT */
if (pd[port].last_state != pd[port].task_state) {
hard_reset_count = 0;
set_state_timeout(port,
get_time().val +
PD_T_SENDER_RESPONSE,
PD_STATE_HARD_RESET);
}
break;
case PD_STATE_SNK_TRANSITION:
/* Wait for PS_RDY */