Skip to content

Commit 9b51e3e

Browse files
committed
debugability: Add possibility to use up to 4 params in log messages.
Signed-off-by: ArturX Kloniecki <arturx.kloniecki@linux.intel.com>
1 parent 7996f1a commit 9b51e3e

2 files changed

Lines changed: 155 additions & 2 deletions

File tree

src/include/sof/trace.h

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,15 @@ void _trace_event_atomic3(uint32_t log_entry, uint32_t param1, uint32_t param2,
111111
void _trace_event_mbox_atomic3(uint32_t log_entry, uint32_t param1,
112112
uint32_t param2, uint32_t param3);
113113

114+
void _trace_event4(uint32_t log_entry, uint32_t param1, uint32_t param2,
115+
uint32_t param3, uint32_t param4);
116+
void _trace_event_mbox4(uint32_t log_entry, uint32_t param1, uint32_t param2,
117+
uint32_t param3, uint32_t param4);
118+
void _trace_event_atomic4(uint32_t log_entry, uint32_t param1, uint32_t param2,
119+
uint32_t param3, uint32_t param4);
120+
void _trace_event_mbox_atomic4(uint32_t log_entry, uint32_t param1,
121+
uint32_t param2, uint32_t param3, uint32_t param4);
122+
114123
void trace_flush(void);
115124
void trace_off(void);
116125
void trace_init(struct sof *sof);
@@ -124,8 +133,9 @@ void trace_init(struct sof *sof);
124133
* It comes in 2 main flavours, atomic and non-atomic. Depending of definitions
125134
* above, it might also propagate log messages to mbox if desired.
126135
*
127-
* First argument is always class of event being logged, as defined above.
128-
* Second argument is string literal in printf format, followed by up to 3
136+
* First argument is always class of event being logged, as defined in
137+
* uapi/logging.h.
138+
* Second argument is string literal in printf format, followed by up to 4
129139
* parameters (uint32_t), that are used to expand into string fromat when
130140
* parsing log data.
131141
*
@@ -232,6 +242,9 @@ typedef void(*log_func)();
232242
} else if (PP_NARG(__VA_ARGS__) == 3) { \
233243
log_function = (log_func)&function_name##3; \
234244
log_function(entry, ##__VA_ARGS__); \
245+
} else if (PP_NARG(__VA_ARGS__) == 4) { \
246+
log_function = (log_func)&function_name##4; \
247+
log_function(entry, ##__VA_ARGS__); \
235248
} \
236249
}
237250

src/lib/trace.c

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,146 @@ void _trace_event_mbox_atomic3(uint32_t log_entry, uint32_t param1,
558558
sizeof(uint32_t) * message_size_dwords);
559559
}
560560

561+
/* send trace events only to the local trace buffer */
562+
void _trace_event4(uint32_t log_entry, uint32_t param1, uint32_t param2,
563+
uint32_t param3, uint32_t param4)
564+
{
565+
uint32_t message_size_dwords = MESSAGE_SIZE(4);
566+
uint32_t payload_offset = sizeof(struct log_entry_header)
567+
/ sizeof(uint32_t);
568+
uint32_t dt[MESSAGE_SIZE(4)];
569+
570+
if (!trace->enable)
571+
return;
572+
573+
put_header(dt, platform_timer_get(platform_timer));
574+
575+
dt[payload_offset] = log_entry;
576+
dt[payload_offset + 1] = param1;
577+
dt[payload_offset + 2] = param2;
578+
dt[payload_offset + 3] = param3;
579+
dt[payload_offset + 4] = param4;
580+
dtrace_event((const char *)dt, sizeof(uint32_t) * message_size_dwords);
581+
}
582+
583+
void _trace_event_atomic4(uint32_t log_entry, uint32_t param1, uint32_t param2,
584+
uint32_t param3, uint32_t param4)
585+
{
586+
uint32_t message_size_dwords = MESSAGE_SIZE(4);
587+
uint32_t payload_offset = sizeof(struct log_entry_header)
588+
/ sizeof(uint32_t);
589+
uint32_t dt[MESSAGE_SIZE(4)];
590+
591+
if (!trace->enable)
592+
return;
593+
594+
put_header(dt, platform_timer_get(platform_timer));
595+
596+
dt[payload_offset] = log_entry;
597+
dt[payload_offset + 1] = param1;
598+
dt[payload_offset + 2] = param2;
599+
dt[payload_offset + 3] = param3;
600+
dt[payload_offset + 4] = param4;
601+
dtrace_event_atomic((const char *)dt,
602+
sizeof(uint32_t) * message_size_dwords);
603+
}
604+
605+
/* send trace events to the local trace buffer and the mailbox */
606+
void _trace_event_mbox4(uint32_t log_entry, uint32_t param1, uint32_t param2,
607+
uint32_t param3, uint32_t param4)
608+
{
609+
unsigned long flags;
610+
uint32_t message_size_dwords = MESSAGE_SIZE(4);
611+
uint32_t payload_offset = sizeof(struct log_entry_header)
612+
/ sizeof(uint32_t);
613+
uint32_t dt[MESSAGE_SIZE(4)];
614+
uint64_t time;
615+
616+
volatile uint32_t *t;
617+
618+
if (!trace->enable)
619+
return;
620+
621+
time = platform_timer_get(platform_timer);
622+
623+
put_header(dt, time);
624+
625+
dt[payload_offset] = log_entry;
626+
dt[payload_offset + 1] = param1;
627+
dt[payload_offset + 2] = param2;
628+
dt[payload_offset + 3] = param3;
629+
dt[payload_offset + 4] = param4;
630+
dtrace_event((const char *)dt, sizeof(uint32_t) * message_size_dwords);
631+
632+
/* send event by mail box too. */
633+
spin_lock_irq(&trace->lock, flags);
634+
635+
/* write timestamp and event to trace buffer */
636+
t = (volatile uint32_t *)(MAILBOX_TRACE_BASE + trace->pos);
637+
trace->pos += sizeof(uint32_t) * message_size_dwords;
638+
639+
if (trace->pos > MAILBOX_TRACE_SIZE
640+
- sizeof(uint32_t) * message_size_dwords)
641+
trace->pos = 0;
642+
643+
spin_unlock_irq(&trace->lock, flags);
644+
645+
put_header(t, time);
646+
t[payload_offset] = log_entry;
647+
t[payload_offset + 1] = param1;
648+
t[payload_offset + 2] = param2;
649+
t[payload_offset + 3] = param3;
650+
t[payload_offset + 4] = param4;
651+
652+
/* writeback trace data */
653+
dcache_writeback_region((void *)t,
654+
sizeof(uint32_t) * message_size_dwords);
655+
}
656+
657+
void _trace_event_mbox_atomic4(uint32_t log_entry, uint32_t param1,
658+
uint32_t param2, uint32_t param3, uint32_t param4)
659+
{
660+
volatile uint32_t *t;
661+
uint32_t message_size_dwords = MESSAGE_SIZE(4);
662+
uint32_t payload_offset = sizeof(struct log_entry_header)
663+
/ sizeof(uint32_t);
664+
uint32_t dt[MESSAGE_SIZE(4)];
665+
uint64_t time;
666+
667+
if (!trace->enable)
668+
return;
669+
670+
time = platform_timer_get(platform_timer);
671+
672+
put_header(dt, time);
673+
dt[payload_offset] = log_entry;
674+
dt[payload_offset + 1] = param1;
675+
dt[payload_offset + 2] = param2;
676+
dt[payload_offset + 3] = param3;
677+
dt[payload_offset + 4] = param4;
678+
dtrace_event_atomic((const char *)dt,
679+
sizeof(uint32_t) * message_size_dwords);
680+
681+
/* write timestamp and event to trace buffer */
682+
t = (volatile uint32_t *)(MAILBOX_TRACE_BASE + trace->pos);
683+
trace->pos += sizeof(uint32_t) * message_size_dwords;
684+
685+
if (trace->pos > MAILBOX_TRACE_SIZE
686+
- sizeof(uint32_t) * message_size_dwords)
687+
trace->pos = 0;
688+
689+
put_header(t, time);
690+
t[payload_offset] = log_entry;
691+
t[payload_offset + 1] = param1;
692+
t[payload_offset + 2] = param2;
693+
t[payload_offset + 3] = param3;
694+
t[payload_offset + 4] = param4;
695+
696+
/* writeback trace data */
697+
dcache_writeback_region((void *)t,
698+
sizeof(uint32_t) * message_size_dwords);
699+
}
700+
561701
void trace_flush(void)
562702
{
563703
volatile uint64_t *t;

0 commit comments

Comments
 (0)