Skip to content

Commit 51bc60e

Browse files
ahjusnashif
authored andcommitted
logging: frontends: stmesp: alternate message output option
Add an alternate message output option in which messages are ended with an additional zero data byte with marker and timestamp. Can be used to maintain compatibility with certain decoders. Signed-off-by: Juha Sunnari <[email protected]>
1 parent 84dc9a1 commit 51bc60e

File tree

2 files changed

+34
-6
lines changed

2 files changed

+34
-6
lines changed

subsys/logging/frontends/Kconfig

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,14 @@ config LOG_FRONTEND_STMESP_GUARANTEED_ACCESS
7474
When enabled, accessing STMESP registers will stall if write cannot be
7575
performed (e.g. ETR buffer is full).
7676

77+
config LOG_FRONTEND_STMESP_MSG_END_TIMESTAMP
78+
bool "Generate timestamp and marker at message end"
79+
help
80+
Generate a zero data byte with timestamp and marker at message end,
81+
instead of generating a timestamp and marker at message start and
82+
a flag at end. This can be used to maintain compatibility with
83+
certain decoders.
84+
7785
endif # LOG_FRONTEND_STMESP
7886

7987
config LOG_FRONTEND_STMESP_DEMUX

subsys/logging/frontends/log_frontend_stmesp.c

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,11 @@ static inline int16_t get_source_id(const void *source)
312312

313313
static void packet_end(STMESP_Type *stm_esp)
314314
{
315-
STM_FLAG(stm_esp);
315+
if (IS_ENABLED(CONFIG_LOG_FRONTEND_STMESP_MSG_END_TIMESTAMP)) {
316+
STM_D8(stm_esp, 0, true, true);
317+
} else {
318+
STM_FLAG(stm_esp);
319+
}
316320
atomic_set(&new_data, 1);
317321
}
318322

@@ -363,7 +367,11 @@ void log_frontend_msg(const void *source, const struct log_msg_desc desc, uint8_
363367
return;
364368
}
365369

366-
STM_D32(stm_esp, hdr.raw, use_timestamp, true);
370+
if (IS_ENABLED(CONFIG_LOG_FRONTEND_STMESP_MSG_END_TIMESTAMP)) {
371+
STM_D32(stm_esp, hdr.raw, false, false);
372+
} else {
373+
STM_D32(stm_esp, hdr.raw, use_timestamp, true);
374+
}
367375
(void)cbprintf_package_convert(package, desc.package_len, package_cb, stm_esp,
368376
flags, strl, ARRAY_SIZE(strl));
369377
write_data(sname, sname_len, stm_esp);
@@ -412,7 +420,11 @@ void log_frontend_msg(const void *source, const struct log_msg_desc desc, uint8_
412420
return;
413421
}
414422

415-
STM_D32(stm_esp, dict_desc.raw, true, true);
423+
if (IS_ENABLED(CONFIG_LOG_FRONTEND_STMESP_MSG_END_TIMESTAMP)) {
424+
STM_D32(stm_esp, dict_desc.raw, false, false);
425+
} else {
426+
STM_D32(stm_esp, dict_desc.raw, true, true);
427+
}
416428
(void)cbprintf_package_convert(package, desc.package_len, package_cb, stm_esp,
417429
flags, NULL, 0);
418430
if (data) {
@@ -460,7 +472,11 @@ static inline void msg_start(STMESP_Type *stm_esp, uint32_t level, const void *s
460472
{
461473
union stm_log_dict_hdr dict_desc = DICT_HDR_INITIALIZER(level, get_source_id(source), 0);
462474

463-
STM_D32(stm_esp, dict_desc.raw, true, true);
475+
if (IS_ENABLED(CONFIG_LOG_FRONTEND_STMESP_MSG_END_TIMESTAMP)) {
476+
STM_D32(stm_esp, dict_desc.raw, false, false);
477+
} else {
478+
STM_D32(stm_esp, dict_desc.raw, true, true);
479+
}
464480
STM_D32(stm_esp, package_hdr, false, false);
465481
STM_D32(stm_esp, (uint32_t)fmt, false, false);
466482
}
@@ -609,8 +625,12 @@ int log_frontend_stmesp_etr_ready(void)
609625
early_buf_read_mode();
610626

611627
while ((len = early_buf_get_data((void **)&buf)) > 0) {
612-
/* Write first word with Marked and timestamp. */
613-
STM_D32(stm_esp, *buf, true, true);
628+
if (IS_ENABLED(CONFIG_LOG_FRONTEND_STMESP_MSG_END_TIMESTAMP)) {
629+
STM_D32(stm_esp, *buf, false, false);
630+
} else {
631+
/* Write first word with Marked and timestamp. */
632+
STM_D32(stm_esp, *buf, true, true);
633+
}
614634
buf++;
615635
len -= sizeof(uint32_t);
616636

0 commit comments

Comments
 (0)