aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorErhan Kurubas <erhan.kurubas@espressif.com>2023-07-04 18:40:36 +0200
committerAntonio Borneo <borneo.antonio@gmail.com>2023-07-14 16:44:26 +0000
commit29b02402ffdcb4fcf04492e4228a303cc02e9658 (patch)
tree0476d57c120334b0587e63e99f8c666a6bbe4800 /src
parent78daf24a5c29664669bb1d9d7851cbbb90dbc444 (diff)
downloadriscv-openocd-29b02402ffdcb4fcf04492e4228a303cc02e9658.zip
riscv-openocd-29b02402ffdcb4fcf04492e4228a303cc02e9658.tar.gz
riscv-openocd-29b02402ffdcb4fcf04492e4228a303cc02e9658.tar.bz2
target/esp_xtensa: add xtensa on_halt handler
Right after target halt, some activities needs to be done such as printing exception reason, disable wdts and reading debug stubs information. Missing activities will be submitted in the next patches. Signed-off-by: Erhan Kurubas <erhan.kurubas@espressif.com> Change-Id: I27aad5614d903f4bd7c8d6dba6bfb0bdb93ed8dc Reviewed-on: https://review.openocd.org/c/openocd/+/7757 Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com> Tested-by: jenkins
Diffstat (limited to 'src')
-rw-r--r--src/target/espressif/esp32.c5
-rw-r--r--src/target/espressif/esp32s2.c5
-rw-r--r--src/target/espressif/esp32s3.c5
-rw-r--r--src/target/espressif/esp_xtensa.c6
-rw-r--r--src/target/espressif/esp_xtensa.h1
-rw-r--r--src/target/espressif/esp_xtensa_smp.c15
-rw-r--r--src/target/espressif/esp_xtensa_smp.h1
7 files changed, 35 insertions, 3 deletions
diff --git a/src/target/espressif/esp32.c b/src/target/espressif/esp32.c
index 74bbe50..5cc236c 100644
--- a/src/target/espressif/esp32.c
+++ b/src/target/espressif/esp32.c
@@ -266,7 +266,10 @@ static int esp32_disable_wdts(struct target *target)
static int esp32_on_halt(struct target *target)
{
- return esp32_disable_wdts(target);
+ int ret = esp32_disable_wdts(target);
+ if (ret == ERROR_OK)
+ ret = esp_xtensa_smp_on_halt(target);
+ return ret;
}
static int esp32_arch_state(struct target *target)
diff --git a/src/target/espressif/esp32s2.c b/src/target/espressif/esp32s2.c
index a11d05f..3628cc0 100644
--- a/src/target/espressif/esp32s2.c
+++ b/src/target/espressif/esp32s2.c
@@ -385,7 +385,10 @@ static int esp32s2_arch_state(struct target *target)
static int esp32s2_on_halt(struct target *target)
{
- return esp32s2_disable_wdts(target);
+ int ret = esp32s2_disable_wdts(target);
+ if (ret == ERROR_OK)
+ ret = esp_xtensa_on_halt(target);
+ return ret;
}
static int esp32s2_step(struct target *target, int current, target_addr_t address, int handle_breakpoints)
diff --git a/src/target/espressif/esp32s3.c b/src/target/espressif/esp32s3.c
index 4855678..074155f 100644
--- a/src/target/espressif/esp32s3.c
+++ b/src/target/espressif/esp32s3.c
@@ -283,7 +283,10 @@ static int esp32s3_disable_wdts(struct target *target)
static int esp32s3_on_halt(struct target *target)
{
- return esp32s3_disable_wdts(target);
+ int ret = esp32s3_disable_wdts(target);
+ if (ret == ERROR_OK)
+ ret = esp_xtensa_smp_on_halt(target);
+ return ret;
}
static int esp32s3_arch_state(struct target *target)
diff --git a/src/target/espressif/esp_xtensa.c b/src/target/espressif/esp_xtensa.c
index 44764ae..3dfcc0f 100644
--- a/src/target/espressif/esp_xtensa.c
+++ b/src/target/espressif/esp_xtensa.c
@@ -17,6 +17,12 @@
#include "esp_xtensa.h"
#include "esp_semihosting.h"
+int esp_xtensa_on_halt(struct target *target)
+{
+ /* will be used in the next patches */
+ return ERROR_OK;
+}
+
int esp_xtensa_init_arch_info(struct target *target,
struct esp_xtensa_common *esp_xtensa,
struct xtensa_debug_module_config *dm_cfg,
diff --git a/src/target/espressif/esp_xtensa.h b/src/target/espressif/esp_xtensa.h
index 8807f0c..0b06b03 100644
--- a/src/target/espressif/esp_xtensa.h
+++ b/src/target/espressif/esp_xtensa.h
@@ -36,5 +36,6 @@ void esp_xtensa_queue_tdi_idle(struct target *target);
int esp_xtensa_breakpoint_add(struct target *target, struct breakpoint *breakpoint);
int esp_xtensa_breakpoint_remove(struct target *target, struct breakpoint *breakpoint);
int esp_xtensa_poll(struct target *target);
+int esp_xtensa_on_halt(struct target *target);
#endif /* OPENOCD_TARGET_ESP_XTENSA_H */
diff --git a/src/target/espressif/esp_xtensa_smp.c b/src/target/espressif/esp_xtensa_smp.c
index 1d03774..93c53f1 100644
--- a/src/target/espressif/esp_xtensa_smp.c
+++ b/src/target/espressif/esp_xtensa_smp.c
@@ -112,6 +112,21 @@ int esp_xtensa_smp_soft_reset_halt(struct target *target)
return ERROR_OK;
}
+int esp_xtensa_smp_on_halt(struct target *target)
+{
+ struct target_list *head;
+
+ if (!target->smp)
+ return esp_xtensa_on_halt(target);
+
+ foreach_smp_target(head, target->smp_targets) {
+ int res = esp_xtensa_on_halt(head->target);
+ if (res != ERROR_OK)
+ return res;
+ }
+ return ERROR_OK;
+}
+
static struct target *get_halted_esp_xtensa_smp(struct target *target, int32_t coreid)
{
struct target_list *head;
diff --git a/src/target/espressif/esp_xtensa_smp.h b/src/target/espressif/esp_xtensa_smp.h
index aeb1d61..4e4f3b3 100644
--- a/src/target/espressif/esp_xtensa_smp.h
+++ b/src/target/espressif/esp_xtensa_smp.h
@@ -37,6 +37,7 @@ int esp_xtensa_smp_step(struct target *target,
int esp_xtensa_smp_assert_reset(struct target *target);
int esp_xtensa_smp_deassert_reset(struct target *target);
int esp_xtensa_smp_soft_reset_halt(struct target *target);
+int esp_xtensa_smp_on_halt(struct target *target);
int esp_xtensa_smp_watchpoint_add(struct target *target, struct watchpoint *watchpoint);
int esp_xtensa_smp_watchpoint_remove(struct target *target, struct watchpoint *watchpoint);
int esp_xtensa_smp_handle_target_event(struct target *target, enum target_event event, void *priv);