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

platform/chrome: cros_ec_proto: Add trace event to trace EC commands



This is useful to see which EC commands are being executed and when.

To enable:

    echo 1 > /sys/kernel/debug/tracing/events/cros_ec/enable

Example:

    cros_ec_cmd: version: 0, command: EC_CMD_GET_VERSION
    cros_ec_cmd: version: 0, command: EC_CMD_GET_PROTOCOL_INFO
    cros_ec_cmd: version: 1, command: EC_CMD_GET_CMD_VERSIONS
    cros_ec_cmd: version: 1, command: EC_CMD_USB_PD_CONTROL

The list of current commands is generated using the following script:

    sed -n 's/^#define \(EC_CMD_[[:alnum:]_]*\)\s.*/\tTRACE_SYMBOL(\1),\\/p' include/linux/mfd/cros_ec_commands.h

Signed-off-by: default avatarRaul E Rangel <rrangel@chromium.org>
Reviewed-by: default avatarRoss Zwisler <zwisler@google.com>
Reviewed-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: default avatarEnric Balletbo i Serra <enric.balletbo@collabora.com>
parent 81f6ec23
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0

# tell define_trace.h where to find the cros ec trace header
CFLAGS_cros_ec_trace.o:=		-I$(src)

obj-$(CONFIG_CHROMEOS_LAPTOP)		+= chromeos_laptop.o
obj-$(CONFIG_CHROMEOS_PSTORE)		+= chromeos_pstore.o
obj-$(CONFIG_CHROMEOS_TBMC)		+= chromeos_tbmc.o
@@ -9,7 +12,7 @@ obj-$(CONFIG_CROS_EC_SPI) += cros_ec_spi.o
cros_ec_lpcs-objs			:= cros_ec_lpc.o cros_ec_lpc_reg.o
cros_ec_lpcs-$(CONFIG_CROS_EC_LPC_MEC)	+= cros_ec_lpc_mec.o
obj-$(CONFIG_CROS_EC_LPC)		+= cros_ec_lpcs.o
obj-$(CONFIG_CROS_EC_PROTO)		+= cros_ec_proto.o
obj-$(CONFIG_CROS_EC_PROTO)		+= cros_ec_proto.o cros_ec_trace.o
obj-$(CONFIG_CROS_KBD_LED_BACKLIGHT)	+= cros_kbd_led_backlight.o
obj-$(CONFIG_CROS_EC_LIGHTBAR)		+= cros_ec_lightbar.o
obj-$(CONFIG_CROS_EC_VBC)		+= cros_ec_vbc.o
+4 −0
Original line number Diff line number Diff line
@@ -10,6 +10,8 @@
#include <linux/slab.h>
#include <asm/unaligned.h>

#include "cros_ec_trace.h"

#define EC_COMMAND_RETRIES	50

static int prepare_packet(struct cros_ec_device *ec_dev,
@@ -51,6 +53,8 @@ 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
+124 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
// Trace events for the ChromeOS Embedded Controller
//
// Copyright 2019 Google LLC.

#define TRACE_SYMBOL(a) {a, #a}

// Generate the list using the following script:
// sed -n 's/^#define \(EC_CMD_[[:alnum:]_]*\)\s.*/\tTRACE_SYMBOL(\1), \\/p' include/linux/mfd/cros_ec_commands.h
#define EC_CMDS \
	TRACE_SYMBOL(EC_CMD_PROTO_VERSION), \
	TRACE_SYMBOL(EC_CMD_HELLO), \
	TRACE_SYMBOL(EC_CMD_GET_VERSION), \
	TRACE_SYMBOL(EC_CMD_READ_TEST), \
	TRACE_SYMBOL(EC_CMD_GET_BUILD_INFO), \
	TRACE_SYMBOL(EC_CMD_GET_CHIP_INFO), \
	TRACE_SYMBOL(EC_CMD_GET_BOARD_VERSION), \
	TRACE_SYMBOL(EC_CMD_READ_MEMMAP), \
	TRACE_SYMBOL(EC_CMD_GET_CMD_VERSIONS), \
	TRACE_SYMBOL(EC_CMD_GET_COMMS_STATUS), \
	TRACE_SYMBOL(EC_CMD_TEST_PROTOCOL), \
	TRACE_SYMBOL(EC_CMD_GET_PROTOCOL_INFO), \
	TRACE_SYMBOL(EC_CMD_GSV_PAUSE_IN_S5), \
	TRACE_SYMBOL(EC_CMD_GET_FEATURES), \
	TRACE_SYMBOL(EC_CMD_FLASH_INFO), \
	TRACE_SYMBOL(EC_CMD_FLASH_READ), \
	TRACE_SYMBOL(EC_CMD_FLASH_WRITE), \
	TRACE_SYMBOL(EC_CMD_FLASH_ERASE), \
	TRACE_SYMBOL(EC_CMD_FLASH_PROTECT), \
	TRACE_SYMBOL(EC_CMD_FLASH_REGION_INFO), \
	TRACE_SYMBOL(EC_CMD_VBNV_CONTEXT), \
	TRACE_SYMBOL(EC_CMD_PWM_GET_FAN_TARGET_RPM), \
	TRACE_SYMBOL(EC_CMD_PWM_SET_FAN_TARGET_RPM), \
	TRACE_SYMBOL(EC_CMD_PWM_GET_KEYBOARD_BACKLIGHT), \
	TRACE_SYMBOL(EC_CMD_PWM_SET_KEYBOARD_BACKLIGHT), \
	TRACE_SYMBOL(EC_CMD_PWM_SET_FAN_DUTY), \
	TRACE_SYMBOL(EC_CMD_PWM_SET_DUTY), \
	TRACE_SYMBOL(EC_CMD_PWM_GET_DUTY), \
	TRACE_SYMBOL(EC_CMD_LIGHTBAR_CMD), \
	TRACE_SYMBOL(EC_CMD_LED_CONTROL), \
	TRACE_SYMBOL(EC_CMD_VBOOT_HASH), \
	TRACE_SYMBOL(EC_CMD_MOTION_SENSE_CMD), \
	TRACE_SYMBOL(EC_CMD_USB_CHARGE_SET_MODE), \
	TRACE_SYMBOL(EC_CMD_PSTORE_INFO), \
	TRACE_SYMBOL(EC_CMD_PSTORE_READ), \
	TRACE_SYMBOL(EC_CMD_PSTORE_WRITE), \
	TRACE_SYMBOL(EC_CMD_RTC_GET_VALUE), \
	TRACE_SYMBOL(EC_CMD_RTC_GET_ALARM), \
	TRACE_SYMBOL(EC_CMD_RTC_SET_VALUE), \
	TRACE_SYMBOL(EC_CMD_RTC_SET_ALARM), \
	TRACE_SYMBOL(EC_CMD_PORT80_LAST_BOOT), \
	TRACE_SYMBOL(EC_CMD_PORT80_READ), \
	TRACE_SYMBOL(EC_CMD_THERMAL_SET_THRESHOLD), \
	TRACE_SYMBOL(EC_CMD_THERMAL_GET_THRESHOLD), \
	TRACE_SYMBOL(EC_CMD_THERMAL_AUTO_FAN_CTRL), \
	TRACE_SYMBOL(EC_CMD_TMP006_GET_CALIBRATION), \
	TRACE_SYMBOL(EC_CMD_TMP006_SET_CALIBRATION), \
	TRACE_SYMBOL(EC_CMD_TMP006_GET_RAW), \
	TRACE_SYMBOL(EC_CMD_MKBP_STATE), \
	TRACE_SYMBOL(EC_CMD_MKBP_INFO), \
	TRACE_SYMBOL(EC_CMD_MKBP_SIMULATE_KEY), \
	TRACE_SYMBOL(EC_CMD_MKBP_SET_CONFIG), \
	TRACE_SYMBOL(EC_CMD_MKBP_GET_CONFIG), \
	TRACE_SYMBOL(EC_CMD_KEYSCAN_SEQ_CTRL), \
	TRACE_SYMBOL(EC_CMD_GET_NEXT_EVENT), \
	TRACE_SYMBOL(EC_CMD_TEMP_SENSOR_GET_INFO), \
	TRACE_SYMBOL(EC_CMD_HOST_EVENT_GET_B), \
	TRACE_SYMBOL(EC_CMD_HOST_EVENT_GET_SMI_MASK), \
	TRACE_SYMBOL(EC_CMD_HOST_EVENT_GET_SCI_MASK), \
	TRACE_SYMBOL(EC_CMD_HOST_EVENT_GET_WAKE_MASK), \
	TRACE_SYMBOL(EC_CMD_HOST_EVENT_SET_SMI_MASK), \
	TRACE_SYMBOL(EC_CMD_HOST_EVENT_SET_SCI_MASK), \
	TRACE_SYMBOL(EC_CMD_HOST_EVENT_CLEAR), \
	TRACE_SYMBOL(EC_CMD_HOST_EVENT_SET_WAKE_MASK), \
	TRACE_SYMBOL(EC_CMD_HOST_EVENT_CLEAR_B), \
	TRACE_SYMBOL(EC_CMD_SWITCH_ENABLE_BKLIGHT), \
	TRACE_SYMBOL(EC_CMD_SWITCH_ENABLE_WIRELESS), \
	TRACE_SYMBOL(EC_CMD_GPIO_SET), \
	TRACE_SYMBOL(EC_CMD_GPIO_GET), \
	TRACE_SYMBOL(EC_CMD_I2C_READ), \
	TRACE_SYMBOL(EC_CMD_I2C_WRITE), \
	TRACE_SYMBOL(EC_CMD_CHARGE_CONTROL), \
	TRACE_SYMBOL(EC_CMD_CONSOLE_SNAPSHOT), \
	TRACE_SYMBOL(EC_CMD_CONSOLE_READ), \
	TRACE_SYMBOL(EC_CMD_BATTERY_CUT_OFF), \
	TRACE_SYMBOL(EC_CMD_USB_MUX), \
	TRACE_SYMBOL(EC_CMD_LDO_SET), \
	TRACE_SYMBOL(EC_CMD_LDO_GET), \
	TRACE_SYMBOL(EC_CMD_POWER_INFO), \
	TRACE_SYMBOL(EC_CMD_I2C_PASSTHRU), \
	TRACE_SYMBOL(EC_CMD_HANG_DETECT), \
	TRACE_SYMBOL(EC_CMD_CHARGE_STATE), \
	TRACE_SYMBOL(EC_CMD_CHARGE_CURRENT_LIMIT), \
	TRACE_SYMBOL(EC_CMD_EXTERNAL_POWER_LIMIT), \
	TRACE_SYMBOL(EC_CMD_HOST_SLEEP_EVENT), \
	TRACE_SYMBOL(EC_CMD_SB_READ_WORD), \
	TRACE_SYMBOL(EC_CMD_SB_WRITE_WORD), \
	TRACE_SYMBOL(EC_CMD_SB_READ_BLOCK), \
	TRACE_SYMBOL(EC_CMD_SB_WRITE_BLOCK), \
	TRACE_SYMBOL(EC_CMD_BATTERY_VENDOR_PARAM), \
	TRACE_SYMBOL(EC_CMD_CODEC_I2S), \
	TRACE_SYMBOL(EC_CMD_REBOOT_EC), \
	TRACE_SYMBOL(EC_CMD_GET_PANIC_INFO), \
	TRACE_SYMBOL(EC_CMD_ACPI_READ), \
	TRACE_SYMBOL(EC_CMD_ACPI_WRITE), \
	TRACE_SYMBOL(EC_CMD_ACPI_QUERY_EVENT), \
	TRACE_SYMBOL(EC_CMD_CEC_WRITE_MSG), \
	TRACE_SYMBOL(EC_CMD_CEC_SET), \
	TRACE_SYMBOL(EC_CMD_CEC_GET), \
	TRACE_SYMBOL(EC_CMD_REBOOT), \
	TRACE_SYMBOL(EC_CMD_RESEND_RESPONSE), \
	TRACE_SYMBOL(EC_CMD_VERSION0), \
	TRACE_SYMBOL(EC_CMD_PD_EXCHANGE_STATUS), \
	TRACE_SYMBOL(EC_CMD_USB_PD_CONTROL), \
	TRACE_SYMBOL(EC_CMD_USB_PD_PORTS), \
	TRACE_SYMBOL(EC_CMD_USB_PD_POWER_INFO), \
	TRACE_SYMBOL(EC_CMD_CHARGE_PORT_COUNT), \
	TRACE_SYMBOL(EC_CMD_USB_PD_DISCOVERY), \
	TRACE_SYMBOL(EC_CMD_PD_CHARGE_PORT_OVERRIDE), \
	TRACE_SYMBOL(EC_CMD_PD_GET_LOG_ENTRY), \
	TRACE_SYMBOL(EC_CMD_USB_PD_MUX_INFO)

#define CREATE_TRACE_POINTS
#include "cros_ec_trace.h"
+51 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Trace events for the ChromeOS Embedded Controller
 *
 * Copyright 2019 Google LLC.
 */

#undef TRACE_SYSTEM
#define TRACE_SYSTEM cros_ec

#if !defined(_CROS_EC_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
#define _CROS_EC_TRACE_H_

#include <linux/types.h>
#include <linux/mfd/cros_ec.h>

#include <linux/tracepoint.h>

DECLARE_EVENT_CLASS(cros_ec_cmd_class,
	TP_PROTO(struct cros_ec_command *cmd),
	TP_ARGS(cmd),
	TP_STRUCT__entry(
		__field(uint32_t, version)
		__field(uint32_t, command)
	),
	TP_fast_assign(
		__entry->version = cmd->version;
		__entry->command = cmd->command;
	),
	TP_printk("version: %u, command: %s", __entry->version,
		  __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)
);


#endif /* _CROS_EC_TRACE_H_ */

/* this part must be outside header guard */

#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH .

#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_FILE cros_ec_trace

#include <trace/define_trace.h>