From ad0ed194f55c8caa114b11e22a650cfbaf3be26d Mon Sep 17 00:00:00 2001 From: Samuel Obuch Date: Thu, 11 Dec 2025 15:15:27 +0100 Subject: [PATCH] target/riscv: fix riscv exec_progbuf for SMP targets Currently, 'riscv exec_progbuf' command does not select active target. So with multiple harts with a common debug module, program buffer may be executed on an incorrect target. Change-Id: Ic345b09b039c2b1e37e5b99a8534833ac2723277 Signed-off-by: Samuel Obuch Reviewed-on: https://review.openocd.org/c/openocd/+/9312 Tested-by: jenkins Reviewed-by: Evgeniy Naydanov Reviewed-by: Tomas Vanek --- src/target/riscv/riscv-013.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/target/riscv/riscv-013.c b/src/target/riscv/riscv-013.c index ff3a2446f..50e0f83dd 100644 --- a/src/target/riscv/riscv-013.c +++ b/src/target/riscv/riscv-013.c @@ -5422,6 +5422,8 @@ static int riscv013_invalidate_cached_progbuf(struct target *target) static int riscv013_execute_progbuf(struct target *target, uint32_t *cmderr) { + if (dm013_select_target(target) != ERROR_OK) + return ERROR_FAIL; uint32_t run_program = 0; run_program = set_field(run_program, AC_ACCESS_REGISTER_AARSIZE, 2); run_program = set_field(run_program, AC_ACCESS_REGISTER_POSTEXEC, 1);