diff options
author | Randall Spangler <rspangler@chromium.org> | 2012-07-20 16:33:03 -0700 |
---|---|---|
committer | Gerrit <chrome-bot@google.com> | 2012-07-22 13:17:03 -0700 |
commit | 7143c4544c4076a6b8f6d65d79d6524d34dea7b7 (patch) | |
tree | be6ebde6d82dde473ff51c880cb9bc7f7785c973 | |
parent | 360d91573a12994ec9fa0e2790ea89a0cd2c5b32 (diff) | |
download | chrome-ec-7143c4544c4076a6b8f6d65d79d6524d34dea7b7.tar.gz |
Clean up ectool
Assorted minor cleanup; make protocol a bit more efficient, and add a
missing line of output to flash protect status.
BUG=none
TEST=ectool flashprotect; should print valid bits = 0x3f on link
Change-Id: I9bea78506b3ed367df731d358982d3e2febb13af
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/28097
Reviewed-by: Vic Yang <victoryang@chromium.org>
-rw-r--r-- | util/comm-lpc.c | 64 | ||||
-rw-r--r-- | util/ectool.c | 1 |
2 files changed, 28 insertions, 37 deletions
diff --git a/util/comm-lpc.c b/util/comm-lpc.c index 2e4fe0f08d..23c92e3b22 100644 --- a/util/comm-lpc.c +++ b/util/comm-lpc.c @@ -103,10 +103,6 @@ static int ec_command_old(int command, const void *indata, int insize, uint8_t *d; int i; - const int cmd_addr = EC_LPC_ADDR_HOST_CMD; - const int data_addr = EC_LPC_ADDR_HOST_DATA; - const int param_addr = EC_LPC_ADDR_OLD_PARAM; - if (insize > EC_OLD_PARAM_SIZE) { fprintf(stderr, "Data size too big\n"); return -EC_RES_ERROR; @@ -116,7 +112,7 @@ static int ec_command_old(int command, const void *indata, int insize, if (outsize > EC_OLD_PARAM_SIZE) outsize = EC_OLD_PARAM_SIZE; - if (wait_for_ec(cmd_addr, 1000000)) { + if (wait_for_ec(EC_LPC_ADDR_HOST_CMD, 1000000)) { fprintf(stderr, "Timeout waiting for EC ready\n"); return -EC_RES_ERROR; } @@ -124,17 +120,17 @@ static int ec_command_old(int command, const void *indata, int insize, /* Write data, if any */ /* TODO: optimized copy using outl() */ for (i = 0, d = (uint8_t *)indata; i < insize; i++, d++) - outb(*d, param_addr + i); + outb(*d, EC_LPC_ADDR_OLD_PARAM + i); - outb(command, cmd_addr); + outb(command, EC_LPC_ADDR_HOST_CMD); - if (wait_for_ec(cmd_addr, 1000000)) { + if (wait_for_ec(EC_LPC_ADDR_HOST_CMD, 1000000)) { fprintf(stderr, "Timeout waiting for EC response\n"); return -EC_RES_ERROR; } /* Check result */ - i = inb(data_addr); + i = inb(EC_LPC_ADDR_HOST_DATA); if (i) { fprintf(stderr, "EC returned error result code %d\n", i); return -i; @@ -143,7 +139,7 @@ static int ec_command_old(int command, const void *indata, int insize, /* Read data, if any */ /* TODO: optimized copy using outl() */ for (i = 0, d = (uint8_t *)outdata; i < outsize; i++, d++) - *d = inb(param_addr + i); + *d = inb(EC_LPC_ADDR_OLD_PARAM + i); /* * LPC protocol doesn't have a way to communicate the true output @@ -155,11 +151,6 @@ static int ec_command_old(int command, const void *indata, int insize, int ec_command(int command, int version, const void *indata, int insize, void *outdata, int outsize) { - const int cmd_addr = EC_LPC_ADDR_HOST_CMD; - const int data_addr = EC_LPC_ADDR_HOST_DATA; - const int args_addr = EC_LPC_ADDR_HOST_ARGS; - const int param_addr = EC_LPC_ADDR_HOST_PARAM; - struct ec_lpc_host_args args; const uint8_t *d; uint8_t *dout; @@ -176,31 +167,29 @@ int ec_command(int command, int version, const void *indata, int insize, args.command_version = version; args.data_size = insize; - /* Calculate checksum */ + /* Initialize checksum */ csum = command + args.flags + args.command_version + args.data_size; - for (i = 0, d = (const uint8_t *)indata; i < insize; i++, d++) + + /* Write data and update checksum */ + for (i = 0, d = (uint8_t *)indata; i < insize; i++, d++) { + outb(*d, EC_LPC_ADDR_HOST_PARAM + i); csum += *d; + } + /* Finalize checksum and write args */ args.checksum = (uint8_t)csum; - - /* Write args */ for (i = 0, d = (const uint8_t *)&args; i < sizeof(args); i++, d++) - outb(*d, args_addr + i); - - /* Write data, if any */ - /* TODO: optimized copy using outl() */ - for (i = 0, d = (uint8_t *)indata; i < insize; i++, d++) - outb(*d, param_addr + i); + outb(*d, EC_LPC_ADDR_HOST_ARGS + i); - outb(command, cmd_addr); + outb(command, EC_LPC_ADDR_HOST_CMD); - if (wait_for_ec(cmd_addr, 1000000)) { + if (wait_for_ec(EC_LPC_ADDR_HOST_CMD, 1000000)) { fprintf(stderr, "Timeout waiting for EC response\n"); return -EC_RES_ERROR; } /* Check result */ - i = inb(data_addr); + i = inb(EC_LPC_ADDR_HOST_DATA); if (i) { fprintf(stderr, "EC returned error result code %d\n", i); return -i; @@ -208,7 +197,7 @@ int ec_command(int command, int version, const void *indata, int insize, /* Read back args */ for (i = 0, dout = (uint8_t *)&args; i < sizeof(args); i++, dout++) - *dout = inb(args_addr + i); + *dout = inb(EC_LPC_ADDR_HOST_ARGS + i); /* * If EC didn't modify args flags, then somehow we sent a new-style @@ -225,16 +214,17 @@ int ec_command(int command, int version, const void *indata, int insize, return -EC_RES_INVALID_RESPONSE; } - /* Read data, if any */ - /* TODO: optimized copy using outl() */ - for (i = 0, dout = (uint8_t *)outdata; i < args.data_size; i++, dout++) - *dout = inb(param_addr + i); - - /* Verify checksum */ + /* Start calculating response checksum */ csum = command + args.flags + args.command_version + args.data_size; - for (i = 0, d = (const uint8_t *)outdata; i < args.data_size; i++, d++) - csum += *d; + /* Read response and update checksum */ + for (i = 0, dout = (uint8_t *)outdata; i < args.data_size; + i++, dout++) { + *dout = inb(EC_LPC_ADDR_HOST_PARAM + i); + csum += *dout; + } + + /* Verify checksum */ if (args.checksum != (uint8_t)csum) { fprintf(stderr, "EC response has invalid checksum\n"); return -EC_RES_INVALID_CHECKSUM; diff --git a/util/ectool.c b/util/ectool.c index 5302d036d7..a304c84076 100644 --- a/util/ectool.c +++ b/util/ectool.c @@ -630,6 +630,7 @@ int cmd_flash_protect(int argc, char *argv[]) /* Print returned flags */ print_flash_protect_flags("Flash protect flags:", r.flags); + print_flash_protect_flags("Valid flags: ", r.valid_flags); print_flash_protect_flags("Writable flags: ", r.writable_flags); /* Check if we got all the flags we asked for */ |