Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

logging: frontends: stmesp: Add turbo logs #79492

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 40 additions & 8 deletions drivers/misc/coresight/nrf_etr.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ BUILD_ASSERT((DT_REG_ADDR(ETR_BUFFER_NODE) % CONFIG_DCACHE_LINE_SIZE) == 0);

/* Domain details and prefixes. */
static const uint16_t stm_m_id[] = {0x21, 0x22, 0x23, 0x2c, 0x2d, 0x2e, 0x24, 0x80};
static uint32_t source_id_buf[ARRAY_SIZE(stm_m_id) * 8];
static const char *const stm_m_name[] = {"sec", "app", "rad", "sys", "flpr", "ppr", "mod", "hw"};
static const char *const hw_evts[] = {
"CTI211_0", /* 0 CTI211 triger out 1 */
Expand Down Expand Up @@ -185,17 +186,36 @@ static void log_message_process(struct log_frontend_stmesp_demux_log *packet)
/** @brief Process a trace point message. */
static void trace_point_process(struct log_frontend_stmesp_demux_trace_point *packet)
{
static const uint32_t flags = LOG_OUTPUT_FLAG_TIMESTAMP | LOG_OUTPUT_FLAG_FORMAT_TIMESTAMP;
static const uint32_t flags = LOG_OUTPUT_FLAG_TIMESTAMP | LOG_OUTPUT_FLAG_FORMAT_TIMESTAMP |
LOG_OUTPUT_FLAG_LEVEL;
static const char *tp = "%d";
static const char *tp_d32 = "%d %08x";
const char *dname = stm_m_name[packet->major];
static const char *sname = "tp";

if (packet->has_data) {
const char **lptr;

if (packet->id >= CONFIG_LOG_FRONTEND_STMESP_TURBO_LOG_BASE) {
TYPE_SECTION_GET(const char *, log_stmesp_ptr,
packet->id - CONFIG_LOG_FRONTEND_STMESP_TURBO_LOG_BASE, &lptr);
uint8_t level = (uint8_t)((*lptr)[0]) - (uint8_t)'0';
const char *ptr = *lptr + 1;
static const union cbprintf_package_hdr desc0 = {
.desc = {.len = 2 /* hdr + fmt */}};
static const union cbprintf_package_hdr desc1 = {
.desc = {.len = 3 /* hdr + fmt + data */}};
uint32_t tp_log[] = {packet->has_data ? (uint32_t)desc1.raw : (uint32_t)desc0.raw,
(uint32_t)ptr, packet->data};
const char *source =
log_frontend_stmesp_demux_sname_get(packet->major, packet->source_id);

log_output_process(&log_output, packet->timestamp, dname, source, NULL, level,
(const uint8_t *)tp_log, NULL, 0, flags);
return;
} else if (packet->has_data) {
uint32_t id = (uint32_t)packet->id - CONFIG_LOG_FRONTEND_STMESP_TP_CHAN_BASE;
static const union cbprintf_package_hdr desc = {
.desc = {.len = 4 /* hdr + fmt + id + data */}};
uint32_t tp_d32_p[] = {(uint32_t)desc.raw, (uint32_t)tp_d32, packet->id,
packet->data};
uint32_t tp_d32_p[] = {(uint32_t)desc.raw, (uint32_t)tp_d32, id, packet->data};

log_output_process(&log_output, packet->timestamp, dname, sname, NULL, 1,
(const uint8_t *)tp_d32_p, NULL, 0, flags);
Expand Down Expand Up @@ -357,7 +377,16 @@ static void decoder_cb(enum mipi_stp_decoder_ctrl_type type,
}
break;
case STP_DATA16:
log_frontend_stmesp_demux_data((char *)&data.data, 2);
if (marked) {
if (ts) {
rv = log_frontend_stmesp_demux_log0((uint16_t)data.data, ts);
new_msg_cnt += rv;
} else {
log_frontend_stmesp_demux_source_id((uint16_t)data.data);
}
} else {
log_frontend_stmesp_demux_data((char *)&data.data, 2);
}
break;
case STP_DATA32:
if (marked) {
Expand Down Expand Up @@ -573,8 +602,11 @@ static int decoder_init(void)

once = true;
if (IS_ENABLED(CONFIG_NRF_ETR_DECODE)) {
static const struct log_frontend_stmesp_demux_config config = {.m_ids = stm_m_id,
.m_ids_cnt = ARRAY_SIZE(stm_m_id)};
static const struct log_frontend_stmesp_demux_config config = {
.m_ids = stm_m_id,
.m_ids_cnt = ARRAY_SIZE(stm_m_id),
.source_id_buf = source_id_buf,
.source_id_buf_len = ARRAY_SIZE(source_id_buf)};

err = log_frontend_stmesp_demux_init(&config);
if (err < 0) {
Expand Down
14 changes: 14 additions & 0 deletions include/zephyr/linker/common-rom/common-rom-logging.ld
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,22 @@
{
Z_LINK_ITERABLE(log_strings);
} GROUP_ROM_LINK_IN(DEVNULL_REGION, DEVNULL_REGION)

SECTION_PROLOGUE(log_stmesp_ptr,(COPY),SUBALIGN(Z_LINK_ITERABLE_SUBALIGN))
{
Z_LINK_ITERABLE(log_stmesp_ptr);
} GROUP_ROM_LINK_IN(DEVNULL_REGION, DEVNULL_REGION)

SECTION_PROLOGUE(log_stmesp_str,(COPY),SUBALIGN(Z_LINK_ITERABLE_SUBALIGN))
{
Z_LINK_ITERABLE(log_stmesp_str);
} GROUP_ROM_LINK_IN(DEVNULL_REGION, DEVNULL_REGION)
#else
ITERABLE_SECTION_ROM(log_strings, Z_LINK_ITERABLE_SUBALIGN)

ITERABLE_SECTION_ROM(log_stmesp_ptr, Z_LINK_ITERABLE_SUBALIGN)

ITERABLE_SECTION_ROM(log_stmesp_str, Z_LINK_ITERABLE_SUBALIGN)
#endif

ITERABLE_SECTION_ROM(log_const, Z_LINK_ITERABLE_SUBALIGN)
Expand Down
Loading
Loading