* [PATCH] cros_ec: Add trace event to trace EC commands
@ 2019-04-10 20:24 Raul E Rangel
2019-04-10 20:41 ` Ross Zwisler
2019-04-11 21:55 ` Enric Balletbo Serra
0 siblings, 2 replies; 4+ messages in thread
From: Raul E Rangel @ 2019-04-10 20:24 UTC (permalink / raw)
To: linux-kernel
Cc: zwisler, djkurtz, Raul E Rangel, Enric Balletbo i Serra,
Guenter Roeck, Benson Leung
This is useful to see which EC commands are being executed and when.
To enable:
echo 'cros_ec:*' >> /sys/kernel/debug/tracing/set_event
Example:
/* cros_ec_cmd: version: 0, command: GET_VERSION */
/* cros_ec_cmd: version: 0, command: GET_PROTOCOL_INFO */
/* cros_ec_cmd: version: 1, command: GET_CMD_VERSIONS */
/* cros_ec_cmd: version: 1, command: USB_PD_CONTROL */
Signed-off-by: Raul E Rangel <rrangel@chromium.org>
---
drivers/platform/chrome/Makefile | 4 +-
drivers/platform/chrome/cros_ec_proto.c | 4 +
drivers/platform/chrome/cros_ec_trace.c | 163 ++++++++++++++++++++++++
drivers/platform/chrome/cros_ec_trace.h | 51 ++++++++
4 files changed, 221 insertions(+), 1 deletion(-)
create mode 100644 drivers/platform/chrome/cros_ec_trace.c
create mode 100644 drivers/platform/chrome/cros_ec_trace.h
diff --git a/drivers/platform/chrome/Makefile b/drivers/platform/chrome/Makefile
index 1e2f0029b597..e542268454a4 100644
--- a/drivers/platform/chrome/Makefile
+++ b/drivers/platform/chrome/Makefile
@@ -3,12 +3,14 @@
obj-$(CONFIG_CHROMEOS_LAPTOP) += chromeos_laptop.o
obj-$(CONFIG_CHROMEOS_PSTORE) += chromeos_pstore.o
obj-$(CONFIG_CHROMEOS_TBMC) += chromeos_tbmc.o
+# tell define_trace.h where to find the cros ec trace header
+CFLAGS_cros_ec_trace.o:= -I$(src)
obj-$(CONFIG_CROS_EC_I2C) += cros_ec_i2c.o
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
diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
index 97a068dff192..3d02c8259ac6 100644
--- a/drivers/platform/chrome/cros_ec_proto.c
+++ b/drivers/platform/chrome/cros_ec_proto.c
@@ -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
diff --git a/drivers/platform/chrome/cros_ec_trace.c b/drivers/platform/chrome/cros_ec_trace.c
new file mode 100644
index 000000000000..799c8e2bfd22
--- /dev/null
+++ b/drivers/platform/chrome/cros_ec_trace.c
@@ -0,0 +1,163 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Trace events for the ChromeOS Embedded Controller
+ *
+ * Copyright 2019 Google LLC.
+ */
+
+#define ec_cmds \
+ {EC_CMD_PROTO_VERSION, "PROTO_VERSION"}, \
+ {EC_CMD_HELLO, "HELLO"}, \
+ {EC_CMD_GET_VERSION, "GET_VERSION"}, \
+ {EC_CMD_READ_TEST, "READ_TEST"}, \
+ {EC_CMD_GET_BUILD_INFO, "GET_BUILD_INFO"}, \
+ {EC_CMD_GET_CHIP_INFO, "GET_CHIP_INFO"}, \
+ {EC_CMD_GET_BOARD_VERSION, "GET_BOARD_VERSION"}, \
+ {EC_CMD_READ_MEMMAP, "READ_MEMMAP"}, \
+ {EC_CMD_GET_CMD_VERSIONS, "GET_CMD_VERSIONS"}, \
+ {EC_CMD_GET_COMMS_STATUS, "GET_COMMS_STATUS"}, \
+ {EC_CMD_TEST_PROTOCOL, "TEST_PROTOCOL"}, \
+ {EC_CMD_GET_PROTOCOL_INFO, "GET_PROTOCOL_INFO"}, \
+ {EC_CMD_GSV_PAUSE_IN_S5, "GSV_PAUSE_IN_S5"}, \
+ {EC_CMD_GET_FEATURES, "GET_FEATURES"}, \
+ {EC_CMD_GET_SKU_ID, "GET_SKU_ID"}, \
+ {EC_CMD_SET_SKU_ID, "SET_SKU_ID"}, \
+ {EC_CMD_FLASH_INFO, "FLASH_INFO"}, \
+ {EC_CMD_FLASH_READ, "FLASH_READ"}, \
+ {EC_CMD_FLASH_WRITE, "FLASH_WRITE"}, \
+ {EC_CMD_FLASH_ERASE, "FLASH_ERASE"}, \
+ {EC_CMD_FLASH_PROTECT, "FLASH_PROTECT"}, \
+ {EC_CMD_FLASH_REGION_INFO, "FLASH_REGION_INFO"}, \
+ {EC_CMD_VBNV_CONTEXT, "VBNV_CONTEXT"}, \
+ {EC_CMD_FLASH_SPI_INFO, "FLASH_SPI_INFO"}, \
+ {EC_CMD_FLASH_SELECT, "FLASH_SELECT"}, \
+ {EC_CMD_PWM_GET_FAN_TARGET_RPM, "PWM_GET_FAN_TARGET_RPM"}, \
+ {EC_CMD_PWM_SET_FAN_TARGET_RPM, "PWM_SET_FAN_TARGET_RPM"}, \
+ {EC_CMD_PWM_GET_KEYBOARD_BACKLIGHT, "PWM_GET_KEYBOARD_BACKLIGHT"}, \
+ {EC_CMD_PWM_SET_KEYBOARD_BACKLIGHT, "PWM_SET_KEYBOARD_BACKLIGHT"}, \
+ {EC_CMD_PWM_SET_FAN_DUTY, "PWM_SET_FAN_DUTY"}, \
+ {EC_CMD_PWM_SET_DUTY, "PWM_SET_DUTY"}, \
+ {EC_CMD_PWM_GET_DUTY, "PWM_GET_DUTY"}, \
+ {EC_CMD_LIGHTBAR_CMD, "LIGHTBAR_CMD"}, \
+ {EC_CMD_LED_CONTROL, "LED_CONTROL"}, \
+ {EC_CMD_VBOOT_HASH, "VBOOT_HASH"}, \
+ {EC_CMD_MOTION_SENSE_CMD, "MOTION_SENSE_CMD"}, \
+ {EC_CMD_FORCE_LID_OPEN, "FORCE_LID_OPEN"}, \
+ {EC_CMD_CONFIG_POWER_BUTTON, "CONFIG_POWER_BUTTON"}, \
+ {EC_CMD_USB_CHARGE_SET_MODE, "USB_CHARGE_SET_MODE"}, \
+ {EC_CMD_PSTORE_INFO, "PSTORE_INFO"}, \
+ {EC_CMD_PSTORE_READ, "PSTORE_READ"}, \
+ {EC_CMD_PSTORE_WRITE, "PSTORE_WRITE"}, \
+ {EC_CMD_RTC_GET_VALUE, "RTC_GET_VALUE"}, \
+ {EC_CMD_RTC_GET_ALARM, "RTC_GET_ALARM"}, \
+ {EC_CMD_RTC_SET_VALUE, "RTC_SET_VALUE"}, \
+ {EC_CMD_RTC_SET_ALARM, "RTC_SET_ALARM"}, \
+ {EC_CMD_PORT80_READ, "PORT80_READ"}, \
+ {EC_CMD_VSTORE_INFO, "VSTORE_INFO"}, \
+ {EC_CMD_VSTORE_READ, "VSTORE_READ"}, \
+ {EC_CMD_VSTORE_WRITE, "VSTORE_WRITE"}, \
+ {EC_CMD_THERMAL_SET_THRESHOLD, "THERMAL_SET_THRESHOLD"}, \
+ {EC_CMD_THERMAL_GET_THRESHOLD, "THERMAL_GET_THRESHOLD"}, \
+ {EC_CMD_THERMAL_AUTO_FAN_CTRL, "THERMAL_AUTO_FAN_CTRL"}, \
+ {EC_CMD_TMP006_GET_CALIBRATION, "TMP006_GET_CALIBRATION"}, \
+ {EC_CMD_TMP006_SET_CALIBRATION, "TMP006_SET_CALIBRATION"}, \
+ {EC_CMD_TMP006_GET_RAW, "TMP006_GET_RAW"}, \
+ {EC_CMD_MKBP_STATE, "MKBP_STATE"}, \
+ {EC_CMD_MKBP_INFO, "MKBP_INFO"}, \
+ {EC_CMD_MKBP_SIMULATE_KEY, "MKBP_SIMULATE_KEY"}, \
+ {EC_CMD_MKBP_SET_CONFIG, "MKBP_SET_CONFIG"}, \
+ {EC_CMD_MKBP_GET_CONFIG, "MKBP_GET_CONFIG"}, \
+ {EC_CMD_KEYSCAN_SEQ_CTRL, "KEYSCAN_SEQ_CTRL"}, \
+ {EC_CMD_GET_NEXT_EVENT, "GET_NEXT_EVENT"}, \
+ {EC_CMD_KEYBOARD_FACTORY_TEST, "KEYBOARD_FACTORY_TEST"}, \
+ {EC_CMD_TEMP_SENSOR_GET_INFO, "TEMP_SENSOR_GET_INFO"}, \
+ {EC_CMD_ACPI_READ, "ACPI_READ"}, \
+ {EC_CMD_ACPI_WRITE, "ACPI_WRITE"}, \
+ {EC_CMD_ACPI_BURST_ENABLE, "ACPI_BURST_ENABLE"}, \
+ {EC_CMD_ACPI_BURST_DISABLE, "ACPI_BURST_DISABLE"}, \
+ {EC_CMD_ACPI_QUERY_EVENT, "ACPI_QUERY_EVENT"}, \
+ {EC_CMD_HOST_EVENT_GET_B, "HOST_EVENT_GET_B"}, \
+ {EC_CMD_HOST_EVENT_GET_SMI_MASK, "HOST_EVENT_GET_SMI_MASK"}, \
+ {EC_CMD_HOST_EVENT_GET_SCI_MASK, "HOST_EVENT_GET_SCI_MASK"}, \
+ {EC_CMD_HOST_EVENT_SET_SMI_MASK, "HOST_EVENT_SET_SMI_MASK"}, \
+ {EC_CMD_HOST_EVENT_SET_SCI_MASK, "HOST_EVENT_SET_SCI_MASK"}, \
+ {EC_CMD_HOST_EVENT_CLEAR, "HOST_EVENT_CLEAR"}, \
+ {EC_CMD_HOST_EVENT_GET_WAKE_MASK, "HOST_EVENT_GET_WAKE_MASK"}, \
+ {EC_CMD_HOST_EVENT_SET_WAKE_MASK, "HOST_EVENT_SET_WAKE_MASK"}, \
+ {EC_CMD_HOST_EVENT_CLEAR_B, "HOST_EVENT_CLEAR_B"}, \
+ {EC_CMD_SWITCH_ENABLE_BKLIGHT, "SWITCH_ENABLE_BKLIGHT"}, \
+ {EC_CMD_SWITCH_ENABLE_WIRELESS, "SWITCH_ENABLE_WIRELESS"}, \
+ {EC_CMD_GPIO_SET, "GPIO_SET"}, \
+ {EC_CMD_GPIO_GET, "GPIO_GET"}, \
+ {EC_CMD_I2C_READ, "I2C_READ"}, \
+ {EC_CMD_I2C_WRITE, "I2C_WRITE"}, \
+ {EC_CMD_CHARGE_CONTROL, "CHARGE_CONTROL"}, \
+ {EC_CMD_CONSOLE_SNAPSHOT, "CONSOLE_SNAPSHOT"}, \
+ {EC_CMD_CONSOLE_READ, "CONSOLE_READ"}, \
+ {EC_CMD_BATTERY_CUT_OFF, "BATTERY_CUT_OFF"}, \
+ {EC_CMD_USB_MUX, "USB_MUX"}, \
+ {EC_CMD_LDO_SET, "LDO_SET"}, \
+ {EC_CMD_LDO_GET, "LDO_GET"}, \
+ {EC_CMD_POWER_INFO, "POWER_INFO"}, \
+ {EC_CMD_I2C_PASSTHRU, "I2C_PASSTHRU"}, \
+ {EC_CMD_HANG_DETECT, "HANG_DETECT"}, \
+ {EC_CMD_CHARGE_STATE, "CHARGE_STATE"}, \
+ {EC_CMD_CHARGE_CURRENT_LIMIT, "CHARGE_CURRENT_LIMIT"}, \
+ {EC_CMD_EXTERNAL_POWER_LIMIT, "EXTERNAL_POWER_LIMIT"}, \
+ {EC_CMD_OVERRIDE_DEDICATED_CHARGER_LIMIT, \
+ "OVERRIDE_DEDICATED_CHARGER_LIMIT"}, \
+ {EC_CMD_HOST_EVENT, "HOST_EVENT"}, \
+ {EC_CMD_HIBERNATION_DELAY, "HIBERNATION_DELAY"}, \
+ {EC_CMD_HOST_SLEEP_EVENT, "HOST_SLEEP_EVENT"}, \
+ {EC_CMD_DEVICE_EVENT, "DEVICE_EVENT"}, \
+ {EC_CMD_SB_READ_WORD, "SB_READ_WORD"}, \
+ {EC_CMD_SB_WRITE_WORD, "SB_WRITE_WORD"}, \
+ {EC_CMD_SB_READ_BLOCK, "SB_READ_BLOCK"}, \
+ {EC_CMD_SB_WRITE_BLOCK, "SB_WRITE_BLOCK"}, \
+ {EC_CMD_BATTERY_VENDOR_PARAM, "BATTERY_VENDOR_PARAM"}, \
+ {EC_CMD_SB_FW_UPDATE, "SB_FW_UPDATE"}, \
+ {EC_CMD_ENTERING_MODE, "ENTERING_MODE"}, \
+ {EC_CMD_I2C_PASSTHRU_PROTECT, "I2C_PASSTHRU_PROTECT"}, \
+ {EC_CMD_REBOOT, "REBOOT"}, \
+ {EC_CMD_REBOOT_EC, "REBOOT_EC"}, \
+ {EC_CMD_GET_PANIC_INFO, "GET_PANIC_INFO"}, \
+ {EC_CMD_RESEND_RESPONSE, "RESEND_RESPONSE"}, \
+ {EC_CMD_VERSION0, "VERSION0"}, \
+ {EC_CMD_PD_EXCHANGE_STATUS, "PD_EXCHANGE_STATUS"}, \
+ {EC_CMD_USB_PD_CONTROL, "USB_PD_CONTROL"}, \
+ {EC_CMD_USB_PD_PORTS, "USB_PD_PORTS"}, \
+ {EC_CMD_USB_PD_POWER_INFO, "USB_PD_POWER_INFO"}, \
+ {EC_CMD_PD_HOST_EVENT_STATUS, "PD_HOST_EVENT_STATUS"}, \
+ {EC_CMD_USB_PD_FW_UPDATE, "USB_PD_FW_UPDATE"}, \
+ {EC_CMD_USB_PD_RW_HASH_ENTRY, "USB_PD_RW_HASH_ENTRY"}, \
+ {EC_CMD_USB_PD_DEV_INFO, "USB_PD_DEV_INFO"}, \
+ {EC_CMD_USB_PD_DISCOVERY, "USB_PD_DISCOVERY"}, \
+ {EC_CMD_PD_CHARGE_PORT_OVERRIDE, "PD_CHARGE_PORT_OVERRIDE"}, \
+ {EC_CMD_PD_GET_LOG_ENTRY, "PD_GET_LOG_ENTRY"}, \
+ {EC_CMD_USB_PD_GET_AMODE, "USB_PD_GET_AMODE"}, \
+ {EC_CMD_USB_PD_SET_AMODE, "USB_PD_SET_AMODE"}, \
+ {EC_CMD_PD_WRITE_LOG_ENTRY, "PD_WRITE_LOG_ENTRY"}, \
+ {EC_CMD_PD_CONTROL, "PD_CONTROL"}, \
+ {EC_CMD_USB_PD_MUX_INFO, "USB_PD_MUX_INFO"}, \
+ {EC_CMD_PD_CHIP_INFO, "PD_CHIP_INFO"}, \
+ {EC_CMD_RWSIG_CHECK_STATUS, "RWSIG_CHECK_STATUS"}, \
+ {EC_CMD_RWSIG_ACTION, "RWSIG_ACTION"}, \
+ {EC_CMD_CR51_BASE, "CR51_BASE"}, \
+ {EC_CMD_CR51_LAST, "CR51_LAST"}, \
+ {EC_CMD_FP_PASSTHRU, "FP_PASSTHRU"}, \
+ {EC_CMD_FP_SENSOR_CONFIG, "FP_SENSOR_CONFIG"}, \
+ {EC_CMD_FP_MODE, "FP_MODE"}, \
+ {EC_CMD_FP_INFO, "FP_INFO"}, \
+ {EC_CMD_FP_FRAME, "FP_FRAME"}, \
+ {EC_CMD_TP_SELF_TEST, "TP_SELF_TEST"}, \
+ {EC_CMD_TP_FRAME_INFO, "TP_FRAME_INFO"}, \
+ {EC_CMD_TP_FRAME_SNAPSHOT, "TP_FRAME_SNAPSHOT"}, \
+ {EC_CMD_TP_FRAME_GET, "TP_FRAME_GET"}, \
+ {EC_CMD_BATTERY_GET_STATIC, "BATTERY_GET_STATIC"}, \
+ {EC_CMD_BATTERY_GET_DYNAMIC, "BATTERY_GET_DYNAMIC"}, \
+ {EC_CMD_CHARGER_CONTROL, "CHARGER_CONTROL"}, \
+ {EC_CMD_BOARD_SPECIFIC_BASE, "BOARD_SPECIFIC_BASE"}, \
+ {EC_CMD_BOARD_SPECIFIC_LAST, "BOARD_SPECIFIC_LAST"}
+
+#define CREATE_TRACE_POINTS
+#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..86ef52f96fd4
--- /dev/null
+++ b/drivers/platform/chrome/cros_ec_trace.h
@@ -0,0 +1,51 @@
+/* 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>
--
2.21.0.392.gf8f6787159e-goog
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] cros_ec: Add trace event to trace EC commands
2019-04-10 20:24 [PATCH] cros_ec: Add trace event to trace EC commands Raul E Rangel
@ 2019-04-10 20:41 ` Ross Zwisler
2019-04-11 21:55 ` Enric Balletbo Serra
1 sibling, 0 replies; 4+ messages in thread
From: Ross Zwisler @ 2019-04-10 20:41 UTC (permalink / raw)
To: Raul E Rangel
Cc: linux-kernel, zwisler, djkurtz, Enric Balletbo i Serra,
Guenter Roeck, Benson Leung
On Wed, Apr 10, 2019 at 02:24:08PM -0600, Raul E Rangel wrote:
> This is useful to see which EC commands are being executed and when.
>
> To enable:
>
> echo 'cros_ec:*' >> /sys/kernel/debug/tracing/set_event
>
> Example:
>
> /* cros_ec_cmd: version: 0, command: GET_VERSION */
> /* cros_ec_cmd: version: 0, command: GET_PROTOCOL_INFO */
> /* cros_ec_cmd: version: 1, command: GET_CMD_VERSIONS */
> /* cros_ec_cmd: version: 1, command: USB_PD_CONTROL */
>
> Signed-off-by: Raul E Rangel <rrangel@chromium.org>
Reviewed-by: Ross Zwisler <zwisler@google.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] cros_ec: Add trace event to trace EC commands
2019-04-10 20:24 [PATCH] cros_ec: Add trace event to trace EC commands Raul E Rangel
2019-04-10 20:41 ` Ross Zwisler
@ 2019-04-11 21:55 ` Enric Balletbo Serra
2019-04-11 22:28 ` Raul Rangel
1 sibling, 1 reply; 4+ messages in thread
From: Enric Balletbo Serra @ 2019-04-11 21:55 UTC (permalink / raw)
To: Raul E Rangel
Cc: linux-kernel, zwisler, Daniel Kurtz, Enric Balletbo i Serra,
Guenter Roeck, Benson Leung
Hi,
Many thanks for sending this patch upstream. Looks really interesting.
Some few comments below ...
Please prefix the patch with "chrome/platform: cros_ec_proto: ..."
Missatge de Raul E Rangel <rrangel@chromium.org> del dia dc., 10
d’abr. 2019 a les 22:25:
>
> This is useful to see which EC commands are being executed and when.
>
> To enable:
>
> echo 'cros_ec:*' >> /sys/kernel/debug/tracing/set_event
>
> Example:
>
> /* cros_ec_cmd: version: 0, command: GET_VERSION */
> /* cros_ec_cmd: version: 0, command: GET_PROTOCOL_INFO */
> /* cros_ec_cmd: version: 1, command: GET_CMD_VERSIONS */
> /* cros_ec_cmd: version: 1, command: USB_PD_CONTROL */
>
> Signed-off-by: Raul E Rangel <rrangel@chromium.org>
> ---
>
> drivers/platform/chrome/Makefile | 4 +-
> drivers/platform/chrome/cros_ec_proto.c | 4 +
> drivers/platform/chrome/cros_ec_trace.c | 163 ++++++++++++++++++++++++
> drivers/platform/chrome/cros_ec_trace.h | 51 ++++++++
> 4 files changed, 221 insertions(+), 1 deletion(-)
> create mode 100644 drivers/platform/chrome/cros_ec_trace.c
> create mode 100644 drivers/platform/chrome/cros_ec_trace.h
>
> diff --git a/drivers/platform/chrome/Makefile b/drivers/platform/chrome/Makefile
> index 1e2f0029b597..e542268454a4 100644
> --- a/drivers/platform/chrome/Makefile
> +++ b/drivers/platform/chrome/Makefile
> @@ -3,12 +3,14 @@
> obj-$(CONFIG_CHROMEOS_LAPTOP) += chromeos_laptop.o
> obj-$(CONFIG_CHROMEOS_PSTORE) += chromeos_pstore.o
> obj-$(CONFIG_CHROMEOS_TBMC) += chromeos_tbmc.o
> +# tell define_trace.h where to find the cros ec trace header
> +CFLAGS_cros_ec_trace.o:= -I$(src)
> obj-$(CONFIG_CROS_EC_I2C) += cros_ec_i2c.o
> 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
> diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> index 97a068dff192..3d02c8259ac6 100644
> --- a/drivers/platform/chrome/cros_ec_proto.c
> +++ b/drivers/platform/chrome/cros_ec_proto.c
> @@ -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
> diff --git a/drivers/platform/chrome/cros_ec_trace.c b/drivers/platform/chrome/cros_ec_trace.c
> new file mode 100644
> index 000000000000..799c8e2bfd22
> --- /dev/null
> +++ b/drivers/platform/chrome/cros_ec_trace.c
> @@ -0,0 +1,163 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Trace events for the ChromeOS Embedded Controller
> + *
> + * Copyright 2019 Google LLC.
> + */
Use the c++ style here to be coherent with the other cros_ec_*.c files
> +
> +#define ec_cmds \
> + {EC_CMD_PROTO_VERSION, "PROTO_VERSION"}, \
> + {EC_CMD_HELLO, "HELLO"}, \
> + {EC_CMD_GET_VERSION, "GET_VERSION"}, \
> + {EC_CMD_READ_TEST, "READ_TEST"}, \
> + {EC_CMD_GET_BUILD_INFO, "GET_BUILD_INFO"}, \
> + {EC_CMD_GET_CHIP_INFO, "GET_CHIP_INFO"}, \
> + {EC_CMD_GET_BOARD_VERSION, "GET_BOARD_VERSION"}, \
> + {EC_CMD_READ_MEMMAP, "READ_MEMMAP"}, \
> + {EC_CMD_GET_CMD_VERSIONS, "GET_CMD_VERSIONS"}, \
> + {EC_CMD_GET_COMMS_STATUS, "GET_COMMS_STATUS"}, \
> + {EC_CMD_TEST_PROTOCOL, "TEST_PROTOCOL"}, \
> + {EC_CMD_GET_PROTOCOL_INFO, "GET_PROTOCOL_INFO"}, \
> + {EC_CMD_GSV_PAUSE_IN_S5, "GSV_PAUSE_IN_S5"}, \
> + {EC_CMD_GET_FEATURES, "GET_FEATURES"}, \
> + {EC_CMD_GET_SKU_ID, "GET_SKU_ID"}, \
> + {EC_CMD_SET_SKU_ID, "SET_SKU_ID"}, \
> + {EC_CMD_FLASH_INFO, "FLASH_INFO"}, \
> + {EC_CMD_FLASH_READ, "FLASH_READ"}, \
> + {EC_CMD_FLASH_WRITE, "FLASH_WRITE"}, \
> + {EC_CMD_FLASH_ERASE, "FLASH_ERASE"}, \
> + {EC_CMD_FLASH_PROTECT, "FLASH_PROTECT"}, \
> + {EC_CMD_FLASH_REGION_INFO, "FLASH_REGION_INFO"}, \
> + {EC_CMD_VBNV_CONTEXT, "VBNV_CONTEXT"}, \
> + {EC_CMD_FLASH_SPI_INFO, "FLASH_SPI_INFO"}, \
> + {EC_CMD_FLASH_SELECT, "FLASH_SELECT"}, \
> + {EC_CMD_PWM_GET_FAN_TARGET_RPM, "PWM_GET_FAN_TARGET_RPM"}, \
> + {EC_CMD_PWM_SET_FAN_TARGET_RPM, "PWM_SET_FAN_TARGET_RPM"}, \
> + {EC_CMD_PWM_GET_KEYBOARD_BACKLIGHT, "PWM_GET_KEYBOARD_BACKLIGHT"}, \
> + {EC_CMD_PWM_SET_KEYBOARD_BACKLIGHT, "PWM_SET_KEYBOARD_BACKLIGHT"}, \
> + {EC_CMD_PWM_SET_FAN_DUTY, "PWM_SET_FAN_DUTY"}, \
> + {EC_CMD_PWM_SET_DUTY, "PWM_SET_DUTY"}, \
> + {EC_CMD_PWM_GET_DUTY, "PWM_GET_DUTY"}, \
> + {EC_CMD_LIGHTBAR_CMD, "LIGHTBAR_CMD"}, \
> + {EC_CMD_LED_CONTROL, "LED_CONTROL"}, \
> + {EC_CMD_VBOOT_HASH, "VBOOT_HASH"}, \
> + {EC_CMD_MOTION_SENSE_CMD, "MOTION_SENSE_CMD"}, \
> + {EC_CMD_FORCE_LID_OPEN, "FORCE_LID_OPEN"}, \
> + {EC_CMD_CONFIG_POWER_BUTTON, "CONFIG_POWER_BUTTON"}, \
> + {EC_CMD_USB_CHARGE_SET_MODE, "USB_CHARGE_SET_MODE"}, \
> + {EC_CMD_PSTORE_INFO, "PSTORE_INFO"}, \
> + {EC_CMD_PSTORE_READ, "PSTORE_READ"}, \
> + {EC_CMD_PSTORE_WRITE, "PSTORE_WRITE"}, \
> + {EC_CMD_RTC_GET_VALUE, "RTC_GET_VALUE"}, \
> + {EC_CMD_RTC_GET_ALARM, "RTC_GET_ALARM"}, \
> + {EC_CMD_RTC_SET_VALUE, "RTC_SET_VALUE"}, \
> + {EC_CMD_RTC_SET_ALARM, "RTC_SET_ALARM"}, \
> + {EC_CMD_PORT80_READ, "PORT80_READ"}, \
> + {EC_CMD_VSTORE_INFO, "VSTORE_INFO"}, \
> + {EC_CMD_VSTORE_READ, "VSTORE_READ"}, \
> + {EC_CMD_VSTORE_WRITE, "VSTORE_WRITE"}, \
> + {EC_CMD_THERMAL_SET_THRESHOLD, "THERMAL_SET_THRESHOLD"}, \
> + {EC_CMD_THERMAL_GET_THRESHOLD, "THERMAL_GET_THRESHOLD"}, \
> + {EC_CMD_THERMAL_AUTO_FAN_CTRL, "THERMAL_AUTO_FAN_CTRL"}, \
> + {EC_CMD_TMP006_GET_CALIBRATION, "TMP006_GET_CALIBRATION"}, \
> + {EC_CMD_TMP006_SET_CALIBRATION, "TMP006_SET_CALIBRATION"}, \
> + {EC_CMD_TMP006_GET_RAW, "TMP006_GET_RAW"}, \
> + {EC_CMD_MKBP_STATE, "MKBP_STATE"}, \
> + {EC_CMD_MKBP_INFO, "MKBP_INFO"}, \
> + {EC_CMD_MKBP_SIMULATE_KEY, "MKBP_SIMULATE_KEY"}, \
> + {EC_CMD_MKBP_SET_CONFIG, "MKBP_SET_CONFIG"}, \
> + {EC_CMD_MKBP_GET_CONFIG, "MKBP_GET_CONFIG"}, \
> + {EC_CMD_KEYSCAN_SEQ_CTRL, "KEYSCAN_SEQ_CTRL"}, \
> + {EC_CMD_GET_NEXT_EVENT, "GET_NEXT_EVENT"}, \
> + {EC_CMD_KEYBOARD_FACTORY_TEST, "KEYBOARD_FACTORY_TEST"}, \
> + {EC_CMD_TEMP_SENSOR_GET_INFO, "TEMP_SENSOR_GET_INFO"}, \
> + {EC_CMD_ACPI_READ, "ACPI_READ"}, \
> + {EC_CMD_ACPI_WRITE, "ACPI_WRITE"}, \
> + {EC_CMD_ACPI_BURST_ENABLE, "ACPI_BURST_ENABLE"}, \
> + {EC_CMD_ACPI_BURST_DISABLE, "ACPI_BURST_DISABLE"}, \
> + {EC_CMD_ACPI_QUERY_EVENT, "ACPI_QUERY_EVENT"}, \
> + {EC_CMD_HOST_EVENT_GET_B, "HOST_EVENT_GET_B"}, \
> + {EC_CMD_HOST_EVENT_GET_SMI_MASK, "HOST_EVENT_GET_SMI_MASK"}, \
> + {EC_CMD_HOST_EVENT_GET_SCI_MASK, "HOST_EVENT_GET_SCI_MASK"}, \
> + {EC_CMD_HOST_EVENT_SET_SMI_MASK, "HOST_EVENT_SET_SMI_MASK"}, \
> + {EC_CMD_HOST_EVENT_SET_SCI_MASK, "HOST_EVENT_SET_SCI_MASK"}, \
> + {EC_CMD_HOST_EVENT_CLEAR, "HOST_EVENT_CLEAR"}, \
> + {EC_CMD_HOST_EVENT_GET_WAKE_MASK, "HOST_EVENT_GET_WAKE_MASK"}, \
> + {EC_CMD_HOST_EVENT_SET_WAKE_MASK, "HOST_EVENT_SET_WAKE_MASK"}, \
> + {EC_CMD_HOST_EVENT_CLEAR_B, "HOST_EVENT_CLEAR_B"}, \
> + {EC_CMD_SWITCH_ENABLE_BKLIGHT, "SWITCH_ENABLE_BKLIGHT"}, \
> + {EC_CMD_SWITCH_ENABLE_WIRELESS, "SWITCH_ENABLE_WIRELESS"}, \
> + {EC_CMD_GPIO_SET, "GPIO_SET"}, \
> + {EC_CMD_GPIO_GET, "GPIO_GET"}, \
> + {EC_CMD_I2C_READ, "I2C_READ"}, \
> + {EC_CMD_I2C_WRITE, "I2C_WRITE"}, \
> + {EC_CMD_CHARGE_CONTROL, "CHARGE_CONTROL"}, \
> + {EC_CMD_CONSOLE_SNAPSHOT, "CONSOLE_SNAPSHOT"}, \
> + {EC_CMD_CONSOLE_READ, "CONSOLE_READ"}, \
> + {EC_CMD_BATTERY_CUT_OFF, "BATTERY_CUT_OFF"}, \
> + {EC_CMD_USB_MUX, "USB_MUX"}, \
> + {EC_CMD_LDO_SET, "LDO_SET"}, \
> + {EC_CMD_LDO_GET, "LDO_GET"}, \
> + {EC_CMD_POWER_INFO, "POWER_INFO"}, \
> + {EC_CMD_I2C_PASSTHRU, "I2C_PASSTHRU"}, \
> + {EC_CMD_HANG_DETECT, "HANG_DETECT"}, \
> + {EC_CMD_CHARGE_STATE, "CHARGE_STATE"}, \
> + {EC_CMD_CHARGE_CURRENT_LIMIT, "CHARGE_CURRENT_LIMIT"}, \
> + {EC_CMD_EXTERNAL_POWER_LIMIT, "EXTERNAL_POWER_LIMIT"}, \
> + {EC_CMD_OVERRIDE_DEDICATED_CHARGER_LIMIT, \
> + "OVERRIDE_DEDICATED_CHARGER_LIMIT"}, \
> + {EC_CMD_HOST_EVENT, "HOST_EVENT"}, \
> + {EC_CMD_HIBERNATION_DELAY, "HIBERNATION_DELAY"}, \
> + {EC_CMD_HOST_SLEEP_EVENT, "HOST_SLEEP_EVENT"}, \
> + {EC_CMD_DEVICE_EVENT, "DEVICE_EVENT"}, \
> + {EC_CMD_SB_READ_WORD, "SB_READ_WORD"}, \
> + {EC_CMD_SB_WRITE_WORD, "SB_WRITE_WORD"}, \
> + {EC_CMD_SB_READ_BLOCK, "SB_READ_BLOCK"}, \
> + {EC_CMD_SB_WRITE_BLOCK, "SB_WRITE_BLOCK"}, \
> + {EC_CMD_BATTERY_VENDOR_PARAM, "BATTERY_VENDOR_PARAM"}, \
> + {EC_CMD_SB_FW_UPDATE, "SB_FW_UPDATE"}, \
> + {EC_CMD_ENTERING_MODE, "ENTERING_MODE"}, \
> + {EC_CMD_I2C_PASSTHRU_PROTECT, "I2C_PASSTHRU_PROTECT"}, \
> + {EC_CMD_REBOOT, "REBOOT"}, \
> + {EC_CMD_REBOOT_EC, "REBOOT_EC"}, \
> + {EC_CMD_GET_PANIC_INFO, "GET_PANIC_INFO"}, \
> + {EC_CMD_RESEND_RESPONSE, "RESEND_RESPONSE"}, \
> + {EC_CMD_VERSION0, "VERSION0"}, \
> + {EC_CMD_PD_EXCHANGE_STATUS, "PD_EXCHANGE_STATUS"}, \
> + {EC_CMD_USB_PD_CONTROL, "USB_PD_CONTROL"}, \
> + {EC_CMD_USB_PD_PORTS, "USB_PD_PORTS"}, \
> + {EC_CMD_USB_PD_POWER_INFO, "USB_PD_POWER_INFO"}, \
> + {EC_CMD_PD_HOST_EVENT_STATUS, "PD_HOST_EVENT_STATUS"}, \
> + {EC_CMD_USB_PD_FW_UPDATE, "USB_PD_FW_UPDATE"}, \
> + {EC_CMD_USB_PD_RW_HASH_ENTRY, "USB_PD_RW_HASH_ENTRY"}, \
> + {EC_CMD_USB_PD_DEV_INFO, "USB_PD_DEV_INFO"}, \
> + {EC_CMD_USB_PD_DISCOVERY, "USB_PD_DISCOVERY"}, \
> + {EC_CMD_PD_CHARGE_PORT_OVERRIDE, "PD_CHARGE_PORT_OVERRIDE"}, \
> + {EC_CMD_PD_GET_LOG_ENTRY, "PD_GET_LOG_ENTRY"}, \
> + {EC_CMD_USB_PD_GET_AMODE, "USB_PD_GET_AMODE"}, \
> + {EC_CMD_USB_PD_SET_AMODE, "USB_PD_SET_AMODE"}, \
> + {EC_CMD_PD_WRITE_LOG_ENTRY, "PD_WRITE_LOG_ENTRY"}, \
> + {EC_CMD_PD_CONTROL, "PD_CONTROL"}, \
> + {EC_CMD_USB_PD_MUX_INFO, "USB_PD_MUX_INFO"}, \
> + {EC_CMD_PD_CHIP_INFO, "PD_CHIP_INFO"}, \
> + {EC_CMD_RWSIG_CHECK_STATUS, "RWSIG_CHECK_STATUS"}, \
> + {EC_CMD_RWSIG_ACTION, "RWSIG_ACTION"}, \
> + {EC_CMD_CR51_BASE, "CR51_BASE"}, \
> + {EC_CMD_CR51_LAST, "CR51_LAST"}, \
> + {EC_CMD_FP_PASSTHRU, "FP_PASSTHRU"}, \
> + {EC_CMD_FP_SENSOR_CONFIG, "FP_SENSOR_CONFIG"}, \
> + {EC_CMD_FP_MODE, "FP_MODE"}, \
> + {EC_CMD_FP_INFO, "FP_INFO"}, \
> + {EC_CMD_FP_FRAME, "FP_FRAME"}, \
> + {EC_CMD_TP_SELF_TEST, "TP_SELF_TEST"}, \
> + {EC_CMD_TP_FRAME_INFO, "TP_FRAME_INFO"}, \
> + {EC_CMD_TP_FRAME_SNAPSHOT, "TP_FRAME_SNAPSHOT"}, \
> + {EC_CMD_TP_FRAME_GET, "TP_FRAME_GET"}, \
> + {EC_CMD_BATTERY_GET_STATIC, "BATTERY_GET_STATIC"}, \
> + {EC_CMD_BATTERY_GET_DYNAMIC, "BATTERY_GET_DYNAMIC"}, \
> + {EC_CMD_CHARGER_CONTROL, "CHARGER_CONTROL"}, \
> + {EC_CMD_BOARD_SPECIFIC_BASE, "BOARD_SPECIFIC_BASE"}, \
> + {EC_CMD_BOARD_SPECIFIC_LAST, "BOARD_SPECIFIC_LAST"}
> +
I don't like this define, though I'm not sure we can get rid of it
because I don't know too much about the trace infrastructure. Can this
be a struct instead? Also, my worry is how we will maintain *sync*
this with the supported commands defined in cros_ec_command.h. I think
that can be error-prone.
> +#define CREATE_TRACE_POINTS
> +#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..86ef52f96fd4
> --- /dev/null
> +++ b/drivers/platform/chrome/cros_ec_trace.h
> @@ -0,0 +1,51 @@
> +/* 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>
> --
> 2.21.0.392.gf8f6787159e-goog
>
Thanks,
Enric
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] cros_ec: Add trace event to trace EC commands
2019-04-11 21:55 ` Enric Balletbo Serra
@ 2019-04-11 22:28 ` Raul Rangel
0 siblings, 0 replies; 4+ messages in thread
From: Raul Rangel @ 2019-04-11 22:28 UTC (permalink / raw)
To: Enric Balletbo Serra
Cc: linux-kernel, zwisler, Daniel Kurtz, Enric Balletbo i Serra,
Guenter Roeck, Benson Leung
On Thu, Apr 11, 2019 at 11:55:40PM +0200, Enric Balletbo Serra wrote:
> Hi,
>
> Many thanks for sending this patch upstream. Looks really interesting.
> Some few comments below ...
>
> Please prefix the patch with "chrome/platform: cros_ec_proto: ..."
>
> Missatge de Raul E Rangel <rrangel@chromium.org> del dia dc., 10
> d’abr. 2019 a les 22:25:
> >
> > This is useful to see which EC commands are being executed and when.
> >
> > To enable:
> >
> > echo 'cros_ec:*' >> /sys/kernel/debug/tracing/set_event
> >
> > Example:
> >
> > /* cros_ec_cmd: version: 0, command: GET_VERSION */
> > /* cros_ec_cmd: version: 0, command: GET_PROTOCOL_INFO */
> > /* cros_ec_cmd: version: 1, command: GET_CMD_VERSIONS */
> > /* cros_ec_cmd: version: 1, command: USB_PD_CONTROL */
> >
> > Signed-off-by: Raul E Rangel <rrangel@chromium.org>
> > ---
> >
> > drivers/platform/chrome/Makefile | 4 +-
> > drivers/platform/chrome/cros_ec_proto.c | 4 +
> > drivers/platform/chrome/cros_ec_trace.c | 163 ++++++++++++++++++++++++
> > drivers/platform/chrome/cros_ec_trace.h | 51 ++++++++
> > 4 files changed, 221 insertions(+), 1 deletion(-)
> > create mode 100644 drivers/platform/chrome/cros_ec_trace.c
> > create mode 100644 drivers/platform/chrome/cros_ec_trace.h
> >
> > diff --git a/drivers/platform/chrome/Makefile b/drivers/platform/chrome/Makefile
> > index 1e2f0029b597..e542268454a4 100644
> > --- a/drivers/platform/chrome/Makefile
> > +++ b/drivers/platform/chrome/Makefile
> > @@ -3,12 +3,14 @@
> > obj-$(CONFIG_CHROMEOS_LAPTOP) += chromeos_laptop.o
> > obj-$(CONFIG_CHROMEOS_PSTORE) += chromeos_pstore.o
> > obj-$(CONFIG_CHROMEOS_TBMC) += chromeos_tbmc.o
> > +# tell define_trace.h where to find the cros ec trace header
> > +CFLAGS_cros_ec_trace.o:= -I$(src)
> > obj-$(CONFIG_CROS_EC_I2C) += cros_ec_i2c.o
> > 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
> > diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> > index 97a068dff192..3d02c8259ac6 100644
> > --- a/drivers/platform/chrome/cros_ec_proto.c
> > +++ b/drivers/platform/chrome/cros_ec_proto.c
> > @@ -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
> > diff --git a/drivers/platform/chrome/cros_ec_trace.c b/drivers/platform/chrome/cros_ec_trace.c
> > new file mode 100644
> > index 000000000000..799c8e2bfd22
> > --- /dev/null
> > +++ b/drivers/platform/chrome/cros_ec_trace.c
> > @@ -0,0 +1,163 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * Trace events for the ChromeOS Embedded Controller
> > + *
> > + * Copyright 2019 Google LLC.
> > + */
>
> Use the c++ style here to be coherent with the other cros_ec_*.c files
>
> > +
> > +#define ec_cmds \
> > + {EC_CMD_PROTO_VERSION, "PROTO_VERSION"}, \
> > + {EC_CMD_HELLO, "HELLO"}, \
> > + {EC_CMD_GET_VERSION, "GET_VERSION"}, \
> > + {EC_CMD_READ_TEST, "READ_TEST"}, \
> > + {EC_CMD_GET_BUILD_INFO, "GET_BUILD_INFO"}, \
> > + {EC_CMD_GET_CHIP_INFO, "GET_CHIP_INFO"}, \
> > + {EC_CMD_GET_BOARD_VERSION, "GET_BOARD_VERSION"}, \
> > + {EC_CMD_READ_MEMMAP, "READ_MEMMAP"}, \
> > + {EC_CMD_GET_CMD_VERSIONS, "GET_CMD_VERSIONS"}, \
> > + {EC_CMD_GET_COMMS_STATUS, "GET_COMMS_STATUS"}, \
> > + {EC_CMD_TEST_PROTOCOL, "TEST_PROTOCOL"}, \
> > + {EC_CMD_GET_PROTOCOL_INFO, "GET_PROTOCOL_INFO"}, \
> > + {EC_CMD_GSV_PAUSE_IN_S5, "GSV_PAUSE_IN_S5"}, \
> > + {EC_CMD_GET_FEATURES, "GET_FEATURES"}, \
> > + {EC_CMD_GET_SKU_ID, "GET_SKU_ID"}, \
> > + {EC_CMD_SET_SKU_ID, "SET_SKU_ID"}, \
> > + {EC_CMD_FLASH_INFO, "FLASH_INFO"}, \
> > + {EC_CMD_FLASH_READ, "FLASH_READ"}, \
> > + {EC_CMD_FLASH_WRITE, "FLASH_WRITE"}, \
> > + {EC_CMD_FLASH_ERASE, "FLASH_ERASE"}, \
> > + {EC_CMD_FLASH_PROTECT, "FLASH_PROTECT"}, \
> > + {EC_CMD_FLASH_REGION_INFO, "FLASH_REGION_INFO"}, \
> > + {EC_CMD_VBNV_CONTEXT, "VBNV_CONTEXT"}, \
> > + {EC_CMD_FLASH_SPI_INFO, "FLASH_SPI_INFO"}, \
> > + {EC_CMD_FLASH_SELECT, "FLASH_SELECT"}, \
> > + {EC_CMD_PWM_GET_FAN_TARGET_RPM, "PWM_GET_FAN_TARGET_RPM"}, \
> > + {EC_CMD_PWM_SET_FAN_TARGET_RPM, "PWM_SET_FAN_TARGET_RPM"}, \
> > + {EC_CMD_PWM_GET_KEYBOARD_BACKLIGHT, "PWM_GET_KEYBOARD_BACKLIGHT"}, \
> > + {EC_CMD_PWM_SET_KEYBOARD_BACKLIGHT, "PWM_SET_KEYBOARD_BACKLIGHT"}, \
> > + {EC_CMD_PWM_SET_FAN_DUTY, "PWM_SET_FAN_DUTY"}, \
> > + {EC_CMD_PWM_SET_DUTY, "PWM_SET_DUTY"}, \
> > + {EC_CMD_PWM_GET_DUTY, "PWM_GET_DUTY"}, \
> > + {EC_CMD_LIGHTBAR_CMD, "LIGHTBAR_CMD"}, \
> > + {EC_CMD_LED_CONTROL, "LED_CONTROL"}, \
> > + {EC_CMD_VBOOT_HASH, "VBOOT_HASH"}, \
> > + {EC_CMD_MOTION_SENSE_CMD, "MOTION_SENSE_CMD"}, \
> > + {EC_CMD_FORCE_LID_OPEN, "FORCE_LID_OPEN"}, \
> > + {EC_CMD_CONFIG_POWER_BUTTON, "CONFIG_POWER_BUTTON"}, \
> > + {EC_CMD_USB_CHARGE_SET_MODE, "USB_CHARGE_SET_MODE"}, \
> > + {EC_CMD_PSTORE_INFO, "PSTORE_INFO"}, \
> > + {EC_CMD_PSTORE_READ, "PSTORE_READ"}, \
> > + {EC_CMD_PSTORE_WRITE, "PSTORE_WRITE"}, \
> > + {EC_CMD_RTC_GET_VALUE, "RTC_GET_VALUE"}, \
> > + {EC_CMD_RTC_GET_ALARM, "RTC_GET_ALARM"}, \
> > + {EC_CMD_RTC_SET_VALUE, "RTC_SET_VALUE"}, \
> > + {EC_CMD_RTC_SET_ALARM, "RTC_SET_ALARM"}, \
> > + {EC_CMD_PORT80_READ, "PORT80_READ"}, \
> > + {EC_CMD_VSTORE_INFO, "VSTORE_INFO"}, \
> > + {EC_CMD_VSTORE_READ, "VSTORE_READ"}, \
> > + {EC_CMD_VSTORE_WRITE, "VSTORE_WRITE"}, \
> > + {EC_CMD_THERMAL_SET_THRESHOLD, "THERMAL_SET_THRESHOLD"}, \
> > + {EC_CMD_THERMAL_GET_THRESHOLD, "THERMAL_GET_THRESHOLD"}, \
> > + {EC_CMD_THERMAL_AUTO_FAN_CTRL, "THERMAL_AUTO_FAN_CTRL"}, \
> > + {EC_CMD_TMP006_GET_CALIBRATION, "TMP006_GET_CALIBRATION"}, \
> > + {EC_CMD_TMP006_SET_CALIBRATION, "TMP006_SET_CALIBRATION"}, \
> > + {EC_CMD_TMP006_GET_RAW, "TMP006_GET_RAW"}, \
> > + {EC_CMD_MKBP_STATE, "MKBP_STATE"}, \
> > + {EC_CMD_MKBP_INFO, "MKBP_INFO"}, \
> > + {EC_CMD_MKBP_SIMULATE_KEY, "MKBP_SIMULATE_KEY"}, \
> > + {EC_CMD_MKBP_SET_CONFIG, "MKBP_SET_CONFIG"}, \
> > + {EC_CMD_MKBP_GET_CONFIG, "MKBP_GET_CONFIG"}, \
> > + {EC_CMD_KEYSCAN_SEQ_CTRL, "KEYSCAN_SEQ_CTRL"}, \
> > + {EC_CMD_GET_NEXT_EVENT, "GET_NEXT_EVENT"}, \
> > + {EC_CMD_KEYBOARD_FACTORY_TEST, "KEYBOARD_FACTORY_TEST"}, \
> > + {EC_CMD_TEMP_SENSOR_GET_INFO, "TEMP_SENSOR_GET_INFO"}, \
> > + {EC_CMD_ACPI_READ, "ACPI_READ"}, \
> > + {EC_CMD_ACPI_WRITE, "ACPI_WRITE"}, \
> > + {EC_CMD_ACPI_BURST_ENABLE, "ACPI_BURST_ENABLE"}, \
> > + {EC_CMD_ACPI_BURST_DISABLE, "ACPI_BURST_DISABLE"}, \
> > + {EC_CMD_ACPI_QUERY_EVENT, "ACPI_QUERY_EVENT"}, \
> > + {EC_CMD_HOST_EVENT_GET_B, "HOST_EVENT_GET_B"}, \
> > + {EC_CMD_HOST_EVENT_GET_SMI_MASK, "HOST_EVENT_GET_SMI_MASK"}, \
> > + {EC_CMD_HOST_EVENT_GET_SCI_MASK, "HOST_EVENT_GET_SCI_MASK"}, \
> > + {EC_CMD_HOST_EVENT_SET_SMI_MASK, "HOST_EVENT_SET_SMI_MASK"}, \
> > + {EC_CMD_HOST_EVENT_SET_SCI_MASK, "HOST_EVENT_SET_SCI_MASK"}, \
> > + {EC_CMD_HOST_EVENT_CLEAR, "HOST_EVENT_CLEAR"}, \
> > + {EC_CMD_HOST_EVENT_GET_WAKE_MASK, "HOST_EVENT_GET_WAKE_MASK"}, \
> > + {EC_CMD_HOST_EVENT_SET_WAKE_MASK, "HOST_EVENT_SET_WAKE_MASK"}, \
> > + {EC_CMD_HOST_EVENT_CLEAR_B, "HOST_EVENT_CLEAR_B"}, \
> > + {EC_CMD_SWITCH_ENABLE_BKLIGHT, "SWITCH_ENABLE_BKLIGHT"}, \
> > + {EC_CMD_SWITCH_ENABLE_WIRELESS, "SWITCH_ENABLE_WIRELESS"}, \
> > + {EC_CMD_GPIO_SET, "GPIO_SET"}, \
> > + {EC_CMD_GPIO_GET, "GPIO_GET"}, \
> > + {EC_CMD_I2C_READ, "I2C_READ"}, \
> > + {EC_CMD_I2C_WRITE, "I2C_WRITE"}, \
> > + {EC_CMD_CHARGE_CONTROL, "CHARGE_CONTROL"}, \
> > + {EC_CMD_CONSOLE_SNAPSHOT, "CONSOLE_SNAPSHOT"}, \
> > + {EC_CMD_CONSOLE_READ, "CONSOLE_READ"}, \
> > + {EC_CMD_BATTERY_CUT_OFF, "BATTERY_CUT_OFF"}, \
> > + {EC_CMD_USB_MUX, "USB_MUX"}, \
> > + {EC_CMD_LDO_SET, "LDO_SET"}, \
> > + {EC_CMD_LDO_GET, "LDO_GET"}, \
> > + {EC_CMD_POWER_INFO, "POWER_INFO"}, \
> > + {EC_CMD_I2C_PASSTHRU, "I2C_PASSTHRU"}, \
> > + {EC_CMD_HANG_DETECT, "HANG_DETECT"}, \
> > + {EC_CMD_CHARGE_STATE, "CHARGE_STATE"}, \
> > + {EC_CMD_CHARGE_CURRENT_LIMIT, "CHARGE_CURRENT_LIMIT"}, \
> > + {EC_CMD_EXTERNAL_POWER_LIMIT, "EXTERNAL_POWER_LIMIT"}, \
> > + {EC_CMD_OVERRIDE_DEDICATED_CHARGER_LIMIT, \
> > + "OVERRIDE_DEDICATED_CHARGER_LIMIT"}, \
> > + {EC_CMD_HOST_EVENT, "HOST_EVENT"}, \
> > + {EC_CMD_HIBERNATION_DELAY, "HIBERNATION_DELAY"}, \
> > + {EC_CMD_HOST_SLEEP_EVENT, "HOST_SLEEP_EVENT"}, \
> > + {EC_CMD_DEVICE_EVENT, "DEVICE_EVENT"}, \
> > + {EC_CMD_SB_READ_WORD, "SB_READ_WORD"}, \
> > + {EC_CMD_SB_WRITE_WORD, "SB_WRITE_WORD"}, \
> > + {EC_CMD_SB_READ_BLOCK, "SB_READ_BLOCK"}, \
> > + {EC_CMD_SB_WRITE_BLOCK, "SB_WRITE_BLOCK"}, \
> > + {EC_CMD_BATTERY_VENDOR_PARAM, "BATTERY_VENDOR_PARAM"}, \
> > + {EC_CMD_SB_FW_UPDATE, "SB_FW_UPDATE"}, \
> > + {EC_CMD_ENTERING_MODE, "ENTERING_MODE"}, \
> > + {EC_CMD_I2C_PASSTHRU_PROTECT, "I2C_PASSTHRU_PROTECT"}, \
> > + {EC_CMD_REBOOT, "REBOOT"}, \
> > + {EC_CMD_REBOOT_EC, "REBOOT_EC"}, \
> > + {EC_CMD_GET_PANIC_INFO, "GET_PANIC_INFO"}, \
> > + {EC_CMD_RESEND_RESPONSE, "RESEND_RESPONSE"}, \
> > + {EC_CMD_VERSION0, "VERSION0"}, \
> > + {EC_CMD_PD_EXCHANGE_STATUS, "PD_EXCHANGE_STATUS"}, \
> > + {EC_CMD_USB_PD_CONTROL, "USB_PD_CONTROL"}, \
> > + {EC_CMD_USB_PD_PORTS, "USB_PD_PORTS"}, \
> > + {EC_CMD_USB_PD_POWER_INFO, "USB_PD_POWER_INFO"}, \
> > + {EC_CMD_PD_HOST_EVENT_STATUS, "PD_HOST_EVENT_STATUS"}, \
> > + {EC_CMD_USB_PD_FW_UPDATE, "USB_PD_FW_UPDATE"}, \
> > + {EC_CMD_USB_PD_RW_HASH_ENTRY, "USB_PD_RW_HASH_ENTRY"}, \
> > + {EC_CMD_USB_PD_DEV_INFO, "USB_PD_DEV_INFO"}, \
> > + {EC_CMD_USB_PD_DISCOVERY, "USB_PD_DISCOVERY"}, \
> > + {EC_CMD_PD_CHARGE_PORT_OVERRIDE, "PD_CHARGE_PORT_OVERRIDE"}, \
> > + {EC_CMD_PD_GET_LOG_ENTRY, "PD_GET_LOG_ENTRY"}, \
> > + {EC_CMD_USB_PD_GET_AMODE, "USB_PD_GET_AMODE"}, \
> > + {EC_CMD_USB_PD_SET_AMODE, "USB_PD_SET_AMODE"}, \
> > + {EC_CMD_PD_WRITE_LOG_ENTRY, "PD_WRITE_LOG_ENTRY"}, \
> > + {EC_CMD_PD_CONTROL, "PD_CONTROL"}, \
> > + {EC_CMD_USB_PD_MUX_INFO, "USB_PD_MUX_INFO"}, \
> > + {EC_CMD_PD_CHIP_INFO, "PD_CHIP_INFO"}, \
> > + {EC_CMD_RWSIG_CHECK_STATUS, "RWSIG_CHECK_STATUS"}, \
> > + {EC_CMD_RWSIG_ACTION, "RWSIG_ACTION"}, \
> > + {EC_CMD_CR51_BASE, "CR51_BASE"}, \
> > + {EC_CMD_CR51_LAST, "CR51_LAST"}, \
> > + {EC_CMD_FP_PASSTHRU, "FP_PASSTHRU"}, \
> > + {EC_CMD_FP_SENSOR_CONFIG, "FP_SENSOR_CONFIG"}, \
> > + {EC_CMD_FP_MODE, "FP_MODE"}, \
> > + {EC_CMD_FP_INFO, "FP_INFO"}, \
> > + {EC_CMD_FP_FRAME, "FP_FRAME"}, \
> > + {EC_CMD_TP_SELF_TEST, "TP_SELF_TEST"}, \
> > + {EC_CMD_TP_FRAME_INFO, "TP_FRAME_INFO"}, \
> > + {EC_CMD_TP_FRAME_SNAPSHOT, "TP_FRAME_SNAPSHOT"}, \
> > + {EC_CMD_TP_FRAME_GET, "TP_FRAME_GET"}, \
> > + {EC_CMD_BATTERY_GET_STATIC, "BATTERY_GET_STATIC"}, \
> > + {EC_CMD_BATTERY_GET_DYNAMIC, "BATTERY_GET_DYNAMIC"}, \
> > + {EC_CMD_CHARGER_CONTROL, "CHARGER_CONTROL"}, \
> > + {EC_CMD_BOARD_SPECIFIC_BASE, "BOARD_SPECIFIC_BASE"}, \
> > + {EC_CMD_BOARD_SPECIFIC_LAST, "BOARD_SPECIFIC_LAST"}
> > +
>
> I don't like this define, though I'm not sure we can get rid of it
> because I don't know too much about the trace infrastructure. Can this
> be a struct instead? Also, my worry is how we will maintain *sync*
> this with the supported commands defined in cros_ec_command.h. I think
> that can be error-prone.
I can convert it to a struct. That's how I initially had it, but I
changed my mind because most trace invocations use the macro.
Keeping this in sync will be a problem. Ideally it would be nice to use
BUILD_BUG_ON to force the map to be in sync, but there is nothing to
check it against since all the command codes are just #defined.
>
> > +#define CREATE_TRACE_POINTS
> > +#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..86ef52f96fd4
> > --- /dev/null
> > +++ b/drivers/platform/chrome/cros_ec_trace.h
> > @@ -0,0 +1,51 @@
> > +/* 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>
> > --
> > 2.21.0.392.gf8f6787159e-goog
> >
>
> Thanks,
> Enric
I'll send a followup patch addressing your comments.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-04-11 22:28 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-10 20:24 [PATCH] cros_ec: Add trace event to trace EC commands Raul E Rangel
2019-04-10 20:41 ` Ross Zwisler
2019-04-11 21:55 ` Enric Balletbo Serra
2019-04-11 22:28 ` Raul Rangel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).