This is an automated email from Gerrit.

Antonio Borneo (borneo.anto...@gmail.com) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/5978

-- gerrit

commit 96de4154115a66d87fc7108035d4e24533d35f46
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Mon Dec 14 17:08:06 2020 +0100

    armv7m_trace: stop getting traces from adapter at exit
    
    If OpenOCD is reading trace data from the target, at exit it
    should stop the adapter to gather data, but should left the target
    still producing them.
    
    Add an helper in armv7m_trace to disable the adapter's trace and
    call it during OpenOCD teardown.
    
    This also provides a workaround for an issue in the firmware of
    ST-Link V3 till version V3J7. If the SWD connection is closed when
    trace is active, at following connection the trace does not work
    anymore.
    
    Change-Id: I47ccab61405384938555096c5aca789eaa090d27
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>

diff --git a/src/target/armv7m_trace.c b/src/target/armv7m_trace.c
index 916d1a1..10f1422 100644
--- a/src/target/armv7m_trace.c
+++ b/src/target/armv7m_trace.c
@@ -234,6 +234,21 @@ static int trace_connection_closed(struct connection 
*connection)
        return ERROR_OK;
 }
 
+extern struct command_context *global_cmd_ctx;
+
+int armv7m_trace_tpiu_exit(struct target *target)
+{
+       struct armv7m_common *armv7m = target_to_armv7m(target);
+
+       if (global_cmd_ctx->mode == COMMAND_CONFIG ||
+               armv7m->trace_config.config_type == TRACE_CONFIG_TYPE_DISABLED)
+               return ERROR_OK;
+
+       close_trace_channel(armv7m);
+       armv7m->trace_config.config_type = TRACE_CONFIG_TYPE_DISABLED;
+       return armv7m_trace_tpiu_config(target);
+}
+
 COMMAND_HANDLER(handle_tpiu_config_command)
 {
        struct target *target = get_current_target(CMD_CTX);
diff --git a/src/target/armv7m_trace.h b/src/target/armv7m_trace.h
index 076f9d5..cdf79e7 100644
--- a/src/target/armv7m_trace.h
+++ b/src/target/armv7m_trace.h
@@ -96,6 +96,10 @@ extern const struct command_registration 
armv7m_trace_command_handlers[];
  */
 int armv7m_trace_tpiu_config(struct target *target);
 /**
+ * Disable TPIU data gathering at exit
+ */
+int armv7m_trace_tpiu_exit(struct target *target);
+/**
  * Configure hardware accordingly to the current ITM target settings
  */
 int armv7m_trace_itm_config(struct target *target);
diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c
index 316089c..ac308b4 100644
--- a/src/target/cortex_m.c
+++ b/src/target/cortex_m.c
@@ -1648,6 +1648,8 @@ void cortex_m_deinit_target(struct target *target)
 {
        struct cortex_m_common *cortex_m = target_to_cm(target);
 
+       armv7m_trace_tpiu_exit(target);
+
        free(cortex_m->fp_comparator_list);
 
        cortex_m_dwt_free(target);

-- 


_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to