aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2023-09-17 11:15:22 +0200
committerAntonio Borneo <borneo.antonio@gmail.com>2024-06-23 09:30:43 +0000
commitdde096e03fa4912aa44b2b72cfbdb7676340a3d1 (patch)
treeba403431dece7a5b09703d2d712b0920bbcccb50
parent198fecf5e4b03c2024c9d75fd5e6045daf681ed5 (diff)
downloadriscv-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.c22
-rw-r--r--src/target/armv7m_trace.h2
-rw-r--r--src/target/cortex_m.c4
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. */