eCTS: Add I2C suite to run_ects.py

This patch adds i2c suite to run_ects.py. It also adds checks for
return values from i2c_read and i2c_write functions.

BUG=chromium:653183
BRANCH=none
TEST=Run run_ects.py and verify all test pass.

Change-Id: Ie3d6e1e6f131235e2b28f39e1546c9cb4c3b92f6
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/547024
Reviewed-by: Randall Spangler <rspangler@chromium.org>
This commit is contained in:
Daisuke Nojiri 2017-06-23 17:41:50 -07:00 committed by chrome-bot
parent 681b6fdf1f
commit de36e33ecf
5 changed files with 66 additions and 62 deletions

View File

@ -3,12 +3,19 @@
* found in the LICENSE file.
*/
/* Currently tests will execute in the order they are listed here */
/* Test whether sync completes successfully */
/*
* Test i2c write for 8, 16, and 32 bits. DUT runs as a master and TH
* runs as a slave.
*/
CTS_TEST(write8_test,,,,)
CTS_TEST(write16_test,,,,)
CTS_TEST(write32_test,,,,)
/*
* Test i2c read for 8, 16, and 32 bits. DUT runs as a master and TH
* runs as a slave. You need external pull-ups (10 kohms) on SDL and SDA
* to make read16_test and read32_test pass.
*/
CTS_TEST(read8_test,,,,)
CTS_TEST(read16_test,,,,)
CTS_TEST(read32_test,,,,)

View File

@ -4,17 +4,17 @@
*/
enum cts_i2c_packets {
WRITE_8_OFFSET = 0,
WRITE_16_OFFSET = 1,
WRITE_32_OFFSET = 2,
READ_8_OFFSET = 3,
READ_16_OFFSET = 4,
READ_32_OFFSET = 5,
WRITE8_OFF,
WRITE16_OFF,
WRITE32_OFF,
READ8_OFF,
READ16_OFF,
READ32_OFF,
};
#define WRITE_8_DATA 0x42
#define WRITE_16_DATA 0x1234
#define WRITE_32_DATA 0xDEADBEEF
#define READ_8_DATA 0x23
#define READ_16_DATA 0xACED
#define READ_32_DATA 0x01ABCDEF
#define WRITE8_DATA 0x42
#define WRITE16_DATA 0x1234
#define WRITE32_DATA 0xDEADBEEF
#define READ8_DATA 0x23
#define READ16_DATA 0xACED
#define READ32_DATA 0x01ABCDEF

View File

@ -17,66 +17,63 @@
enum cts_rc write8_test(void)
{
int port = i2c_ports[0].port;
i2c_write8(port, TH_ADDR, WRITE_8_OFFSET, WRITE_8_DATA);
if (i2c_write8(i2c_ports[0].port, TH_ADDR, WRITE8_OFF, WRITE8_DATA))
return CTS_RC_FAILURE;
return CTS_RC_SUCCESS;
}
enum cts_rc write16_test(void)
{
int port = i2c_ports[0].port;
i2c_write16(port, TH_ADDR, WRITE_16_OFFSET, WRITE_16_DATA);
if (i2c_write16(i2c_ports[0].port, TH_ADDR, WRITE16_OFF, WRITE16_DATA))
return CTS_RC_FAILURE;
return CTS_RC_SUCCESS;
}
enum cts_rc write32_test(void)
{
int port = i2c_ports[0].port;
i2c_write32(port, TH_ADDR, WRITE_32_OFFSET, WRITE_32_DATA);
if (i2c_write32(i2c_ports[0].port, TH_ADDR, WRITE32_OFF, WRITE32_DATA))
return CTS_RC_FAILURE;
return CTS_RC_SUCCESS;
}
enum cts_rc read8_test(void)
{
int result;
int port = i2c_ports[0].port;
int data;
i2c_read8(port, TH_ADDR, READ_8_OFFSET, &result);
if (result != READ_8_DATA)
if (i2c_read8(i2c_ports[0].port, TH_ADDR, READ8_OFF, &data))
return CTS_RC_FAILURE;
if (data != READ8_DATA) {
CPRINTL("Expecting 0x%x but read 0x%x", READ8_DATA, data);
return CTS_RC_FAILURE;
}
return CTS_RC_SUCCESS;
}
enum cts_rc read16_test(void)
{
int result;
int port = i2c_ports[0].port;
int data;
i2c_read16(port, TH_ADDR, READ_16_OFFSET, &result);
if (result != READ_16_DATA)
if (i2c_read16(i2c_ports[0].port, TH_ADDR, READ16_OFF, &data))
return CTS_RC_FAILURE;
if (data != READ16_DATA) {
CPRINTL("Expecting 0x%x but read 0x%x", READ16_DATA, data);
return CTS_RC_FAILURE;
}
return CTS_RC_SUCCESS;
}
enum cts_rc read32_test(void)
{
int result;
int port = i2c_ports[0].port;
int data;
i2c_read32(port, TH_ADDR, READ_32_OFFSET, &result);
if (result != READ_32_DATA)
if (i2c_read32(i2c_ports[0].port, TH_ADDR, READ32_OFF, &data))
return CTS_RC_FAILURE;
if (data != READ32_DATA) {
CPRINTL("Read 0x%x expecting 0x%x", data, READ32_DATA);
return CTS_RC_FAILURE;
}
return CTS_RC_SUCCESS;
}

View File

@ -27,18 +27,18 @@ void i2c_data_received(int port, uint8_t *buf, int len)
int i2c_set_response(int port, uint8_t *buf, int len)
{
switch (buf[0]) {
case READ_8_OFFSET:
buf[0] = READ_8_DATA;
case READ8_OFF:
buf[0] = READ8_DATA;
return 1;
case READ_16_OFFSET:
buf[0] = READ_16_DATA & 0xFF;
buf[1] = (READ_16_DATA >> 8) & 0xFF;
case READ16_OFF:
buf[0] = READ16_DATA & 0xFF;
buf[1] = (READ16_DATA >> 8) & 0xFF;
return 2;
case READ_32_OFFSET:
buf[0] = READ_32_DATA & 0xFF;
buf[1] = (READ_32_DATA >> 8) & 0xFF;
buf[2] = (READ_32_DATA >> 16) & 0xFF;
buf[3] = (READ_32_DATA >> 24) & 0xFF;
case READ32_OFF:
buf[0] = READ32_DATA & 0xFF;
buf[1] = (READ32_DATA >> 8) & 0xFF;
buf[2] = (READ32_DATA >> 16) & 0xFF;
buf[3] = (READ32_DATA >> 24) & 0xFF;
return 4;
default:
return 0;
@ -73,10 +73,10 @@ enum cts_rc write8_test(void)
if (wait_for_in_flag(100))
return CTS_RC_TIMEOUT;
if (inbox[0] != WRITE_8_OFFSET)
if (inbox[0] != WRITE8_OFF)
return CTS_RC_FAILURE;
in = inbox[1];
if (in != WRITE_8_DATA)
if (in != WRITE8_DATA)
return CTS_RC_FAILURE;
return CTS_RC_SUCCESS;
@ -88,10 +88,10 @@ enum cts_rc write16_test(void)
if (wait_for_in_flag(100))
return CTS_RC_TIMEOUT;
if (inbox[0] != WRITE_16_OFFSET)
if (inbox[0] != WRITE16_OFF)
return CTS_RC_FAILURE;
in = inbox[2] << 8 | inbox[1] << 0;
if (in != WRITE_16_DATA)
if (in != WRITE16_DATA)
return CTS_RC_FAILURE;
return CTS_RC_SUCCESS;
@ -103,10 +103,10 @@ enum cts_rc write32_test(void)
if (wait_for_in_flag(100))
return CTS_RC_TIMEOUT;
if (inbox[0] != WRITE_32_OFFSET)
if (inbox[0] != WRITE32_OFF)
return CTS_RC_FAILURE;
in = inbox[4] << 24 | inbox[3] << 16 | inbox[2] << 8 | inbox[1];
if (in != WRITE_32_DATA)
if (in != WRITE32_DATA)
return CTS_RC_FAILURE;
return CTS_RC_SUCCESS;
@ -116,7 +116,7 @@ enum cts_rc read8_test(void)
{
if (wait_for_in_flag(100))
return CTS_RC_TIMEOUT;
if (inbox[0] != READ_8_OFFSET)
if (inbox[0] != READ8_OFF)
return CTS_RC_FAILURE;
return CTS_RC_SUCCESS;
@ -126,7 +126,7 @@ enum cts_rc read16_test(void)
{
if (wait_for_in_flag(100))
return CTS_RC_TIMEOUT;
if (inbox[0] != READ_16_OFFSET)
if (inbox[0] != READ16_OFF)
return CTS_RC_FAILURE;
return CTS_RC_SUCCESS;
@ -136,7 +136,7 @@ enum cts_rc read32_test(void)
{
if (wait_for_in_flag(100))
return CTS_RC_TIMEOUT;
if (inbox[0] != READ_32_OFFSET)
if (inbox[0] != READ32_OFF)
return CTS_RC_FAILURE;
return CTS_RC_SUCCESS;

View File

@ -12,7 +12,7 @@ import subprocess
import sys
# List of tests to run.
TESTS = ['meta', 'gpio', 'hook', 'interrupt', 'mutex', 'task', 'timer']
TESTS = ['meta', 'gpio', 'hook', 'i2c', 'interrupt', 'mutex', 'task', 'timer']
class CtsRunner(object):