aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaul E Rangel <rrangel@chromium.org>2019-04-16 17:03:28 -0400
committerEnric Balletbo i Serra <enric.balletbo@collabora.com>2019-04-17 04:29:34 -0400
commit58a2109f6eb46b2952e2ce3fe776ce02c0c540dd (patch)
tree7d97942d8f269a70b31e2de50c3fbcfde824e721
parent81f6ec233355be6898d99add553d27e31b4b7cd7 (diff)
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>
-rw-r--r--drivers/platform/chrome/Makefile5
-rw-r--r--drivers/platform/chrome/cros_ec_proto.c4
-rw-r--r--drivers/platform/chrome/cros_ec_trace.c124
-rw-r--r--drivers/platform/chrome/cros_ec_trace.h51
4 files changed, 183 insertions, 1 deletions
diff --git a/drivers/platform/chrome/Makefile b/drivers/platform/chrome/Makefile
index 2cdee395c9f1..1b2f1dcfcd5c 100644
--- a/drivers/platform/chrome/Makefile
+++ b/drivers/platform/chrome/Makefile
@@ -1,5 +1,8 @@
1# SPDX-License-Identifier: GPL-2.0 1# SPDX-License-Identifier: GPL-2.0
2 2
3# tell define_trace.h where to find the cros ec trace header
4CFLAGS_cros_ec_trace.o:= -I$(src)
5
3obj-$(CONFIG_CHROMEOS_LAPTOP) += chromeos_laptop.o 6obj-$(CONFIG_CHROMEOS_LAPTOP) += chromeos_laptop.o
4obj-$(CONFIG_CHROMEOS_PSTORE) += chromeos_pstore.o 7obj-$(CONFIG_CHROMEOS_PSTORE) += chromeos_pstore.o
5obj-$(CONFIG_CHROMEOS_TBMC) += chromeos_tbmc.o 8obj-$(CONFIG_CHROMEOS_TBMC) += chromeos_tbmc.o
@@ -9,7 +12,7 @@ obj-$(CONFIG_CROS_EC_SPI) += cros_ec_spi.o
9cros_ec_lpcs-objs := cros_ec_lpc.o cros_ec_lpc_reg.o 12cros_ec_lpcs-objs := cros_ec_lpc.o cros_ec_lpc_reg.o
10cros_ec_lpcs-$(CONFIG_CROS_EC_LPC_MEC) += cros_ec_lpc_mec.o 13cros_ec_lpcs-$(CONFIG_CROS_EC_LPC_MEC) += cros_ec_lpc_mec.o
11obj-$(CONFIG_CROS_EC_LPC) += cros_ec_lpcs.o 14obj-$(CONFIG_CROS_EC_LPC) += cros_ec_lpcs.o
12obj-$(CONFIG_CROS_EC_PROTO) += cros_ec_proto.o 15obj-$(CONFIG_CROS_EC_PROTO) += cros_ec_proto.o cros_ec_trace.o
13obj-$(CONFIG_CROS_KBD_LED_BACKLIGHT) += cros_kbd_led_backlight.o 16obj-$(CONFIG_CROS_KBD_LED_BACKLIGHT) += cros_kbd_led_backlight.o
14obj-$(CONFIG_CROS_EC_LIGHTBAR) += cros_ec_lightbar.o 17obj-$(CONFIG_CROS_EC_LIGHTBAR) += cros_ec_lightbar.o
15obj-$(CONFIG_CROS_EC_VBC) += cros_ec_vbc.o 18obj-$(CONFIG_CROS_EC_VBC) += cros_ec_vbc.o
diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
index 3bb954997ebc..171475862ede 100644
--- a/drivers/platform/chrome/cros_ec_proto.c
+++ b/drivers/platform/chrome/cros_ec_proto.c
@@ -10,6 +10,8 @@
10#include <linux/slab.h> 10#include <linux/slab.h>
11#include <asm/unaligned.h> 11#include <asm/unaligned.h>
12 12
13#include "cros_ec_trace.h"
14
13#define EC_COMMAND_RETRIES 50 15#define EC_COMMAND_RETRIES 50
14 16
15static int prepare_packet(struct cros_ec_device *ec_dev, 17static int prepare_packet(struct cros_ec_device *ec_dev,
@@ -51,6 +53,8 @@ static int send_command(struct cros_ec_device *ec_dev,
51 int ret; 53 int ret;
52 int (*xfer_fxn)(struct cros_ec_device *ec, struct cros_ec_command *msg); 54 int (*xfer_fxn)(struct cros_ec_device *ec, struct cros_ec_command *msg);
53 55
56 trace_cros_ec_cmd(msg);
57
54 if (ec_dev->proto_version > 2) 58 if (ec_dev->proto_version > 2)
55 xfer_fxn = ec_dev->pkt_xfer; 59 xfer_fxn = ec_dev->pkt_xfer;
56 else 60 else
diff --git a/drivers/platform/chrome/cros_ec_trace.c b/drivers/platform/chrome/cros_ec_trace.c
new file mode 100644
index 000000000000..0a76412095a9
--- /dev/null
+++ b/drivers/platform/chrome/cros_ec_trace.c
@@ -0,0 +1,124 @@
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"
diff --git a/drivers/platform/chrome/cros_ec_trace.h b/drivers/platform/chrome/cros_ec_trace.h
new file mode 100644
index 000000000000..7ae3b89c78b9
--- /dev/null
+++ b/drivers/platform/chrome/cros_ec_trace.h
@@ -0,0 +1,51 @@
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
19DECLARE_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
35DEFINE_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>