summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVic Yang <victoryang@chromium.org>2013-06-19 00:29:08 +0800
committerChromeBot <chrome-bot@google.com>2013-07-11 04:26:10 -0700
commit62f2a33ff2ff37ad8226fd854712206f3ccd745e (patch)
tree7c4e226ce5269b37d61c6f7d6a5fbda0c5482d3a
parentb3f1d0d0593a430a5fb7605e5fc4337ae0a8833c (diff)
downloadchrome-ec-62f2a33ff2ff37ad8226fd854712206f3ccd745e.tar.gz
Add flash host read command test
This checks the correctness of data returned by flash read host command. BUG=chrome-os-partner:19236 TEST=Pass all tests. BRANCH=None Change-Id: I3b97addb9b14922e9f33a71b865000ae9a8d40a8 Signed-off-by: Vic Yang <victoryang@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/60963 Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--common/test_util.c8
-rw-r--r--test/flash.c32
2 files changed, 39 insertions, 1 deletions
diff --git a/common/test_util.c b/common/test_util.c
index c133ac9d24..10e718399f 100644
--- a/common/test_util.c
+++ b/common/test_util.c
@@ -70,6 +70,7 @@ int test_send_host_command(int command, int version, const void *params,
int params_size, void *resp, int resp_size)
{
struct host_cmd_handler_args args;
+ int rv;
args.version = version;
args.command = command;
@@ -79,7 +80,12 @@ int test_send_host_command(int command, int version, const void *params,
args.response_max = resp_size;
args.response_size = 0;
- return host_command_process(&args);
+ rv = host_command_process(&args);
+
+ if (args.response != resp)
+ memcpy(resp, args.response, args.response_size);
+
+ return rv;
}
#endif /* TASK_HAS_HOSTCMD */
diff --git a/test/flash.c b/test/flash.c
index ae1d6432df..73c4a95683 100644
--- a/test/flash.c
+++ b/test/flash.c
@@ -177,6 +177,17 @@ static int verify_write(int offset, int size, const char *data)
TEST_ASSERT(size == (s)); \
} while (0)
+int host_command_read(int offset, int size, char *out)
+{
+ struct ec_params_flash_read params;
+
+ params.offset = offset;
+ params.size = size;
+
+ return test_send_host_command(EC_CMD_FLASH_READ, 0, &params,
+ sizeof(params), out, size);
+}
+
int host_command_write(int offset, int size, const char *data)
{
uint8_t buf[256];
@@ -248,6 +259,26 @@ int host_command_region_info(enum ec_flash_region reg, uint32_t *offset,
/*****************************************************************************/
/* Tests */
+static int test_read(void)
+{
+ char buf[16];
+
+#ifdef EMU_BUILD
+ int i;
+ /* Fill in some numbers so they are not all 0xff */
+ for (i = 0; i < sizeof(buf); ++i)
+ __host_flash[i] = i * i + i;
+#endif
+
+ /* The first few bytes in the flash should always contain some code */
+ TEST_ASSERT(!flash_is_erased(0, sizeof(buf)));
+
+ TEST_ASSERT(host_command_read(0, sizeof(buf), buf) == EC_RES_SUCCESS);
+ TEST_ASSERT_ARRAY_EQ(buf, (char *)CONFIG_FLASH_BASE, sizeof(buf));
+
+ return EC_SUCCESS;
+}
+
static int test_overwrite_current(void)
{
uint32_t offset, size;
@@ -420,6 +451,7 @@ static void run_test_step1(void)
test_reset();
mock_wp = 0;
+ RUN_TEST(test_read);
RUN_TEST(test_overwrite_current);
RUN_TEST(test_overwrite_other);
RUN_TEST(test_op_failure);