mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-08 16:41:55 +00:00
Strip out old LPC command protocol
Nothing has used this since link EVT, so it's just dead code at this point. BUG=chrome-os-partner:13213 BRANCH=none TEST=manual - Update ectool but leave old firmware - ectool version -> works - ectool flashread 0 0x10000 foo -> puts the first 64KB of EC flash into foo - Update firmware - ectool version -> works - ectool flashread 0 0x10000 foo -> puts the first 64KB of EC flash into foo - power+esc+refresh -> recovery mode Change-Id: Ib25a705bcd8280d5295c8e7890969d796542b6c9 Signed-off-by: Randall Spangler <rspangler@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/47866 Reviewed-by: Bill Richardson <wfrichar@chromium.org>
This commit is contained in:
committed by
ChromeBot
parent
4adcb45f2c
commit
08f8c6857f
@@ -43,8 +43,6 @@ static int init_done;
|
||||
|
||||
static uint8_t * const cmd_params = (uint8_t *)LPC_POOL_CMD_DATA +
|
||||
EC_LPC_ADDR_HOST_PARAM - EC_LPC_ADDR_HOST_ARGS;
|
||||
static uint8_t * const old_params = (uint8_t *)LPC_POOL_CMD_DATA +
|
||||
EC_LPC_ADDR_OLD_PARAM - EC_LPC_ADDR_HOST_ARGS;
|
||||
static struct ec_lpc_host_args * const lpc_host_args =
|
||||
(struct ec_lpc_host_args *)LPC_POOL_CMD_DATA;
|
||||
|
||||
@@ -145,7 +143,8 @@ static void lpc_send_response(struct host_cmd_handler_args *args)
|
||||
{
|
||||
uint8_t *out;
|
||||
int size = args->response_size;
|
||||
int max_size;
|
||||
int csum;
|
||||
int i;
|
||||
|
||||
/* Ignore in-progress on LPC since interface is synchronous anyway */
|
||||
if (args->result == EC_RES_IN_PROGRESS)
|
||||
@@ -157,41 +156,27 @@ static void lpc_send_response(struct host_cmd_handler_args *args)
|
||||
size = 0;
|
||||
}
|
||||
|
||||
if (args->flags & EC_HOST_ARGS_FLAG_FROM_HOST) {
|
||||
/* New-style response */
|
||||
int csum;
|
||||
int i;
|
||||
/* New-style response */
|
||||
lpc_host_args->flags =
|
||||
(args->flags & ~EC_HOST_ARGS_FLAG_FROM_HOST) |
|
||||
EC_HOST_ARGS_FLAG_TO_HOST;
|
||||
|
||||
lpc_host_args->flags =
|
||||
(args->flags & ~EC_HOST_ARGS_FLAG_FROM_HOST) |
|
||||
EC_HOST_ARGS_FLAG_TO_HOST;
|
||||
lpc_host_args->data_size = size;
|
||||
|
||||
lpc_host_args->data_size = size;
|
||||
csum = args->command + lpc_host_args->flags +
|
||||
lpc_host_args->command_version +
|
||||
lpc_host_args->data_size;
|
||||
|
||||
csum = args->command + lpc_host_args->flags +
|
||||
lpc_host_args->command_version +
|
||||
lpc_host_args->data_size;
|
||||
for (i = 0, out = (uint8_t *)args->response; i < size; i++, out++)
|
||||
csum += *out;
|
||||
|
||||
for (i = 0, out = (uint8_t *)args->response; i < size;
|
||||
i++, out++)
|
||||
csum += *out;
|
||||
|
||||
lpc_host_args->checksum = (uint8_t)csum;
|
||||
|
||||
out = cmd_params;
|
||||
max_size = EC_HOST_PARAM_SIZE;
|
||||
} else {
|
||||
/* Old-style response */
|
||||
lpc_host_args->flags = 0;
|
||||
out = old_params;
|
||||
max_size = EC_OLD_PARAM_SIZE;
|
||||
}
|
||||
lpc_host_args->checksum = (uint8_t)csum;
|
||||
|
||||
/* Fail if response doesn't fit in the param buffer */
|
||||
if (size > max_size)
|
||||
if (size > EC_HOST_PARAM_SIZE)
|
||||
args->result = EC_RES_INVALID_RESPONSE;
|
||||
else if (host_cmd_args.response != out)
|
||||
memcpy(out, args->response, size);
|
||||
else if (host_cmd_args.response != cmd_params)
|
||||
memcpy(cmd_params, args->response, size);
|
||||
|
||||
/*
|
||||
* Write result to the data byte. This sets the TOH bit in the
|
||||
@@ -510,13 +495,8 @@ static void handle_host_write(int is_cmd)
|
||||
host_cmd_args.result = EC_RES_INVALID_CHECKSUM;
|
||||
}
|
||||
} else {
|
||||
/* Old style command */
|
||||
host_cmd_args.version = 0;
|
||||
host_cmd_args.params = old_params;
|
||||
host_cmd_args.params_size = EC_OLD_PARAM_SIZE;
|
||||
host_cmd_args.response = old_params;
|
||||
host_cmd_args.response_max = EC_OLD_PARAM_SIZE;
|
||||
host_cmd_args.response_size = 0;
|
||||
/* Old style command, now unsupported */
|
||||
host_cmd_args.result = EC_RES_INVALID_COMMAND;
|
||||
}
|
||||
|
||||
/* Hand off to host command handler */
|
||||
|
||||
@@ -46,10 +46,6 @@
|
||||
#define EC_LPC_ADDR_HOST_PARAM 0x804
|
||||
#define EC_HOST_PARAM_SIZE 0x0fc /* Size of param area in bytes */
|
||||
|
||||
/* I/O addresses for host command params, old interface */
|
||||
#define EC_LPC_ADDR_OLD_PARAM 0x880
|
||||
#define EC_OLD_PARAM_SIZE 0x080 /* Size of param area in bytes */
|
||||
|
||||
/* EC command register bit functions */
|
||||
#define EC_LPC_CMDR_DATA (1 << 0) /* Data ready for host to read */
|
||||
#define EC_LPC_CMDR_PENDING (1 << 1) /* Write pending to EC */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
|
||||
/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
|
||||
* Use of this source code is governed by a BSD-style license that can be
|
||||
* found in the LICENSE file.
|
||||
*/
|
||||
@@ -57,7 +57,7 @@ int flash_partition(enum ec_current_image part, const uint8_t *payload,
|
||||
struct ec_params_flash_erase er_req;
|
||||
struct ec_params_flash_write wr_req;
|
||||
struct ec_params_flash_read rd_req;
|
||||
uint8_t rd_resp[EC_OLD_PARAM_SIZE];
|
||||
uint8_t rd_resp[EC_HOST_PARAM_SIZE];
|
||||
int res;
|
||||
uint32_t i;
|
||||
enum ec_current_image current = EC_IMAGE_UNKNOWN;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
|
||||
/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
|
||||
* Use of this source code is governed by a BSD-style license that can be
|
||||
* found in the LICENSE file.
|
||||
*/
|
||||
@@ -14,8 +14,6 @@
|
||||
#define INITIAL_UDELAY 5 /* 5 us */
|
||||
#define MAXIMUM_UDELAY 10000 /* 10 ms */
|
||||
|
||||
static int lpc_cmd_args_supported;
|
||||
|
||||
int comm_init(void)
|
||||
{
|
||||
int i;
|
||||
@@ -38,13 +36,13 @@ int comm_init(void)
|
||||
*/
|
||||
byte &= inb(EC_LPC_ADDR_HOST_CMD);
|
||||
byte &= inb(EC_LPC_ADDR_HOST_DATA);
|
||||
for (i = 0; i < EC_OLD_PARAM_SIZE && byte == 0xff; ++i)
|
||||
byte &= inb(EC_LPC_ADDR_OLD_PARAM + i);
|
||||
for (i = 0; i < EC_HOST_PARAM_SIZE && byte == 0xff; ++i)
|
||||
byte &= inb(EC_LPC_ADDR_HOST_PARAM + i);
|
||||
if (byte == 0xff) {
|
||||
fprintf(stderr, "Port 0x%x,0x%x,0x%x-0x%x are all 0xFF.\n",
|
||||
EC_LPC_ADDR_HOST_CMD, EC_LPC_ADDR_HOST_DATA,
|
||||
EC_LPC_ADDR_OLD_PARAM,
|
||||
EC_LPC_ADDR_OLD_PARAM + EC_OLD_PARAM_SIZE - 1);
|
||||
EC_LPC_ADDR_HOST_PARAM,
|
||||
EC_LPC_ADDR_HOST_PARAM + EC_HOST_PARAM_SIZE - 1);
|
||||
fprintf(stderr,
|
||||
"Very likely this board doesn't have a Chromium EC.\n");
|
||||
return -4;
|
||||
@@ -58,11 +56,13 @@ int comm_init(void)
|
||||
* seeing whether the EC sets the EC_HOST_ARGS_FLAG_FROM_HOST flag
|
||||
* in args when it responds.
|
||||
*/
|
||||
if (inb(EC_LPC_ADDR_MEMMAP + EC_MEMMAP_ID) == 'E' &&
|
||||
inb(EC_LPC_ADDR_MEMMAP + EC_MEMMAP_ID + 1) == 'C' &&
|
||||
(inb(EC_LPC_ADDR_MEMMAP + EC_MEMMAP_HOST_CMD_FLAGS) &
|
||||
EC_HOST_CMD_FLAG_LPC_ARGS_SUPPORTED))
|
||||
lpc_cmd_args_supported = 1;
|
||||
if (inb(EC_LPC_ADDR_MEMMAP + EC_MEMMAP_ID) != 'E' ||
|
||||
inb(EC_LPC_ADDR_MEMMAP + EC_MEMMAP_ID + 1) != 'C' ||
|
||||
!(inb(EC_LPC_ADDR_MEMMAP + EC_MEMMAP_HOST_CMD_FLAGS) &
|
||||
EC_HOST_CMD_FLAG_LPC_ARGS_SUPPORTED)) {
|
||||
fprintf(stderr, "EC doesn't support command args.\n");
|
||||
return -5;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -97,57 +97,6 @@ static int wait_for_ec(int status_addr, int timeout_usec)
|
||||
return -1; /* Timeout */
|
||||
}
|
||||
|
||||
/* Old-style command interface, without args */
|
||||
static int ec_command_old(int command, const void *indata, int insize,
|
||||
void *outdata, int outsize) {
|
||||
uint8_t *d;
|
||||
int i;
|
||||
|
||||
if (insize > EC_OLD_PARAM_SIZE) {
|
||||
fprintf(stderr, "Data size too big\n");
|
||||
return -EC_RES_ERROR;
|
||||
}
|
||||
|
||||
/* Clip output buffer to the size we can actually use */
|
||||
if (outsize > EC_OLD_PARAM_SIZE)
|
||||
outsize = EC_OLD_PARAM_SIZE;
|
||||
|
||||
if (wait_for_ec(EC_LPC_ADDR_HOST_CMD, 1000000)) {
|
||||
fprintf(stderr, "Timeout waiting for EC ready\n");
|
||||
return -EC_RES_ERROR;
|
||||
}
|
||||
|
||||
/* Write data, if any */
|
||||
/* TODO: optimized copy using outl() */
|
||||
for (i = 0, d = (uint8_t *)indata; i < insize; i++, d++)
|
||||
outb(*d, EC_LPC_ADDR_OLD_PARAM + i);
|
||||
|
||||
outb(command, EC_LPC_ADDR_HOST_CMD);
|
||||
|
||||
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(EC_LPC_ADDR_HOST_DATA);
|
||||
if (i) {
|
||||
fprintf(stderr, "EC returned error result code %d\n", i);
|
||||
return -i;
|
||||
}
|
||||
|
||||
/* Read data, if any */
|
||||
/* TODO: optimized copy using outl() */
|
||||
for (i = 0, d = (uint8_t *)outdata; i < outsize; i++, d++)
|
||||
*d = inb(EC_LPC_ADDR_OLD_PARAM + i);
|
||||
|
||||
/*
|
||||
* LPC protocol doesn't have a way to communicate the true output
|
||||
* size, so assume we got everything we asked for.
|
||||
*/
|
||||
return outsize;
|
||||
}
|
||||
|
||||
int ec_command(int command, int version, const void *indata, int insize,
|
||||
void *outdata, int outsize) {
|
||||
|
||||
@@ -157,11 +106,6 @@ int ec_command(int command, int version, const void *indata, int insize,
|
||||
int csum;
|
||||
int i;
|
||||
|
||||
/* Fall back to old-style command interface if args aren't supported */
|
||||
if (!lpc_cmd_args_supported)
|
||||
return ec_command_old(command, indata, insize,
|
||||
outdata, outsize);
|
||||
|
||||
/* Fill in args */
|
||||
args.flags = EC_HOST_ARGS_FLAG_FROM_HOST;
|
||||
args.command_version = version;
|
||||
|
||||
@@ -478,7 +478,7 @@ int cmd_flash_info(int argc, char *argv[])
|
||||
int cmd_flash_read(int argc, char *argv[])
|
||||
{
|
||||
struct ec_params_flash_read p;
|
||||
uint8_t rdata[EC_OLD_PARAM_SIZE];
|
||||
uint8_t rdata[EC_HOST_PARAM_SIZE];
|
||||
int offset, size;
|
||||
int rv;
|
||||
int i;
|
||||
|
||||
Reference in New Issue
Block a user