[Sound-open-firmware] [PATCH 2/3] trace: core: add macro to enable sending all trace to mbox

Ranjani Sridharan ranjani.sridharan at linux.intel.com
Mon Mar 26 02:34:05 CEST 2018


This patch adds a macro that can be used to enable sending all
trace to mbox.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com>
---
Tested with
Minnowboard Turbot with RT5651
Kernel: https://github.com/plbossart/sound.git branch: topic/sof-v4.14
SOF: https://github.com/ranj063/sof.git branch: debug/trace_test
SOFT: 1.1-stable
---
---
 src/include/reef/trace.h | 12 ++++++++-
 src/lib/trace.c          | 65 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 76 insertions(+), 1 deletion(-)

diff --git a/src/include/reef/trace.h b/src/include/reef/trace.h
index 7afbd23..f3f4dff 100644
--- a/src/include/reef/trace.h
+++ b/src/include/reef/trace.h
@@ -100,22 +100,32 @@
 #define TRACE	1
 #define TRACEV	0
 #define TRACEE	1
+#define TRACEM	0 /* send all trace messages to mbox */
 
 void _trace_event(uint32_t event);
+void _trace_event_mbox(uint32_t event);
 void _trace_error(uint32_t event);
 void _trace_error_value(uint32_t event);
 void _trace_event_atomic(uint32_t event);
+void _trace_event_mbox_atomic(uint32_t event);
 void _trace_error_atomic(uint32_t event);
 void trace_off(void);
 void trace_init(struct reef * reef);
 
 #if TRACE
 
+/* send all trace to mbox */
+#if TRACEM
+#define trace_event(__c, __e) \
+	_trace_event_mbox(__c | (__e[0] << 16) | (__e[1] << 8) | __e[2])
+#define trace_event_atomic(__c, __e) \
+	_trace_event_mbox_atomic(__c | (__e[0] << 16) | (__e[1] << 8) | __e[2])
+#else
 #define trace_event(__c, __e) \
 	_trace_event(__c | (__e[0] << 16) | (__e[1] <<8) | __e[2])
 #define trace_event_atomic(__c, __e) \
 	_trace_event_atomic(__c | (__e[0] << 16) | (__e[1] <<8) | __e[2])
-
+#endif
 #define trace_value(x)	_trace_event(x)
 #define trace_value_atomic(x)	_trace_event_atomic(x)
 
diff --git a/src/lib/trace.c b/src/lib/trace.c
index de99a4e..bd0d376 100644
--- a/src/lib/trace.c
+++ b/src/lib/trace.c
@@ -136,6 +136,71 @@ void _trace_event_atomic(uint32_t event)
 	dtrace_event_atomic((const char*)dt, sizeof(uint64_t) * 2);
 }
 
+void _trace_event_mbox(uint32_t event)
+{
+	unsigned long flags;
+	uint64_t dt[2];
+	uint64_t time;
+
+	volatile uint64_t *t;
+
+	if (!trace.enable)
+		return;
+
+	time = platform_timer_get(platform_timer);
+
+	dt[0] = time;
+	dt[1] = event;
+	dtrace_event((const char *)dt, sizeof(uint64_t) * 2);
+
+	/* send event by mail box too. */
+	spin_lock_irq(&trace.lock, flags);
+
+	/* write timestamp and event to trace buffer */
+	t = (volatile uint64_t *)(MAILBOX_TRACE_BASE + trace.pos);
+	trace.pos += (sizeof(uint64_t) << 1);
+
+	if (trace.pos > MAILBOX_TRACE_SIZE - sizeof(uint64_t) * 2)
+		trace.pos = 0;
+
+	spin_unlock_irq(&trace.lock, flags);
+
+	t[0] = time;
+	t[1] = event;
+
+	/* writeback trace data */
+	dcache_writeback_region((void *)t, sizeof(uint64_t) * 2);
+}
+
+void _trace_event_mbox_atomic(uint32_t event)
+{
+	volatile uint64_t *t;
+	uint64_t dt[2];
+	uint64_t time;
+
+	if (!trace.enable)
+		return;
+
+	time = platform_timer_get(platform_timer);
+
+	dt[0] = time;
+	dt[1] = event;
+	dtrace_event_atomic((const char *)dt, sizeof(uint64_t) * 2);
+
+	/* write timestamp and event to trace buffer */
+	t = (volatile uint64_t *)(MAILBOX_TRACE_BASE + trace.pos);
+	trace.pos += (sizeof(uint64_t) << 1);
+
+	if (trace.pos > MAILBOX_TRACE_SIZE - sizeof(uint64_t) * 2)
+		trace.pos = 0;
+
+	t[0] = time;
+	t[1] = event;
+
+	/* writeback trace data */
+	dcache_writeback_region((void *)t, sizeof(uint64_t) * 2);
+}
+
 void trace_off(void)
 {
 	trace.enable = 0;
-- 
2.14.1



More information about the Sound-open-firmware mailing list