diff --git a/src/target/armv7m_trace.c b/src/target/armv7m_trace.c index adfef2e9b..02f3f1061 100644 --- a/src/target/armv7m_trace.c +++ b/src/target/armv7m_trace.c @@ -408,8 +408,9 @@ COMMAND_HANDLER(handle_itm_port_command) if (CMD_CTX->mode == COMMAND_EXEC) return armv7m_trace_itm_config(target); - else - return ERROR_OK; + + armv7m->trace_config.itm_deferred_config = true; + return ERROR_OK; } COMMAND_HANDLER(handle_itm_ports_command) @@ -427,8 +428,9 @@ COMMAND_HANDLER(handle_itm_ports_command) if (CMD_CTX->mode == COMMAND_EXEC) return armv7m_trace_itm_config(target); - else - return ERROR_OK; + + armv7m->trace_config.itm_deferred_config = true; + return ERROR_OK; } static const struct command_registration tpiu_command_handlers[] = { diff --git a/src/target/armv7m_trace.h b/src/target/armv7m_trace.h index cdf79e74c..61142b1e3 100644 --- a/src/target/armv7m_trace.h +++ b/src/target/armv7m_trace.h @@ -78,6 +78,8 @@ struct armv7m_trace_config { bool itm_async_timestamps; /** Enable synchronisation packet transmission (for sync port only) */ bool itm_synchro_packets; + /** Config ITM after target examine */ + bool itm_deferred_config; /** Current frequency of TRACECLKIN (usually matches HCLK) */ unsigned int traceclkin_freq; diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c index ce2c426ce..4580c10ff 100644 --- a/src/target/cortex_m.c +++ b/src/target/cortex_m.c @@ -2082,10 +2082,11 @@ int cortex_m_examine(struct target *target) if (retval != ERROR_OK) return retval; - if (armv7m->trace_config.config_type != TRACE_CONFIG_TYPE_DISABLED) { + if (armv7m->trace_config.config_type != TRACE_CONFIG_TYPE_DISABLED) armv7m_trace_tpiu_config(target); + + if (armv7m->trace_config.itm_deferred_config) armv7m_trace_itm_config(target); - } /* NOTE: FPB and DWT are both optional. */