target/esp_xtensa: add xtensa on_halt handler 57/7757/2
authorErhan Kurubas <erhan.kurubas@espressif.com>
Tue, 4 Jul 2023 16:40:36 +0000 (18:40 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Fri, 14 Jul 2023 16:44:26 +0000 (16:44 +0000)
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
src/target/espressif/esp32.c
src/target/espressif/esp32s2.c
src/target/espressif/esp32s3.c
src/target/espressif/esp_xtensa.c
src/target/espressif/esp_xtensa.h
src/target/espressif/esp_xtensa_smp.c
src/target/espressif/esp_xtensa_smp.h

index 74bbe50bdd1d3e7a0282b0d6466dd8ec2fe80f02..5cc236c36f45c5f35ed51e40d3ccd70e506ecaab 100644 (file)
@@ -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)
index a11d05f0f22566866fe6d91adbfaac72c4764be1..3628cc0931758b96026e487f9cf796c4000b4588 100644 (file)
@@ -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)
index 485567836bae78a3b7c0e94ed6728a58e81484e8..074155f6a62074a48013a880ca0d55e8170033fe 100644 (file)
@@ -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)
index 44764aeca7df9b04a3dc7c06327c65f0ec74c05d..3dfcc0fb2c5642e63045ce6c3e2c5a27c1afa6c0 100644 (file)
 #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,
index 8807f0c3259929d1b6e91b68ff35b94c2e301ea0..0b06b0395ca47f7bcb2ea6e390a5570c0e1c4faf 100644 (file)
@@ -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 */
index 1d037741da30fd79e65e0296f54ea3a75239682e..93c53f15b79efd7bd1b63ba6cf2ae9603bcfed01 100644 (file)
@@ -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;
index aeb1d61f58c764485be1ecc4bce6596a4cd09cba..4e4f3b33211281a7e28f893d6e527ec58d2e2a93 100644 (file)
@@ -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);

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)