|
From: openocd-gerrit <ope...@us...> - 2026-09-08 08:16:18
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Main OpenOCD repository".
The branch, master has been updated
via bedefa238476ad852b1fafd927230e38e2092282 (commit)
from 8a6cf324c618c7bccc7cb61f7e533d69022e6e97 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit bedefa238476ad852b1fafd927230e38e2092282
Author: Samuel Obuch <sam...@es...>
Date: Wed Aug 19 07:45:45 2026 +0200
target/xtensa: flush cached registers before starting an algorithm
In case any aX registers are already dirty, modifying arY registers
for the algorithm run will cause these values to be lost. Resolve
inconsistencies in xtensa_write_dirty_registers, so that registers
do not have to be re-fetched from the target.
Change-Id: I483017fbae3d71a08d2212f27ebbe1c696437bd8
Signed-off-by: Samuel Obuch <sam...@es...>
Reviewed-on: https://review.openocd.org/c/openocd/+/9924
Reviewed-by: Antonio Borneo <bor...@gm...>
Reviewed-by: Tomas Vanek <va...@fb...>
Tested-by: jenkins
Reviewed-by: Ian Thompson <ia...@ca...>
diff --git a/src/target/xtensa/xtensa.c b/src/target/xtensa/xtensa.c
index d1a08c3bd..d3b297403 100644
--- a/src/target/xtensa/xtensa.c
+++ b/src/target/xtensa/xtensa.c
@@ -793,6 +793,10 @@ static int xtensa_write_dirty_registers(struct target *target)
j - XT_REG_IDX_AR0,
buf_get_u32(reg_list[j].value, 0, 32));
}
+ } else if (reg_list[i].dirty) {
+ memcpy(reg_list[j].value, reg_list[i].value, sizeof(xtensa_reg_val_t));
+ } else if (reg_list[j].dirty) {
+ memcpy(reg_list[i].value, reg_list[j].value, sizeof(xtensa_reg_val_t));
}
}
}
@@ -2741,6 +2745,12 @@ int xtensa_start_algorithm(struct target *target,
return ERROR_TARGET_NOT_HALTED;
}
+ retval = xtensa_write_dirty_registers(target);
+ if (retval != ERROR_OK) {
+ LOG_ERROR("Failed to write dirty regs (%d)", retval);
+ return retval;
+ }
+
for (unsigned int i = 0; i < xtensa->core_cache->num_regs; i++) {
struct reg *reg = &xtensa->core_cache->reg_list[i];
buf_cpy(reg->value, xtensa->algo_context_backup[i], reg->size);
-----------------------------------------------------------------------
Summary of changes:
src/target/xtensa/xtensa.c | 10 ++++++++++
1 file changed, 10 insertions(+)
hooks/post-receive
--
Main OpenOCD repository
|