platform/chrome: wilco_ec: Remove 256 byte transfers
The 0xF6 command, intended to send and receive 256 byte payloads to and from the EC, is not needed. The 0xF5 command for 32 byte payloads is sufficient. This patch removes support for the 0xF6 command and 256 byte payloads. Signed-off-by: Nick Crews <ncrews@chromium.org> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
This commit is contained in:
parent
4c1ca625c6
commit
2ad1f7a914
|
@ -23,11 +23,9 @@ Description:
|
||||||
|
|
||||||
For writing, bytes 0-1 indicate the message type, one of enum
|
For writing, bytes 0-1 indicate the message type, one of enum
|
||||||
wilco_ec_msg_type. Byte 2+ consist of the data passed in the
|
wilco_ec_msg_type. Byte 2+ consist of the data passed in the
|
||||||
request, starting at MBOX[0]
|
request, starting at MBOX[0]. At least three bytes are required
|
||||||
|
for writing, two for the type and at least a single byte of
|
||||||
At least three bytes are required for writing, two for the type
|
data.
|
||||||
and at least a single byte of data. Only the first
|
|
||||||
EC_MAILBOX_DATA_SIZE bytes of MBOX will be used.
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
// Request EC info type 3 (EC firmware build date)
|
// Request EC info type 3 (EC firmware build date)
|
||||||
|
@ -40,7 +38,7 @@ Description:
|
||||||
$ cat /sys/kernel/debug/wilco_ec/raw
|
$ cat /sys/kernel/debug/wilco_ec/raw
|
||||||
00 00 31 32 2f 32 31 2f 31 38 00 38 00 01 00 2f 00 ..12/21/18.8...
|
00 00 31 32 2f 32 31 2f 31 38 00 38 00 01 00 2f 00 ..12/21/18.8...
|
||||||
|
|
||||||
Note that the first 32 bytes of the received MBOX[] will be
|
Note that the first 16 bytes of the received MBOX[] will be
|
||||||
printed, even if some of the data is junk. It is up to you to
|
printed, even if some of the data is junk, and skipping bytes
|
||||||
know how many of the first bytes of data are the actual
|
17 to 32. It is up to you to know how many of the first bytes of
|
||||||
response.
|
data are the actual response.
|
||||||
|
|
|
@ -52,9 +52,7 @@ static int wilco_ec_probe(struct platform_device *pdev)
|
||||||
ec->dev = dev;
|
ec->dev = dev;
|
||||||
mutex_init(&ec->mailbox_lock);
|
mutex_init(&ec->mailbox_lock);
|
||||||
|
|
||||||
/* Largest data buffer size requirement is extended data response */
|
ec->data_size = sizeof(struct wilco_ec_response) + EC_MAILBOX_DATA_SIZE;
|
||||||
ec->data_size = sizeof(struct wilco_ec_response) +
|
|
||||||
EC_MAILBOX_DATA_SIZE_EXTENDED;
|
|
||||||
ec->data_buffer = devm_kzalloc(dev, ec->data_size, GFP_KERNEL);
|
ec->data_buffer = devm_kzalloc(dev, ec->data_size, GFP_KERNEL);
|
||||||
if (!ec->data_buffer)
|
if (!ec->data_buffer)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
|
@ -17,13 +17,13 @@
|
||||||
#define DRV_NAME "wilco-ec-debugfs"
|
#define DRV_NAME "wilco-ec-debugfs"
|
||||||
|
|
||||||
/* The 256 raw bytes will take up more space when represented as a hex string */
|
/* The 256 raw bytes will take up more space when represented as a hex string */
|
||||||
#define FORMATTED_BUFFER_SIZE (EC_MAILBOX_DATA_SIZE_EXTENDED * 4)
|
#define FORMATTED_BUFFER_SIZE (EC_MAILBOX_DATA_SIZE * 4)
|
||||||
|
|
||||||
struct wilco_ec_debugfs {
|
struct wilco_ec_debugfs {
|
||||||
struct wilco_ec_device *ec;
|
struct wilco_ec_device *ec;
|
||||||
struct dentry *dir;
|
struct dentry *dir;
|
||||||
size_t response_size;
|
size_t response_size;
|
||||||
u8 raw_data[EC_MAILBOX_DATA_SIZE_EXTENDED];
|
u8 raw_data[EC_MAILBOX_DATA_SIZE];
|
||||||
u8 formatted_data[FORMATTED_BUFFER_SIZE];
|
u8 formatted_data[FORMATTED_BUFFER_SIZE];
|
||||||
};
|
};
|
||||||
static struct wilco_ec_debugfs *debug_info;
|
static struct wilco_ec_debugfs *debug_info;
|
||||||
|
@ -124,12 +124,6 @@ static ssize_t raw_write(struct file *file, const char __user *user_buf,
|
||||||
msg.response_data = debug_info->raw_data;
|
msg.response_data = debug_info->raw_data;
|
||||||
msg.response_size = EC_MAILBOX_DATA_SIZE;
|
msg.response_size = EC_MAILBOX_DATA_SIZE;
|
||||||
|
|
||||||
/* Telemetry commands use extended response data */
|
|
||||||
if (msg.type == WILCO_EC_MSG_TELEMETRY_LONG) {
|
|
||||||
msg.flags |= WILCO_EC_FLAG_EXTENDED_DATA;
|
|
||||||
msg.response_size = EC_MAILBOX_DATA_SIZE_EXTENDED;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = wilco_ec_mailbox(debug_info->ec, &msg);
|
ret = wilco_ec_mailbox(debug_info->ec, &msg);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -119,7 +119,6 @@ static int wilco_ec_transfer(struct wilco_ec_device *ec,
|
||||||
struct wilco_ec_response *rs;
|
struct wilco_ec_response *rs;
|
||||||
u8 checksum;
|
u8 checksum;
|
||||||
u8 flag;
|
u8 flag;
|
||||||
size_t size;
|
|
||||||
|
|
||||||
/* Write request header, then data */
|
/* Write request header, then data */
|
||||||
cros_ec_lpc_io_bytes_mec(MEC_IO_WRITE, 0, sizeof(*rq), (u8 *)rq);
|
cros_ec_lpc_io_bytes_mec(MEC_IO_WRITE, 0, sizeof(*rq), (u8 *)rq);
|
||||||
|
@ -148,21 +147,11 @@ static int wilco_ec_transfer(struct wilco_ec_device *ec,
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* The EC always returns either EC_MAILBOX_DATA_SIZE or
|
|
||||||
* EC_MAILBOX_DATA_SIZE_EXTENDED bytes of data, so we need to
|
|
||||||
* calculate the checksum on **all** of this data, even if we
|
|
||||||
* won't use all of it.
|
|
||||||
*/
|
|
||||||
if (msg->flags & WILCO_EC_FLAG_EXTENDED_DATA)
|
|
||||||
size = EC_MAILBOX_DATA_SIZE_EXTENDED;
|
|
||||||
else
|
|
||||||
size = EC_MAILBOX_DATA_SIZE;
|
|
||||||
|
|
||||||
/* Read back response */
|
/* Read back response */
|
||||||
rs = ec->data_buffer;
|
rs = ec->data_buffer;
|
||||||
checksum = cros_ec_lpc_io_bytes_mec(MEC_IO_READ, 0,
|
checksum = cros_ec_lpc_io_bytes_mec(MEC_IO_READ, 0,
|
||||||
sizeof(*rs) + size, (u8 *)rs);
|
sizeof(*rs) + EC_MAILBOX_DATA_SIZE,
|
||||||
|
(u8 *)rs);
|
||||||
if (checksum) {
|
if (checksum) {
|
||||||
dev_dbg(ec->dev, "bad packet checksum 0x%02x\n", rs->checksum);
|
dev_dbg(ec->dev, "bad packet checksum 0x%02x\n", rs->checksum);
|
||||||
return -EBADMSG;
|
return -EBADMSG;
|
||||||
|
@ -173,9 +162,9 @@ static int wilco_ec_transfer(struct wilco_ec_device *ec,
|
||||||
return -EBADMSG;
|
return -EBADMSG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rs->data_size != size) {
|
if (rs->data_size != EC_MAILBOX_DATA_SIZE) {
|
||||||
dev_dbg(ec->dev, "unexpected packet size (%u != %zu)",
|
dev_dbg(ec->dev, "unexpected packet size (%u != %u)",
|
||||||
rs->data_size, size);
|
rs->data_size, EC_MAILBOX_DATA_SIZE);
|
||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,12 +13,9 @@
|
||||||
|
|
||||||
/* Message flags for using the mailbox() interface */
|
/* Message flags for using the mailbox() interface */
|
||||||
#define WILCO_EC_FLAG_NO_RESPONSE BIT(0) /* EC does not respond */
|
#define WILCO_EC_FLAG_NO_RESPONSE BIT(0) /* EC does not respond */
|
||||||
#define WILCO_EC_FLAG_EXTENDED_DATA BIT(1) /* EC returns 256 data bytes */
|
|
||||||
|
|
||||||
/* Normal commands have a maximum 32 bytes of data */
|
/* Normal commands have a maximum 32 bytes of data */
|
||||||
#define EC_MAILBOX_DATA_SIZE 32
|
#define EC_MAILBOX_DATA_SIZE 32
|
||||||
/* Extended commands have 256 bytes of response data */
|
|
||||||
#define EC_MAILBOX_DATA_SIZE_EXTENDED 256
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct wilco_ec_device - Wilco Embedded Controller handle.
|
* struct wilco_ec_device - Wilco Embedded Controller handle.
|
||||||
|
@ -85,14 +82,12 @@ struct wilco_ec_response {
|
||||||
* enum wilco_ec_msg_type - Message type to select a set of command codes.
|
* enum wilco_ec_msg_type - Message type to select a set of command codes.
|
||||||
* @WILCO_EC_MSG_LEGACY: Legacy EC messages for standard EC behavior.
|
* @WILCO_EC_MSG_LEGACY: Legacy EC messages for standard EC behavior.
|
||||||
* @WILCO_EC_MSG_PROPERTY: Get/Set/Sync EC controlled NVRAM property.
|
* @WILCO_EC_MSG_PROPERTY: Get/Set/Sync EC controlled NVRAM property.
|
||||||
* @WILCO_EC_MSG_TELEMETRY_SHORT: 32 bytes of telemetry data provided by the EC.
|
* @WILCO_EC_MSG_TELEMETRY: Request telemetry data from the EC.
|
||||||
* @WILCO_EC_MSG_TELEMETRY_LONG: 256 bytes of telemetry data provided by the EC.
|
|
||||||
*/
|
*/
|
||||||
enum wilco_ec_msg_type {
|
enum wilco_ec_msg_type {
|
||||||
WILCO_EC_MSG_LEGACY = 0x00f0,
|
WILCO_EC_MSG_LEGACY = 0x00f0,
|
||||||
WILCO_EC_MSG_PROPERTY = 0x00f2,
|
WILCO_EC_MSG_PROPERTY = 0x00f2,
|
||||||
WILCO_EC_MSG_TELEMETRY_SHORT = 0x00f5,
|
WILCO_EC_MSG_TELEMETRY = 0x00f5,
|
||||||
WILCO_EC_MSG_TELEMETRY_LONG = 0x00f6,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue