diff options
author | Raul E Rangel <rrangel@chromium.org> | 2019-04-16 17:03:28 -0400 |
---|---|---|
committer | Enric Balletbo i Serra <enric.balletbo@collabora.com> | 2019-04-17 04:29:34 -0400 |
commit | 58a2109f6eb46b2952e2ce3fe776ce02c0c540dd (patch) | |
tree | 7d97942d8f269a70b31e2de50c3fbcfde824e721 | |
parent | 81f6ec233355be6898d99add553d27e31b4b7cd7 (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/Makefile | 5 | ||||
-rw-r--r-- | drivers/platform/chrome/cros_ec_proto.c | 4 | ||||
-rw-r--r-- | drivers/platform/chrome/cros_ec_trace.c | 124 | ||||
-rw-r--r-- | drivers/platform/chrome/cros_ec_trace.h | 51 |
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 | ||
4 | CFLAGS_cros_ec_trace.o:= -I$(src) | ||
5 | |||
3 | obj-$(CONFIG_CHROMEOS_LAPTOP) += chromeos_laptop.o | 6 | obj-$(CONFIG_CHROMEOS_LAPTOP) += chromeos_laptop.o |
4 | obj-$(CONFIG_CHROMEOS_PSTORE) += chromeos_pstore.o | 7 | obj-$(CONFIG_CHROMEOS_PSTORE) += chromeos_pstore.o |
5 | obj-$(CONFIG_CHROMEOS_TBMC) += chromeos_tbmc.o | 8 | obj-$(CONFIG_CHROMEOS_TBMC) += chromeos_tbmc.o |
@@ -9,7 +12,7 @@ obj-$(CONFIG_CROS_EC_SPI) += cros_ec_spi.o | |||
9 | cros_ec_lpcs-objs := cros_ec_lpc.o cros_ec_lpc_reg.o | 12 | cros_ec_lpcs-objs := cros_ec_lpc.o cros_ec_lpc_reg.o |
10 | cros_ec_lpcs-$(CONFIG_CROS_EC_LPC_MEC) += cros_ec_lpc_mec.o | 13 | cros_ec_lpcs-$(CONFIG_CROS_EC_LPC_MEC) += cros_ec_lpc_mec.o |
11 | obj-$(CONFIG_CROS_EC_LPC) += cros_ec_lpcs.o | 14 | obj-$(CONFIG_CROS_EC_LPC) += cros_ec_lpcs.o |
12 | obj-$(CONFIG_CROS_EC_PROTO) += cros_ec_proto.o | 15 | obj-$(CONFIG_CROS_EC_PROTO) += cros_ec_proto.o cros_ec_trace.o |
13 | obj-$(CONFIG_CROS_KBD_LED_BACKLIGHT) += cros_kbd_led_backlight.o | 16 | obj-$(CONFIG_CROS_KBD_LED_BACKLIGHT) += cros_kbd_led_backlight.o |
14 | obj-$(CONFIG_CROS_EC_LIGHTBAR) += cros_ec_lightbar.o | 17 | obj-$(CONFIG_CROS_EC_LIGHTBAR) += cros_ec_lightbar.o |
15 | obj-$(CONFIG_CROS_EC_VBC) += cros_ec_vbc.o | 18 | obj-$(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 | ||
15 | static int prepare_packet(struct cros_ec_device *ec_dev, | 17 | static 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 | |||
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> | ||