]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
platform/chrome: cros_ec_proto: Add response tracing
authorRaul E Rangel <rrangel@chromium.org>
Mon, 25 Nov 2019 17:45:39 +0000 (10:45 -0700)
committerEnric Balletbo i Serra <enric.balletbo@collabora.com>
Tue, 10 Dec 2019 09:14:02 +0000 (10:14 +0100)
Add the ability to view response codes as well.

I dropped the EVENT_CLASS since there is only one event per class.

cros_ec_cmd has now been renamed to cros_ec_request_start.

Example:
$ echo 1 > /sys/kernel/debug/tracing/events/cros_ec/enable
$ cat /sys/kernel/debug/tracing/trace

369.416372: cros_ec_request_start: version: 0, command: EC_CMD_USB_PD_POWER_INFO
369.420528: cros_ec_request_done: version: 0, command: EC_CMD_USB_PD_POWER_INFO, ec result: EC_RES_SUCCESS, retval: 16
369.420529: cros_ec_request_start: version: 0, command: EC_CMD_USB_PD_DISCOVERY
369.421383: cros_ec_request_done: version: 0, command: EC_CMD_USB_PD_DISCOVERY, ec result: EC_RES_SUCCESS, retval: 5

Signed-off-by: Raul E Rangel <rrangel@chromium.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
drivers/platform/chrome/cros_ec_proto.c
drivers/platform/chrome/cros_ec_trace.c
drivers/platform/chrome/cros_ec_trace.h

index da1b1c45043333fa66d47442d20669d0df99cc0b..3cfa643f1d073d531161b752bbd47386d1793bea 100644 (file)
@@ -54,8 +54,6 @@ static int send_command(struct cros_ec_device *ec_dev,
        int ret;
        int (*xfer_fxn)(struct cros_ec_device *ec, struct cros_ec_command *msg);
 
-       trace_cros_ec_cmd(msg);
-
        if (ec_dev->proto_version > 2)
                xfer_fxn = ec_dev->pkt_xfer;
        else
@@ -72,7 +70,9 @@ static int send_command(struct cros_ec_device *ec_dev,
                return -EIO;
        }
 
+       trace_cros_ec_request_start(msg);
        ret = (*xfer_fxn)(ec_dev, msg);
+       trace_cros_ec_request_done(msg, ret);
        if (msg->result == EC_RES_IN_PROGRESS) {
                int i;
                struct cros_ec_command *status_msg;
@@ -95,7 +95,9 @@ static int send_command(struct cros_ec_device *ec_dev,
                for (i = 0; i < EC_COMMAND_RETRIES; i++) {
                        usleep_range(10000, 11000);
 
+                       trace_cros_ec_request_start(status_msg);
                        ret = (*xfer_fxn)(ec_dev, status_msg);
+                       trace_cros_ec_request_done(status_msg, ret);
                        if (ret == -EAGAIN)
                                continue;
                        if (ret < 0)
index e4f5d70f88091e87cf2acd51cf45843620b0592c..523a39bd0ff67e5175ac5f559855ea5d631c0d7b 100644 (file)
        TRACE_SYMBOL(EC_CMD_BOARD_SPECIFIC_BASE), \
        TRACE_SYMBOL(EC_CMD_BOARD_SPECIFIC_LAST)
 
+/* See the enum ec_status in include/linux/platform_data/cros_ec_commands.h */
+#define EC_RESULT \
+       TRACE_SYMBOL(EC_RES_SUCCESS), \
+       TRACE_SYMBOL(EC_RES_INVALID_COMMAND), \
+       TRACE_SYMBOL(EC_RES_ERROR), \
+       TRACE_SYMBOL(EC_RES_INVALID_PARAM), \
+       TRACE_SYMBOL(EC_RES_ACCESS_DENIED), \
+       TRACE_SYMBOL(EC_RES_INVALID_RESPONSE), \
+       TRACE_SYMBOL(EC_RES_INVALID_VERSION), \
+       TRACE_SYMBOL(EC_RES_INVALID_CHECKSUM), \
+       TRACE_SYMBOL(EC_RES_IN_PROGRESS), \
+       TRACE_SYMBOL(EC_RES_UNAVAILABLE), \
+       TRACE_SYMBOL(EC_RES_TIMEOUT), \
+       TRACE_SYMBOL(EC_RES_OVERFLOW), \
+       TRACE_SYMBOL(EC_RES_INVALID_HEADER), \
+       TRACE_SYMBOL(EC_RES_REQUEST_TRUNCATED), \
+       TRACE_SYMBOL(EC_RES_RESPONSE_TOO_BIG), \
+       TRACE_SYMBOL(EC_RES_BUS_ERROR), \
+       TRACE_SYMBOL(EC_RES_BUSY), \
+       TRACE_SYMBOL(EC_RES_INVALID_HEADER_VERSION), \
+       TRACE_SYMBOL(EC_RES_INVALID_HEADER_CRC), \
+       TRACE_SYMBOL(EC_RES_INVALID_DATA_CRC), \
+       TRACE_SYMBOL(EC_RES_DUP_UNAVAILABLE)
+
 #define CREATE_TRACE_POINTS
 #include "cros_ec_trace.h"
index 0dd4df30fa89d6c22b8653ffe0251f96e85301f9..e9fb05f89ef072d3ca468b7ef72339faa9dd1378 100644 (file)
@@ -18,7 +18,7 @@
 
 #include <linux/tracepoint.h>
 
-DECLARE_EVENT_CLASS(cros_ec_cmd_class,
+TRACE_EVENT(cros_ec_request_start,
        TP_PROTO(struct cros_ec_command *cmd),
        TP_ARGS(cmd),
        TP_STRUCT__entry(
@@ -33,10 +33,26 @@ DECLARE_EVENT_CLASS(cros_ec_cmd_class,
                  __print_symbolic(__entry->command, EC_CMDS))
 );
 
-
-DEFINE_EVENT(cros_ec_cmd_class, cros_ec_cmd,
-       TP_PROTO(struct cros_ec_command *cmd),
-       TP_ARGS(cmd)
+TRACE_EVENT(cros_ec_request_done,
+       TP_PROTO(struct cros_ec_command *cmd, int retval),
+       TP_ARGS(cmd, retval),
+       TP_STRUCT__entry(
+               __field(uint32_t, version)
+               __field(uint32_t, command)
+               __field(uint32_t, result)
+               __field(int, retval)
+       ),
+       TP_fast_assign(
+               __entry->version = cmd->version;
+               __entry->command = cmd->command;
+               __entry->result = cmd->result;
+               __entry->retval = retval;
+       ),
+       TP_printk("version: %u, command: %s, ec result: %s, retval: %d",
+                 __entry->version,
+                 __print_symbolic(__entry->command, EC_CMDS),
+                 __print_symbolic(__entry->result, EC_RESULT),
+                 __entry->retval)
 );