Skip to content

Commit 4dc53ac

Browse files
committed
[nrf fromtree] 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]> (cherry picked from commit 51bc60e)
1 parent 15ffa30 commit 4dc53ac

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
@@ -73,6 +73,14 @@ config LOG_FRONTEND_STMESP_GUARANTEED_ACCESS
7373
When enabled, accessing STMESP registers will stall if write cannot be
7474
performed (e.g. ETR buffer is full).
7575

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

7886
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
@@ -314,7 +314,11 @@ static inline int16_t get_source_id(const void *source)
314314

315315
static void packet_end(STMESP_Type *stm_esp)
316316
{
317-
STM_FLAG(stm_esp);
317+
if (IS_ENABLED(CONFIG_LOG_FRONTEND_STMESP_MSG_END_TIMESTAMP)) {
318+
STM_D8(stm_esp, 0, true, true);
319+
} else {
320+
STM_FLAG(stm_esp);
321+
}
318322
atomic_set(&new_data, 1);
319323
}
320324

@@ -365,7 +369,11 @@ void log_frontend_msg(const void *source, const struct log_msg_desc desc, uint8_
365369
return;
366370
}
367371

368-
STM_D32(stm_esp, hdr.raw, use_timestamp, true);
372+
if (IS_ENABLED(CONFIG_LOG_FRONTEND_STMESP_MSG_END_TIMESTAMP)) {
373+
STM_D32(stm_esp, hdr.raw, false, false);
374+
} else {
375+
STM_D32(stm_esp, hdr.raw, use_timestamp, true);
376+
}
369377
(void)cbprintf_package_convert(package, desc.package_len, package_cb, stm_esp,
370378
flags, strl, ARRAY_SIZE(strl));
371379
write_data(sname, sname_len, stm_esp);
@@ -414,7 +422,11 @@ void log_frontend_msg(const void *source, const struct log_msg_desc desc, uint8_
414422
return;
415423
}
416424

417-
STM_D32(stm_esp, dict_desc.raw, true, true);
425+
if (IS_ENABLED(CONFIG_LOG_FRONTEND_STMESP_MSG_END_TIMESTAMP)) {
426+
STM_D32(stm_esp, dict_desc.raw, false, false);
427+
} else {
428+
STM_D32(stm_esp, dict_desc.raw, true, true);
429+
}
418430
(void)cbprintf_package_convert(package, desc.package_len, package_cb, stm_esp,
419431
flags, NULL, 0);
420432
if (data) {
@@ -462,7 +474,11 @@ static inline void msg_start(STMESP_Type *stm_esp, uint32_t level, const void *s
462474
{
463475
union stm_log_dict_hdr dict_desc = DICT_HDR_INITIALIZER(level, get_source_id(source), 0);
464476

465-
STM_D32(stm_esp, dict_desc.raw, true, true);
477+
if (IS_ENABLED(CONFIG_LOG_FRONTEND_STMESP_MSG_END_TIMESTAMP)) {
478+
STM_D32(stm_esp, dict_desc.raw, false, false);
479+
} else {
480+
STM_D32(stm_esp, dict_desc.raw, true, true);
481+
}
466482
STM_D32(stm_esp, package_hdr, false, false);
467483
STM_D32(stm_esp, (uint32_t)fmt, false, false);
468484
}
@@ -611,8 +627,12 @@ int log_frontend_stmesp_etr_ready(void)
611627
early_buf_read_mode();
612628

613629
while ((len = early_buf_get_data((void **)&buf)) > 0) {
614-
/* Write first word with Marked and timestamp. */
615-
STM_D32(stm_esp, *buf, true, true);
630+
if (IS_ENABLED(CONFIG_LOG_FRONTEND_STMESP_MSG_END_TIMESTAMP)) {
631+
STM_D32(stm_esp, *buf, false, false);
632+
} else {
633+
/* Write first word with Marked and timestamp. */
634+
STM_D32(stm_esp, *buf, true, true);
635+
}
616636
buf++;
617637
len -= sizeof(uint32_t);
618638

0 commit comments

Comments
 (0)