[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/13] libqos: fix omap-i2c receiving more than 4 by
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 04/13] libqos: fix omap-i2c receiving more than 4 bytes |
Date: |
Mon, 18 Mar 2019 18:15:12 +0100 |
If more than 4 bytes are received, the FIFO cannot host the entire
contents of the transfer and STP will be nonzero before entering
the transfer loop. Also, CNT will contain the number of bytes
left to be transferred instead of the total number of bytes in
the transfer.
(Reverse engineered from the omap_i2c.c source code; no available
datasheet).
This will fix ds1338-test for omap-i2c.
Signed-off-by: Paolo Bonzini <address@hidden>
---
tests/libqos/i2c-omap.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/tests/libqos/i2c-omap.c b/tests/libqos/i2c-omap.c
index 1ef6e7b200..bb65336832 100644
--- a/tests/libqos/i2c-omap.c
+++ b/tests/libqos/i2c-omap.c
@@ -105,6 +105,7 @@ static void omap_i2c_recv(I2CAdapter *i2c, uint8_t addr,
{
OMAPI2C *s = (OMAPI2C *)i2c;
uint16_t data, stat;
+ uint16_t orig_len = len;
omap_i2c_set_slave_addr(s, addr);
@@ -116,16 +117,24 @@ static void omap_i2c_recv(I2CAdapter *i2c, uint8_t addr,
OMAP_I2C_CON_STT |
OMAP_I2C_CON_STP;
qtest_writew(i2c->qts, s->addr + OMAP_I2C_CON, data);
- data = qtest_readw(i2c->qts, s->addr + OMAP_I2C_CON);
- g_assert((data & OMAP_I2C_CON_STP) == 0);
data = qtest_readw(i2c->qts, s->addr + OMAP_I2C_STAT);
g_assert((data & OMAP_I2C_STAT_NACK) == 0);
- data = qtest_readw(i2c->qts, s->addr + OMAP_I2C_CNT);
- g_assert_cmpuint(data, ==, len);
-
while (len > 0) {
+ data = qtest_readw(i2c->qts, s->addr + OMAP_I2C_CON);
+ if (len <= 4) {
+ g_assert((data & OMAP_I2C_CON_STP) == 0);
+
+ data = qtest_readw(i2c->qts, s->addr + OMAP_I2C_CNT);
+ g_assert_cmpuint(data, ==, orig_len);
+ } else {
+ g_assert((data & OMAP_I2C_CON_STP) != 0);
+
+ data = qtest_readw(i2c->qts, s->addr + OMAP_I2C_CNT);
+ g_assert_cmpuint(data, ==, len - 4);
+ }
+
data = qtest_readw(i2c->qts, s->addr + OMAP_I2C_STAT);
g_assert((data & OMAP_I2C_STAT_RRDY) != 0);
g_assert((data & OMAP_I2C_STAT_ROVR) == 0);
--
2.20.1
- [Qemu-devel] [PATCH preliminary for 4.1 00/13] Convert I2C tests to qgraph, Paolo Bonzini, 2019/03/18
- [Qemu-devel] [PATCH 08/13] libqos: convert I2C to qgraph, Paolo Bonzini, 2019/03/18
- [Qemu-devel] [PATCH 09/13] libqos: add ARM n800 machine object, Paolo Bonzini, 2019/03/18
- [Qemu-devel] [PATCH 01/13] qgraph: allow extra_device_opts on bus nodes, Paolo Bonzini, 2019/03/18
- [Qemu-devel] [PATCH 03/13] libqos: move common i2c code to libqos, Paolo Bonzini, 2019/03/18
- [Qemu-devel] [PATCH 13/13] libqos: i2c: move address into QI2CDevice, Paolo Bonzini, 2019/03/18
- [Qemu-devel] [PATCH 11/13] tests: convert OMAP i2c tests to qgraph, Paolo Bonzini, 2019/03/18
- [Qemu-devel] [PATCH 10/13] libqos: add ARM imx25-pdk machine object, Paolo Bonzini, 2019/03/18
- [Qemu-devel] [PATCH 05/13] pca9552-test: do not rely on state across tests, Paolo Bonzini, 2019/03/18
- [Qemu-devel] [PATCH 04/13] libqos: fix omap-i2c receiving more than 4 bytes,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 02/13] qgraph: fix qos_node_contains with options, Paolo Bonzini, 2019/03/18
- [Qemu-devel] [PATCH 12/13] tests: convert ds1338-test to qtest, Paolo Bonzini, 2019/03/18
- [Qemu-devel] [PATCH 06/13] imx25-pdk: create ds1338 for qtest inside the test, Paolo Bonzini, 2019/03/18
- [Qemu-devel] [PATCH 07/13] libqos: split I2CAdapter initialization and allocation, Paolo Bonzini, 2019/03/18
- Re: [Qemu-devel] [PATCH preliminary for 4.1 00/13] Convert I2C tests to qgraph, no-reply, 2019/03/18