Skip to content

Commit d453ceb

Browse files
gwendalcrEnric Balletbo i Serra
authored andcommitted
platform/chrome: sensorhub: Add trace events for sample
Add trace event to report samples and their timestamp coming from the EC. It allows to check if the timestamps are correct and the filter is working correctly without introducing too much latency. To enable these events: cd /sys/kernel/debug/tracing/ echo 1 > events/cros_ec/enable echo 0 > events/cros_ec/cros_ec_request_start/enable echo 0 > events/cros_ec/cros_ec_request_done/enable echo 1 > tracing_on cat trace_pipe Observe event flowing: irq/105-chromeo-95 [000] .... 613.659758: cros_ec_sensorhub_timestamp: ... irq/105-chromeo-95 [000] .... 613.665219: cros_ec_sensorhub_filter: dx: ... Signed-off-by: Gwendal Grignou <[email protected]> Signed-off-by: Enric Balletbo i Serra <[email protected]>
1 parent e73f0f0 commit d453ceb

File tree

3 files changed

+109
-1
lines changed

3 files changed

+109
-1
lines changed

drivers/platform/chrome/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ obj-$(CONFIG_CROS_EC_CHARDEV) += cros_ec_chardev.o
2020
obj-$(CONFIG_CROS_EC_LIGHTBAR) += cros_ec_lightbar.o
2121
obj-$(CONFIG_CROS_EC_VBC) += cros_ec_vbc.o
2222
obj-$(CONFIG_CROS_EC_DEBUGFS) += cros_ec_debugfs.o
23-
cros-ec-sensorhub-objs := cros_ec_sensorhub.o cros_ec_sensorhub_ring.o
23+
cros-ec-sensorhub-objs := cros_ec_sensorhub.o cros_ec_sensorhub_ring.o cros_ec_trace.o
2424
obj-$(CONFIG_CROS_EC_SENSORHUB) += cros-ec-sensorhub.o
2525
obj-$(CONFIG_CROS_EC_SYSFS) += cros_ec_sysfs.o
2626
obj-$(CONFIG_CROS_USBPD_LOGGER) += cros_usbpd_logger.o

drivers/platform/chrome/cros_ec_sensorhub_ring.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
#include <linux/sort.h>
1818
#include <linux/slab.h>
1919

20+
#include "cros_ec_trace.h"
21+
2022
/* Precision of fixed point for the m values from the filter */
2123
#define M_PRECISION BIT(23)
2224

@@ -291,6 +293,7 @@ cros_ec_sensor_ring_ts_filter_update(struct cros_ec_sensors_ts_filter_state
291293
state->median_m = 0;
292294
state->median_error = 0;
293295
}
296+
trace_cros_ec_sensorhub_filter(state, dx, dy);
294297
}
295298

296299
/**
@@ -427,6 +430,11 @@ cros_ec_sensor_ring_process_event(struct cros_ec_sensorhub *sensorhub,
427430
if (new_timestamp - *current_timestamp > 0)
428431
*current_timestamp = new_timestamp;
429432
}
433+
trace_cros_ec_sensorhub_timestamp(in->timestamp,
434+
fifo_info->timestamp,
435+
fifo_timestamp,
436+
*current_timestamp,
437+
now);
430438
}
431439

432440
if (in->flags & MOTIONSENSE_SENSOR_FLAG_ODR) {
@@ -460,6 +468,12 @@ cros_ec_sensor_ring_process_event(struct cros_ec_sensorhub *sensorhub,
460468

461469
/* Regular sample */
462470
out->sensor_id = in->sensor_num;
471+
trace_cros_ec_sensorhub_data(in->sensor_num,
472+
fifo_info->timestamp,
473+
fifo_timestamp,
474+
*current_timestamp,
475+
now);
476+
463477
if (*current_timestamp - now > 0) {
464478
/*
465479
* This fix is needed to overcome the timestamp filter putting

drivers/platform/chrome/cros_ec_trace.h

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <linux/types.h>
1616
#include <linux/platform_data/cros_ec_commands.h>
1717
#include <linux/platform_data/cros_ec_proto.h>
18+
#include <linux/platform_data/cros_ec_sensorhub.h>
1819

1920
#include <linux/tracepoint.h>
2021

@@ -70,6 +71,99 @@ TRACE_EVENT(cros_ec_request_done,
7071
__entry->retval)
7172
);
7273

74+
TRACE_EVENT(cros_ec_sensorhub_timestamp,
75+
TP_PROTO(u32 ec_sample_timestamp, u32 ec_fifo_timestamp, s64 fifo_timestamp,
76+
s64 current_timestamp, s64 current_time),
77+
TP_ARGS(ec_sample_timestamp, ec_fifo_timestamp, fifo_timestamp, current_timestamp,
78+
current_time),
79+
TP_STRUCT__entry(
80+
__field(u32, ec_sample_timestamp)
81+
__field(u32, ec_fifo_timestamp)
82+
__field(s64, fifo_timestamp)
83+
__field(s64, current_timestamp)
84+
__field(s64, current_time)
85+
__field(s64, delta)
86+
),
87+
TP_fast_assign(
88+
__entry->ec_sample_timestamp = ec_sample_timestamp;
89+
__entry->ec_fifo_timestamp = ec_fifo_timestamp;
90+
__entry->fifo_timestamp = fifo_timestamp;
91+
__entry->current_timestamp = current_timestamp;
92+
__entry->current_time = current_time;
93+
__entry->delta = current_timestamp - current_time;
94+
),
95+
TP_printk("ec_ts: %12lld, ec_fifo_ts: %12lld, fifo_ts: %12lld, curr_ts: %12lld, curr_time: %12lld, delta %12lld",
96+
__entry->ec_sample_timestamp,
97+
__entry->ec_fifo_timestamp,
98+
__entry->fifo_timestamp,
99+
__entry->current_timestamp,
100+
__entry->current_time,
101+
__entry->delta
102+
)
103+
);
104+
105+
TRACE_EVENT(cros_ec_sensorhub_data,
106+
TP_PROTO(u32 ec_sensor_num, u32 ec_fifo_timestamp, s64 fifo_timestamp,
107+
s64 current_timestamp, s64 current_time),
108+
TP_ARGS(ec_sensor_num, ec_fifo_timestamp, fifo_timestamp, current_timestamp, current_time),
109+
TP_STRUCT__entry(
110+
__field(u32, ec_sensor_num)
111+
__field(u32, ec_fifo_timestamp)
112+
__field(s64, fifo_timestamp)
113+
__field(s64, current_timestamp)
114+
__field(s64, current_time)
115+
__field(s64, delta)
116+
),
117+
TP_fast_assign(
118+
__entry->ec_sensor_num = ec_sensor_num;
119+
__entry->ec_fifo_timestamp = ec_fifo_timestamp;
120+
__entry->fifo_timestamp = fifo_timestamp;
121+
__entry->current_timestamp = current_timestamp;
122+
__entry->current_time = current_time;
123+
__entry->delta = current_timestamp - current_time;
124+
),
125+
TP_printk("ec_num: %4d, ec_fifo_ts: %12lld, fifo_ts: %12lld, curr_ts: %12lld, curr_time: %12lld, delta %12lld",
126+
__entry->ec_sensor_num,
127+
__entry->ec_fifo_timestamp,
128+
__entry->fifo_timestamp,
129+
__entry->current_timestamp,
130+
__entry->current_time,
131+
__entry->delta
132+
)
133+
);
134+
135+
TRACE_EVENT(cros_ec_sensorhub_filter,
136+
TP_PROTO(struct cros_ec_sensors_ts_filter_state *state, s64 dx, s64 dy),
137+
TP_ARGS(state, dx, dy),
138+
TP_STRUCT__entry(
139+
__field(s64, dx)
140+
__field(s64, dy)
141+
__field(s64, median_m)
142+
__field(s64, median_error)
143+
__field(s64, history_len)
144+
__field(s64, x)
145+
__field(s64, y)
146+
),
147+
TP_fast_assign(
148+
__entry->dx = dx;
149+
__entry->dy = dy;
150+
__entry->median_m = state->median_m;
151+
__entry->median_error = state->median_error;
152+
__entry->history_len = state->history_len;
153+
__entry->x = state->x_offset;
154+
__entry->y = state->y_offset;
155+
),
156+
TP_printk("dx: %12lld. dy: %12lld median_m: %12lld median_error: %12lld len: %d x: %12lld y: %12lld",
157+
__entry->dx,
158+
__entry->dy,
159+
__entry->median_m,
160+
__entry->median_error,
161+
__entry->history_len,
162+
__entry->x,
163+
__entry->y
164+
)
165+
);
166+
73167

74168
#endif /* _CROS_EC_TRACE_H_ */
75169

0 commit comments

Comments
 (0)