aboutsummaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2021-12-16 12:54:35 +0100
committerAntonio Borneo <borneo.antonio@gmail.com>2022-02-14 15:10:56 +0000
commit49c40a75292b1f76fa0d4bad91c993d9f7a618cf (patch)
tree767aa982710ad84c17a58d974e84809d0ea5fe55 /src/target
parenta11fe473eaee235a51dba7900c08cc7629ed2794 (diff)
downloadriscv-openocd-49c40a75292b1f76fa0d4bad91c993d9f7a618cf.zip
riscv-openocd-49c40a75292b1f76fa0d4bad91c993d9f7a618cf.tar.gz
riscv-openocd-49c40a75292b1f76fa0d4bad91c993d9f7a618cf.tar.bz2
target/riscv: revive 'riscv resume_order'
This functionality was lost in [1], which was merged as commit 615709d14049 ("Upstream a whole host of RISC-V changes."). Now it works as expected again. Add convenience macro foreach_smp_target_direction(). Link: [1] https://github.com/riscv/riscv-openocd/pull/567 Change-Id: I1545fa6b45b8a07e27c8ff9dcdcfa2fc4f950cd1 Signed-off-by: Tim Newsome <tim@sifive.com> Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/6785 Tested-by: jenkins
Diffstat (limited to 'src/target')
-rw-r--r--src/target/riscv/riscv.c9
-rw-r--r--src/target/smp.h3
2 files changed, 9 insertions, 3 deletions
diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c
index 931f762..367506d 100644
--- a/src/target/riscv/riscv.c
+++ b/src/target/riscv/riscv.c
@@ -1472,14 +1472,16 @@ int riscv_resume(
int result = ERROR_OK;
if (target->smp && !single_hart) {
struct target_list *tlist;
- foreach_smp_target(tlist, target->smp_targets) {
+ foreach_smp_target_direction(resume_order == RO_NORMAL,
+ tlist, target->smp_targets) {
struct target *t = tlist->target;
if (resume_prep(t, current, address, handle_breakpoints,
debug_execution) != ERROR_OK)
result = ERROR_FAIL;
}
- foreach_smp_target(tlist, target->smp_targets) {
+ foreach_smp_target_direction(resume_order == RO_NORMAL,
+ tlist, target->smp_targets) {
struct target *t = tlist->target;
riscv_info_t *i = riscv_info(t);
if (i->prepped) {
@@ -1489,7 +1491,8 @@ int riscv_resume(
}
}
- foreach_smp_target(tlist, target->smp_targets) {
+ foreach_smp_target_direction(resume_order == RO_NORMAL,
+ tlist, target->smp_targets) {
struct target *t = tlist->target;
if (resume_finish(t) != ERROR_OK)
return ERROR_FAIL;
diff --git a/src/target/smp.h b/src/target/smp.h
index 46fc55f..490a493 100644
--- a/src/target/smp.h
+++ b/src/target/smp.h
@@ -25,6 +25,9 @@
#define foreach_smp_target(pos, head) \
list_for_each_entry(pos, head, lh)
+#define foreach_smp_target_direction(forward, pos, head) \
+ list_for_each_entry_direction(forward, pos, head, lh)
+
extern const struct command_registration smp_command_handlers[];
int gdb_read_smp_packet(struct connection *connection,