Skip to content

Commit fe1b5ae

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 4f3ef0a commit fe1b5ae

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
@@ -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)