summaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/timesync.c
diff options
context:
space:
mode:
authorBryan O'Donoghue <bryan.odonoghue@linaro.org>2016-06-05 14:03:28 +0100
committerGreg Kroah-Hartman <gregkh@google.com>2016-06-06 20:50:08 -0700
commit6da7c88972a0153db427c14c6c5b2c4e2ccaefb7 (patch)
tree1f8f06b99758603dcca55cfaf51f5c0c122d97ac /drivers/staging/greybus/timesync.c
parent4a4484274f7431c68e104a66b497639e1ac9022c (diff)
downloadop-kernel-dev-6da7c88972a0153db427c14c6c5b2c4e2ccaefb7.zip
op-kernel-dev-6da7c88972a0153db427c14c6c5b2c4e2ccaefb7.tar.gz
greybus: tracepoints: Add standard Linux tracepoint for TimeSync event
This patch adds a tracepoint to the TimeSync ISR, the purpose of which is to indicate a TimeSync event has happened. This tracepoint can be enabled by issuing the following command: echo 1 > /sys/kernel/debug/tracing/events/greybus/gb_timesync_irq/enable Synchronization looks like this: TIMESTAMP FUNCTION | | 147.865788: gb_timesync_irq: strobe 1/4 frame-time 2910076529 147.866781: gb_timesync_irq: strobe 2/4 frame-time 2910095689 147.867777: gb_timesync_irq: strobe 3/4 frame-time 2910114820 147.868791: gb_timesync_irq: strobe 4/4 frame-time 2910134038 A ping can be triggered like this: cat /sys/kernel/debug/greybus/frame-time And that ping looks like this: TIMESTAMP FUNCTION | | 147.934678: gb_timesync_irq: ping 4/4 frame-time 2911380356 169.280551: gb_timesync_irq: ping 4/4 frame-time 3321221069 Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Reviewed-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org> Acked-by: Alex Elder <elder@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/timesync.c')
-rw-r--r--drivers/staging/greybus/timesync.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/staging/greybus/timesync.c b/drivers/staging/greybus/timesync.c
index 260b670..4bf62ad 100644
--- a/drivers/staging/greybus/timesync.c
+++ b/drivers/staging/greybus/timesync.c
@@ -9,6 +9,7 @@
#include <linux/debugfs.h>
#include "greybus.h"
#include "timesync.h"
+#include "greybus_trace.h"
/*
* Minimum inter-strobe value of one millisecond is chosen because it
@@ -974,17 +975,19 @@ void gb_timesync_irq(struct gb_timesync_svc *timesync_svc)
{
unsigned long flags;
u64 strobe_time;
+ bool strobe_is_ping = true;
strobe_time = __gb_timesync_get_frame_time(timesync_svc);
spin_lock_irqsave(&timesync_svc->spinlock, flags);
if (timesync_svc->state == GB_TIMESYNC_STATE_PING) {
- if (timesync_svc->capture_ping)
- timesync_svc->ap_ping_frame_time = strobe_time;
- goto done;
+ if (!timesync_svc->capture_ping)
+ goto done_nolog;
+ timesync_svc->ap_ping_frame_time = strobe_time;
+ goto done_log;
} else if (timesync_svc->state != GB_TIMESYNC_STATE_WAIT_SVC) {
- goto done;
+ goto done_nolog;
}
timesync_svc->strobe_time[timesync_svc->strobe] = strobe_time;
@@ -993,7 +996,11 @@ void gb_timesync_irq(struct gb_timesync_svc *timesync_svc)
gb_timesync_set_state(timesync_svc,
GB_TIMESYNC_STATE_AUTHORITATIVE);
}
-done:
+ strobe_is_ping = false;
+done_log:
+ trace_gb_timesync_irq(strobe_is_ping, timesync_svc->strobe,
+ GB_TIMESYNC_MAX_STROBES, strobe_time);
+done_nolog:
spin_unlock_irqrestore(&timesync_svc->spinlock, flags);
}
EXPORT_SYMBOL(gb_timesync_irq);
OpenPOWER on IntegriCloud