Commit 205c9326 authored by Raul E Rangel's avatar Raul E Rangel Committed by Enric Balletbo i Serra
Browse files

platform/chrome: cros_ec_proto: Add response tracing



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: default avatarRaul E Rangel <rrangel@chromium.org>
Signed-off-by: default avatarEnric Balletbo i Serra <enric.balletbo@collabora.com>
parent 086338df
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -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)
+24 −0
Original line number Diff line number Diff line
@@ -182,5 +182,29 @@
	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"
+21 −5
Original line number Diff line number Diff line
@@ -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)
);