Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Raul E Rangel <rrangel@chromium.org>
Reviewed-by: Ross Zwisler <zwisler@google.com>
Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>

authored by

Raul E Rangel and committed by
Enric Balletbo i Serra
58a2109f 81f6ec23

+183 -1
+4 -1
drivers/platform/chrome/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 2 3 + # tell define_trace.h where to find the cros ec trace header 4 + CFLAGS_cros_ec_trace.o:= -I$(src) 5 + 3 6 obj-$(CONFIG_CHROMEOS_LAPTOP) += chromeos_laptop.o 4 7 obj-$(CONFIG_CHROMEOS_PSTORE) += chromeos_pstore.o 5 8 obj-$(CONFIG_CHROMEOS_TBMC) += chromeos_tbmc.o ··· 12 9 cros_ec_lpcs-objs := cros_ec_lpc.o cros_ec_lpc_reg.o 13 10 cros_ec_lpcs-$(CONFIG_CROS_EC_LPC_MEC) += cros_ec_lpc_mec.o 14 11 obj-$(CONFIG_CROS_EC_LPC) += cros_ec_lpcs.o 15 - obj-$(CONFIG_CROS_EC_PROTO) += cros_ec_proto.o 12 + obj-$(CONFIG_CROS_EC_PROTO) += cros_ec_proto.o cros_ec_trace.o 16 13 obj-$(CONFIG_CROS_KBD_LED_BACKLIGHT) += cros_kbd_led_backlight.o 17 14 obj-$(CONFIG_CROS_EC_LIGHTBAR) += cros_ec_lightbar.o 18 15 obj-$(CONFIG_CROS_EC_VBC) += cros_ec_vbc.o
+4
drivers/platform/chrome/cros_ec_proto.c
··· 10 10 #include <linux/slab.h> 11 11 #include <asm/unaligned.h> 12 12 13 + #include "cros_ec_trace.h" 14 + 13 15 #define EC_COMMAND_RETRIES 50 14 16 15 17 static int prepare_packet(struct cros_ec_device *ec_dev, ··· 52 50 { 53 51 int ret; 54 52 int (*xfer_fxn)(struct cros_ec_device *ec, struct cros_ec_command *msg); 53 + 54 + trace_cros_ec_cmd(msg); 55 55 56 56 if (ec_dev->proto_version > 2) 57 57 xfer_fxn = ec_dev->pkt_xfer;
+124
drivers/platform/chrome/cros_ec_trace.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + // Trace events for the ChromeOS Embedded Controller 3 + // 4 + // Copyright 2019 Google LLC. 5 + 6 + #define TRACE_SYMBOL(a) {a, #a} 7 + 8 + // Generate the list using the following script: 9 + // sed -n 's/^#define \(EC_CMD_[[:alnum:]_]*\)\s.*/\tTRACE_SYMBOL(\1), \\/p' include/linux/mfd/cros_ec_commands.h 10 + #define EC_CMDS \ 11 + TRACE_SYMBOL(EC_CMD_PROTO_VERSION), \ 12 + TRACE_SYMBOL(EC_CMD_HELLO), \ 13 + TRACE_SYMBOL(EC_CMD_GET_VERSION), \ 14 + TRACE_SYMBOL(EC_CMD_READ_TEST), \ 15 + TRACE_SYMBOL(EC_CMD_GET_BUILD_INFO), \ 16 + TRACE_SYMBOL(EC_CMD_GET_CHIP_INFO), \ 17 + TRACE_SYMBOL(EC_CMD_GET_BOARD_VERSION), \ 18 + TRACE_SYMBOL(EC_CMD_READ_MEMMAP), \ 19 + TRACE_SYMBOL(EC_CMD_GET_CMD_VERSIONS), \ 20 + TRACE_SYMBOL(EC_CMD_GET_COMMS_STATUS), \ 21 + TRACE_SYMBOL(EC_CMD_TEST_PROTOCOL), \ 22 + TRACE_SYMBOL(EC_CMD_GET_PROTOCOL_INFO), \ 23 + TRACE_SYMBOL(EC_CMD_GSV_PAUSE_IN_S5), \ 24 + TRACE_SYMBOL(EC_CMD_GET_FEATURES), \ 25 + TRACE_SYMBOL(EC_CMD_FLASH_INFO), \ 26 + TRACE_SYMBOL(EC_CMD_FLASH_READ), \ 27 + TRACE_SYMBOL(EC_CMD_FLASH_WRITE), \ 28 + TRACE_SYMBOL(EC_CMD_FLASH_ERASE), \ 29 + TRACE_SYMBOL(EC_CMD_FLASH_PROTECT), \ 30 + TRACE_SYMBOL(EC_CMD_FLASH_REGION_INFO), \ 31 + TRACE_SYMBOL(EC_CMD_VBNV_CONTEXT), \ 32 + TRACE_SYMBOL(EC_CMD_PWM_GET_FAN_TARGET_RPM), \ 33 + TRACE_SYMBOL(EC_CMD_PWM_SET_FAN_TARGET_RPM), \ 34 + TRACE_SYMBOL(EC_CMD_PWM_GET_KEYBOARD_BACKLIGHT), \ 35 + TRACE_SYMBOL(EC_CMD_PWM_SET_KEYBOARD_BACKLIGHT), \ 36 + TRACE_SYMBOL(EC_CMD_PWM_SET_FAN_DUTY), \ 37 + TRACE_SYMBOL(EC_CMD_PWM_SET_DUTY), \ 38 + TRACE_SYMBOL(EC_CMD_PWM_GET_DUTY), \ 39 + TRACE_SYMBOL(EC_CMD_LIGHTBAR_CMD), \ 40 + TRACE_SYMBOL(EC_CMD_LED_CONTROL), \ 41 + TRACE_SYMBOL(EC_CMD_VBOOT_HASH), \ 42 + TRACE_SYMBOL(EC_CMD_MOTION_SENSE_CMD), \ 43 + TRACE_SYMBOL(EC_CMD_USB_CHARGE_SET_MODE), \ 44 + TRACE_SYMBOL(EC_CMD_PSTORE_INFO), \ 45 + TRACE_SYMBOL(EC_CMD_PSTORE_READ), \ 46 + TRACE_SYMBOL(EC_CMD_PSTORE_WRITE), \ 47 + TRACE_SYMBOL(EC_CMD_RTC_GET_VALUE), \ 48 + TRACE_SYMBOL(EC_CMD_RTC_GET_ALARM), \ 49 + TRACE_SYMBOL(EC_CMD_RTC_SET_VALUE), \ 50 + TRACE_SYMBOL(EC_CMD_RTC_SET_ALARM), \ 51 + TRACE_SYMBOL(EC_CMD_PORT80_LAST_BOOT), \ 52 + TRACE_SYMBOL(EC_CMD_PORT80_READ), \ 53 + TRACE_SYMBOL(EC_CMD_THERMAL_SET_THRESHOLD), \ 54 + TRACE_SYMBOL(EC_CMD_THERMAL_GET_THRESHOLD), \ 55 + TRACE_SYMBOL(EC_CMD_THERMAL_AUTO_FAN_CTRL), \ 56 + TRACE_SYMBOL(EC_CMD_TMP006_GET_CALIBRATION), \ 57 + TRACE_SYMBOL(EC_CMD_TMP006_SET_CALIBRATION), \ 58 + TRACE_SYMBOL(EC_CMD_TMP006_GET_RAW), \ 59 + TRACE_SYMBOL(EC_CMD_MKBP_STATE), \ 60 + TRACE_SYMBOL(EC_CMD_MKBP_INFO), \ 61 + TRACE_SYMBOL(EC_CMD_MKBP_SIMULATE_KEY), \ 62 + TRACE_SYMBOL(EC_CMD_MKBP_SET_CONFIG), \ 63 + TRACE_SYMBOL(EC_CMD_MKBP_GET_CONFIG), \ 64 + TRACE_SYMBOL(EC_CMD_KEYSCAN_SEQ_CTRL), \ 65 + TRACE_SYMBOL(EC_CMD_GET_NEXT_EVENT), \ 66 + TRACE_SYMBOL(EC_CMD_TEMP_SENSOR_GET_INFO), \ 67 + TRACE_SYMBOL(EC_CMD_HOST_EVENT_GET_B), \ 68 + TRACE_SYMBOL(EC_CMD_HOST_EVENT_GET_SMI_MASK), \ 69 + TRACE_SYMBOL(EC_CMD_HOST_EVENT_GET_SCI_MASK), \ 70 + TRACE_SYMBOL(EC_CMD_HOST_EVENT_GET_WAKE_MASK), \ 71 + TRACE_SYMBOL(EC_CMD_HOST_EVENT_SET_SMI_MASK), \ 72 + TRACE_SYMBOL(EC_CMD_HOST_EVENT_SET_SCI_MASK), \ 73 + TRACE_SYMBOL(EC_CMD_HOST_EVENT_CLEAR), \ 74 + TRACE_SYMBOL(EC_CMD_HOST_EVENT_SET_WAKE_MASK), \ 75 + TRACE_SYMBOL(EC_CMD_HOST_EVENT_CLEAR_B), \ 76 + TRACE_SYMBOL(EC_CMD_SWITCH_ENABLE_BKLIGHT), \ 77 + TRACE_SYMBOL(EC_CMD_SWITCH_ENABLE_WIRELESS), \ 78 + TRACE_SYMBOL(EC_CMD_GPIO_SET), \ 79 + TRACE_SYMBOL(EC_CMD_GPIO_GET), \ 80 + TRACE_SYMBOL(EC_CMD_I2C_READ), \ 81 + TRACE_SYMBOL(EC_CMD_I2C_WRITE), \ 82 + TRACE_SYMBOL(EC_CMD_CHARGE_CONTROL), \ 83 + TRACE_SYMBOL(EC_CMD_CONSOLE_SNAPSHOT), \ 84 + TRACE_SYMBOL(EC_CMD_CONSOLE_READ), \ 85 + TRACE_SYMBOL(EC_CMD_BATTERY_CUT_OFF), \ 86 + TRACE_SYMBOL(EC_CMD_USB_MUX), \ 87 + TRACE_SYMBOL(EC_CMD_LDO_SET), \ 88 + TRACE_SYMBOL(EC_CMD_LDO_GET), \ 89 + TRACE_SYMBOL(EC_CMD_POWER_INFO), \ 90 + TRACE_SYMBOL(EC_CMD_I2C_PASSTHRU), \ 91 + TRACE_SYMBOL(EC_CMD_HANG_DETECT), \ 92 + TRACE_SYMBOL(EC_CMD_CHARGE_STATE), \ 93 + TRACE_SYMBOL(EC_CMD_CHARGE_CURRENT_LIMIT), \ 94 + TRACE_SYMBOL(EC_CMD_EXTERNAL_POWER_LIMIT), \ 95 + TRACE_SYMBOL(EC_CMD_HOST_SLEEP_EVENT), \ 96 + TRACE_SYMBOL(EC_CMD_SB_READ_WORD), \ 97 + TRACE_SYMBOL(EC_CMD_SB_WRITE_WORD), \ 98 + TRACE_SYMBOL(EC_CMD_SB_READ_BLOCK), \ 99 + TRACE_SYMBOL(EC_CMD_SB_WRITE_BLOCK), \ 100 + TRACE_SYMBOL(EC_CMD_BATTERY_VENDOR_PARAM), \ 101 + TRACE_SYMBOL(EC_CMD_CODEC_I2S), \ 102 + TRACE_SYMBOL(EC_CMD_REBOOT_EC), \ 103 + TRACE_SYMBOL(EC_CMD_GET_PANIC_INFO), \ 104 + TRACE_SYMBOL(EC_CMD_ACPI_READ), \ 105 + TRACE_SYMBOL(EC_CMD_ACPI_WRITE), \ 106 + TRACE_SYMBOL(EC_CMD_ACPI_QUERY_EVENT), \ 107 + TRACE_SYMBOL(EC_CMD_CEC_WRITE_MSG), \ 108 + TRACE_SYMBOL(EC_CMD_CEC_SET), \ 109 + TRACE_SYMBOL(EC_CMD_CEC_GET), \ 110 + TRACE_SYMBOL(EC_CMD_REBOOT), \ 111 + TRACE_SYMBOL(EC_CMD_RESEND_RESPONSE), \ 112 + TRACE_SYMBOL(EC_CMD_VERSION0), \ 113 + TRACE_SYMBOL(EC_CMD_PD_EXCHANGE_STATUS), \ 114 + TRACE_SYMBOL(EC_CMD_USB_PD_CONTROL), \ 115 + TRACE_SYMBOL(EC_CMD_USB_PD_PORTS), \ 116 + TRACE_SYMBOL(EC_CMD_USB_PD_POWER_INFO), \ 117 + TRACE_SYMBOL(EC_CMD_CHARGE_PORT_COUNT), \ 118 + TRACE_SYMBOL(EC_CMD_USB_PD_DISCOVERY), \ 119 + TRACE_SYMBOL(EC_CMD_PD_CHARGE_PORT_OVERRIDE), \ 120 + TRACE_SYMBOL(EC_CMD_PD_GET_LOG_ENTRY), \ 121 + TRACE_SYMBOL(EC_CMD_USB_PD_MUX_INFO) 122 + 123 + #define CREATE_TRACE_POINTS 124 + #include "cros_ec_trace.h"
+51
drivers/platform/chrome/cros_ec_trace.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* 3 + * Trace events for the ChromeOS Embedded Controller 4 + * 5 + * Copyright 2019 Google LLC. 6 + */ 7 + 8 + #undef TRACE_SYSTEM 9 + #define TRACE_SYSTEM cros_ec 10 + 11 + #if !defined(_CROS_EC_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 12 + #define _CROS_EC_TRACE_H_ 13 + 14 + #include <linux/types.h> 15 + #include <linux/mfd/cros_ec.h> 16 + 17 + #include <linux/tracepoint.h> 18 + 19 + DECLARE_EVENT_CLASS(cros_ec_cmd_class, 20 + TP_PROTO(struct cros_ec_command *cmd), 21 + TP_ARGS(cmd), 22 + TP_STRUCT__entry( 23 + __field(uint32_t, version) 24 + __field(uint32_t, command) 25 + ), 26 + TP_fast_assign( 27 + __entry->version = cmd->version; 28 + __entry->command = cmd->command; 29 + ), 30 + TP_printk("version: %u, command: %s", __entry->version, 31 + __print_symbolic(__entry->command, EC_CMDS)) 32 + ); 33 + 34 + 35 + DEFINE_EVENT(cros_ec_cmd_class, cros_ec_cmd, 36 + TP_PROTO(struct cros_ec_command *cmd), 37 + TP_ARGS(cmd) 38 + ); 39 + 40 + 41 + #endif /* _CROS_EC_TRACE_H_ */ 42 + 43 + /* this part must be outside header guard */ 44 + 45 + #undef TRACE_INCLUDE_PATH 46 + #define TRACE_INCLUDE_PATH . 47 + 48 + #undef TRACE_INCLUDE_FILE 49 + #define TRACE_INCLUDE_FILE cros_ec_trace 50 + 51 + #include <trace/define_trace.h>