Skip to content

Commit ce6f529

Browse files
nordic-krchkartben
authored andcommitted
drivers: misc: coresight: nrf_etr: Add support for turbo logs
Add support for optimized short log messages (aka turbo logs). They are supported on cpuapp and co-processors owned by cpuapp (FLPR and PPR). In general, it can be supported if cpuapp has access to logging strings used for the log message. Currently mode is supported only in standalone logging. When it is extended for dictionary logging then it will also be supported on other cores (e.g. cpurad). Signed-off-by: Krzysztof Chruściński <[email protected]>
1 parent 9d478d7 commit ce6f529

File tree

1 file changed

+40
-8
lines changed

1 file changed

+40
-8
lines changed

drivers/misc/coresight/nrf_etr.c

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ BUILD_ASSERT((DT_REG_ADDR(ETR_BUFFER_NODE) % CONFIG_DCACHE_LINE_SIZE) == 0);
9797

9898
/* Domain details and prefixes. */
9999
static const uint16_t stm_m_id[] = {0x21, 0x22, 0x23, 0x2c, 0x2d, 0x2e, 0x24, 0x80};
100+
static uint32_t source_id_buf[ARRAY_SIZE(stm_m_id) * 8];
100101
static const char *const stm_m_name[] = {"sec", "app", "rad", "sys", "flpr", "ppr", "mod", "hw"};
101102
static const char *const hw_evts[] = {
102103
"CTI211_0", /* 0 CTI211 triger out 1 */
@@ -196,17 +197,36 @@ static void log_message_process(struct log_frontend_stmesp_demux_log *packet)
196197
/** @brief Process a trace point message. */
197198
static void trace_point_process(struct log_frontend_stmesp_demux_trace_point *packet)
198199
{
199-
static const uint32_t flags = LOG_OUTPUT_FLAG_TIMESTAMP | LOG_OUTPUT_FLAG_FORMAT_TIMESTAMP;
200+
static const uint32_t flags = LOG_OUTPUT_FLAG_TIMESTAMP | LOG_OUTPUT_FLAG_FORMAT_TIMESTAMP |
201+
LOG_OUTPUT_FLAG_LEVEL;
200202
static const char *tp = "%d";
201203
static const char *tp_d32 = "%d %08x";
202204
const char *dname = stm_m_name[packet->major];
203205
static const char *sname = "tp";
204-
205-
if (packet->has_data) {
206+
const char **lptr;
207+
208+
if (packet->id >= CONFIG_LOG_FRONTEND_STMESP_TURBO_LOG_BASE) {
209+
TYPE_SECTION_GET(const char *, log_stmesp_ptr,
210+
packet->id - CONFIG_LOG_FRONTEND_STMESP_TURBO_LOG_BASE, &lptr);
211+
uint8_t level = (uint8_t)((*lptr)[0]) - (uint8_t)'0';
212+
const char *ptr = *lptr + 1;
213+
static const union cbprintf_package_hdr desc0 = {
214+
.desc = {.len = 2 /* hdr + fmt */}};
215+
static const union cbprintf_package_hdr desc1 = {
216+
.desc = {.len = 3 /* hdr + fmt + data */}};
217+
uint32_t tp_log[] = {packet->has_data ? (uint32_t)desc1.raw : (uint32_t)desc0.raw,
218+
(uint32_t)ptr, packet->data};
219+
const char *source =
220+
log_frontend_stmesp_demux_sname_get(packet->major, packet->source_id);
221+
222+
log_output_process(&log_output, packet->timestamp, dname, source, NULL, level,
223+
(const uint8_t *)tp_log, NULL, 0, flags);
224+
return;
225+
} else if (packet->has_data) {
226+
uint32_t id = (uint32_t)packet->id - CONFIG_LOG_FRONTEND_STMESP_TP_CHAN_BASE;
206227
static const union cbprintf_package_hdr desc = {
207228
.desc = {.len = 4 /* hdr + fmt + id + data */}};
208-
uint32_t tp_d32_p[] = {(uint32_t)desc.raw, (uint32_t)tp_d32, packet->id,
209-
packet->data};
229+
uint32_t tp_d32_p[] = {(uint32_t)desc.raw, (uint32_t)tp_d32, id, packet->data};
210230

211231
log_output_process(&log_output, packet->timestamp, dname, sname, NULL, 1,
212232
(const uint8_t *)tp_d32_p, NULL, 0, flags);
@@ -368,7 +388,16 @@ static void decoder_cb(enum mipi_stp_decoder_ctrl_type type,
368388
}
369389
break;
370390
case STP_DATA16:
371-
log_frontend_stmesp_demux_data((char *)&data.data, 2);
391+
if (marked) {
392+
if (ts) {
393+
rv = log_frontend_stmesp_demux_log0((uint16_t)data.data, ts);
394+
new_msg_cnt += rv;
395+
} else {
396+
log_frontend_stmesp_demux_source_id((uint16_t)data.data);
397+
}
398+
} else {
399+
log_frontend_stmesp_demux_data((char *)&data.data, 2);
400+
}
372401
break;
373402
case STP_DATA32:
374403
if (marked) {
@@ -584,8 +613,11 @@ static int decoder_init(void)
584613

585614
once = true;
586615
if (IS_ENABLED(CONFIG_NRF_ETR_DECODE)) {
587-
static const struct log_frontend_stmesp_demux_config config = {.m_ids = stm_m_id,
588-
.m_ids_cnt = ARRAY_SIZE(stm_m_id)};
616+
static const struct log_frontend_stmesp_demux_config config = {
617+
.m_ids = stm_m_id,
618+
.m_ids_cnt = ARRAY_SIZE(stm_m_id),
619+
.source_id_buf = source_id_buf,
620+
.source_id_buf_len = ARRAY_SIZE(source_id_buf)};
589621

590622
err = log_frontend_stmesp_demux_init(&config);
591623
if (err < 0) {

0 commit comments

Comments
 (0)