diff options
author | Puthikorn Voravootivat <puthik@chromium.org> | 2014-08-19 14:21:47 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-08-20 22:42:11 +0000 |
commit | 1b52de3e3c73886784ea1216b34305919449bd24 (patch) | |
tree | 8f56f1ae2348f77f71e937ca5f075ce86c10b442 /chip/stm32/i2c-stm32f0.c | |
parent | 5641bbfe3bd7c776b35320730be681e6b5626748 (diff) | |
download | chrome-ec-1b52de3e3c73886784ea1216b34305919449bd24.tar.gz |
stfm32f0: Send 0xec over i2c until get NAK from host.
Host i2c driver in ryu does not allow to snoop the byte
stream to abort the transaction. This make host i2c
driver to be in the dead state if the response message from
ec is shorter than host expected length.
This patch will make ec to send 0xec after end of response
message until get the 'NAK' answer from host to fixed this
issue which occur in these 2 situations.
1. When ec encounters host command error.
2. When response message is a null terminated string.
BUG=chrome-os-partner:31367
TEST='ectool version' runs fine on ryu
BRANCH=none
Change-Id: Icad0f0fde6cca4abd9c833c6d179143e4c5c0561
Signed-off-by: Puthikorn Voravootivat <puthik@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/213177
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Reviewed-by: Alec Berg <alecaberg@chromium.org>
Diffstat (limited to 'chip/stm32/i2c-stm32f0.c')
-rw-r--r-- | chip/stm32/i2c-stm32f0.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/chip/stm32/i2c-stm32f0.c b/chip/stm32/i2c-stm32f0.c index 11dd4c7ba4..c6cfa9e156 100644 --- a/chip/stm32/i2c-stm32f0.c +++ b/chip/stm32/i2c-stm32f0.c @@ -155,12 +155,11 @@ static void i2c_send_response_packet(struct host_packet *pkt) } /* - * If an error occurred. Set the transmitter not full so as to keep - * sending '0xec' in the event loop. That way the master doesn't have - * to snoop the response stream. + * Set the transmitter to be in 'not full' state to keep sending + * '0xec' in the event loop. Because of this, the master i2c + * doesn't need to snoop the response stream to abort transaction. */ - if (pkt->driver_result != EC_RES_SUCCESS) - STM32_I2C_CR1(host_i2c_resp_port) |= STM32_I2C_CR1_TXIE; + STM32_I2C_CR1(host_i2c_resp_port) |= STM32_I2C_CR1_TXIE; } /* Process the command in the i2c host buffer */ |