diff options
author | Antonio Borneo <borneo.antonio@gmail.com> | 2023-09-17 11:15:22 +0200 |
---|---|---|
committer | Antonio Borneo <borneo.antonio@gmail.com> | 2024-06-23 09:30:43 +0000 |
commit | dde096e03fa4912aa44b2b72cfbdb7676340a3d1 (patch) | |
tree | ba403431dece7a5b09703d2d712b0920bbcccb50 | |
parent | 198fecf5e4b03c2024c9d75fd5e6045daf681ed5 (diff) | |
download | riscv-openocd-dde096e03fa4912aa44b2b72cfbdb7676340a3d1.zip riscv-openocd-dde096e03fa4912aa44b2b72cfbdb7676340a3d1.tar.gz riscv-openocd-dde096e03fa4912aa44b2b72cfbdb7676340a3d1.tar.bz2 |
itm: fix default initialization
Commit f9509c92dba3 ("itm: rework itm commands before 'init'")
ignores the default enable of ITM channel 0, that is applied when
no 'itm port[s]' is issued.
Call armv7m_trace_itm_config() unconditionally to handle it.
Change-Id: I3e85d0b063ed38c1552f6af9ea9eea2e76aa9025
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reported-by: Paul Fertser <fercerpav@gmail.com>
Fixes: f9509c92dba3 ("itm: rework itm commands before 'init'")
Reviewed-on: https://review.openocd.org/c/openocd/+/7900
Reviewed-by: <post@frankplowman.com>
Tested-by: jenkins
-rw-r--r-- | src/target/armv7m_trace.c | 22 | ||||
-rw-r--r-- | src/target/armv7m_trace.h | 2 | ||||
-rw-r--r-- | src/target/cortex_m.c | 4 |
3 files changed, 16 insertions, 12 deletions
diff --git a/src/target/armv7m_trace.c b/src/target/armv7m_trace.c index 45117d2..556568d 100644 --- a/src/target/armv7m_trace.c +++ b/src/target/armv7m_trace.c @@ -92,11 +92,14 @@ COMMAND_HANDLER(handle_itm_port_command) else armv7m->trace_config.itm_ter[reg_idx] &= ~(1 << port); - if (CMD_CTX->mode == COMMAND_EXEC) - return armv7m_trace_itm_config(target); + /* + * In config mode ITM is not accessible yet. + * Keep the value and it will be programmed at target init. + */ + if (CMD_CTX->mode == COMMAND_CONFIG) + return ERROR_OK; - armv7m->trace_config.itm_deferred_config = true; - return ERROR_OK; + return armv7m_trace_itm_config(target); } COMMAND_HANDLER(handle_itm_ports_command) @@ -112,11 +115,14 @@ COMMAND_HANDLER(handle_itm_ports_command) memset(armv7m->trace_config.itm_ter, enable ? 0xff : 0, sizeof(armv7m->trace_config.itm_ter)); - if (CMD_CTX->mode == COMMAND_EXEC) - return armv7m_trace_itm_config(target); + /* + * In config mode ITM is not accessible yet. + * Keep the value and it will be programmed at target init. + */ + if (CMD_CTX->mode == COMMAND_CONFIG) + return ERROR_OK; - armv7m->trace_config.itm_deferred_config = true; - return ERROR_OK; + return armv7m_trace_itm_config(target); } static const struct command_registration itm_command_handlers[] = { diff --git a/src/target/armv7m_trace.h b/src/target/armv7m_trace.h index 5abb0b9..02eca93 100644 --- a/src/target/armv7m_trace.h +++ b/src/target/armv7m_trace.h @@ -35,8 +35,6 @@ 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; }; extern const struct command_registration armv7m_trace_command_handlers[]; diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c index 7f62a6d..34c7cd4 100644 --- a/src/target/cortex_m.c +++ b/src/target/cortex_m.c @@ -2659,8 +2659,8 @@ int cortex_m_examine(struct target *target) if (retval != ERROR_OK) return retval; - if (armv7m->trace_config.itm_deferred_config) - armv7m_trace_itm_config(target); + /* Configure ITM */ + armv7m_trace_itm_config(target); /* NOTE: FPB and DWT are both optional. */ |