@@ -97,6 +97,7 @@ BUILD_ASSERT((DT_REG_ADDR(ETR_BUFFER_NODE) % CONFIG_DCACHE_LINE_SIZE) == 0);
9797
9898/* Domain details and prefixes. */
9999static 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 ];
100101static const char * const stm_m_name [] = {"sec" , "app" , "rad" , "sys" , "flpr" , "ppr" , "mod" , "hw" };
101102static 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. */
197198static 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