From: OpenOCD-Gerrit <ope...@us...> - 2022-10-08 07:47:06
|
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 dce9a03cb2c50ef6c3f084c7d13325369559ebce (commit) from ae937791d35b0820e0bc9bf0ab134c2bebd113e4 (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 dce9a03cb2c50ef6c3f084c7d13325369559ebce Author: Tomas Vanek <va...@fb...> Date: Tue Sep 27 10:13:18 2022 +0200 flash/nor/rp2040: fix setting sp The num_reg_params parameter of target_run_algorithm() was not updated when setting "sp" was introduced. Therefore "sp" as the last register parameter was not passed to a target algo. Introduce a new helper variable with correct count of register parameters and use it everywhere needed. Change-Id: I934a71380783d98917167f1569145808ef23540f Signed-off-by: Tomas Vanek <va...@fb...> Reviewed-on: https://review.openocd.org/c/openocd/+/7225 Tested-by: jenkins Reviewed-by: Antonio Borneo <bor...@gm...> Reviewed-by: Jonathan Bell <jon...@ra...> diff --git a/src/flash/nor/rp2040.c b/src/flash/nor/rp2040.c index be86bb81e..feff9a6f9 100644 --- a/src/flash/nor/rp2040.c +++ b/src/flash/nor/rp2040.c @@ -111,11 +111,12 @@ static int rp2040_call_rom_func(struct target *target, struct rp2040_flash_bank /* Pass function pointer in r7 */ init_reg_param(&args[n_args], "r7", 32, PARAM_OUT); buf_set_u32(args[n_args].value, 0, 32, func_offset); + /* Setup stack */ init_reg_param(&args[n_args + 1], "sp", 32, PARAM_OUT); buf_set_u32(args[n_args + 1].value, 0, 32, stacktop); + unsigned int n_reg_params = n_args + 2; /* User arguments + r7 + sp */ - - for (unsigned int i = 0; i < n_args + 2; ++i) + for (unsigned int i = 0; i < n_reg_params; ++i) LOG_DEBUG("Set %s = 0x%" PRIx32, args[i].reg_name, buf_get_u32(args[i].value, 0, 32)); /* Actually call the function */ @@ -124,17 +125,19 @@ static int rp2040_call_rom_func(struct target *target, struct rp2040_flash_bank int err = target_run_algorithm( target, 0, NULL, /* No memory arguments */ - n_args + 1, args, /* User arguments + r7 */ + n_reg_params, args, /* User arguments + r7 + sp */ priv->jump_debug_trampoline, priv->jump_debug_trampoline_end, timeout_ms, &alg_info ); - for (unsigned int i = 0; i < n_args + 2; ++i) + + for (unsigned int i = 0; i < n_reg_params; ++i) destroy_reg_param(&args[i]); + if (err != ERROR_OK) LOG_ERROR("Failed to invoke ROM function @0x%" PRIx16, func_offset); - return err; + return err; } /* Finalize flash write/erase/read ID ----------------------------------------------------------------------- Summary of changes: src/flash/nor/rp2040.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) hooks/post-receive -- Main OpenOCD repository |