From: OpenOCD-Gerrit <ope...@us...> - 2022-09-27 08:42:24
|
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 53611d8055d1130a925010b3feb39c7c8fa20a14 (commit) from 84d73d0225407594ed9cf646fa3dd8a5752df7ad (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 53611d8055d1130a925010b3feb39c7c8fa20a14 Author: Tomas Vanek <va...@fb...> Date: Wed Sep 21 06:32:21 2022 +0200 flash/nor/rp2040: fix flash erase timeout SPI flash erase often takes longer than the fixed timeout 3 seconds. Introduce a configurable timeout_ms parameter to rp2040_call_rom_func(). Compute the erase timeout from the number of blocks to be erased. While on it make the timeouts shorter for connect flash, flush cache and enter/exit xip (1 second is enough). Change-Id: I552bfa317ee17064de3a54ec2f0c63e84ba87222 Signed-off-by: Tomas Vanek <va...@fb...> Reviewed-on: https://review.openocd.org/c/openocd/+/7214 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 ce09fea08..7cc6434ff 100644 --- a/src/flash/nor/rp2040.c +++ b/src/flash/nor/rp2040.c @@ -87,7 +87,7 @@ static uint32_t rp2040_lookup_symbol(struct target *target, uint32_t tag, uint16 } static int rp2040_call_rom_func(struct target *target, struct rp2040_flash_bank *priv, - uint16_t func_offset, uint32_t argdata[], unsigned int n_args) + uint16_t func_offset, uint32_t argdata[], unsigned int n_args, int timeout_ms) { char *regnames[4] = { "r0", "r1", "r2", "r3" }; @@ -127,7 +127,7 @@ static int rp2040_call_rom_func(struct target *target, struct rp2040_flash_bank 0, NULL, /* No memory arguments */ n_args + 1, args, /* User arguments + r7 */ priv->jump_debug_trampoline, priv->jump_debug_trampoline_end, - 3000, /* 3s timeout */ + timeout_ms, &alg_info ); for (unsigned int i = 0; i < n_args + 2; ++i) @@ -153,14 +153,14 @@ static int rp2040_finalize_stack_free(struct flash_bank *bank) * chip select following a rp2040_flash_exit_xip(). */ LOG_DEBUG("Flushing flash cache after write behind"); - int err = rp2040_call_rom_func(target, priv, priv->jump_flush_cache, NULL, 0); + int err = rp2040_call_rom_func(target, priv, priv->jump_flush_cache, NULL, 0, 1000); if (err != ERROR_OK) { LOG_ERROR("Failed to flush flash cache"); /* Intentionally continue after error and try to setup xip anyway */ } LOG_DEBUG("Configuring SSI for execute-in-place"); - err = rp2040_call_rom_func(target, priv, priv->jump_enter_cmd_xip, NULL, 0); + err = rp2040_call_rom_func(target, priv, priv->jump_enter_cmd_xip, NULL, 0, 1000); if (err != ERROR_OK) LOG_ERROR("Failed to set SSI to XIP mode"); @@ -189,14 +189,14 @@ static int rp2040_stack_grab_and_prep(struct flash_bank *bank) } LOG_DEBUG("Connecting internal flash"); - err = rp2040_call_rom_func(target, priv, priv->jump_connect_internal_flash, NULL, 0); + err = rp2040_call_rom_func(target, priv, priv->jump_connect_internal_flash, NULL, 0, 1000); if (err != ERROR_OK) { LOG_ERROR("Failed to connect internal flash"); return err; } LOG_DEBUG("Kicking flash out of XIP mode"); - err = rp2040_call_rom_func(target, priv, priv->jump_flash_exit_xip, NULL, 0); + err = rp2040_call_rom_func(target, priv, priv->jump_flash_exit_xip, NULL, 0, 1000); if (err != ERROR_OK) { LOG_ERROR("Failed to exit flash XIP mode"); return err; @@ -243,7 +243,8 @@ static int rp2040_flash_write(struct flash_bank *bank, const uint8_t *buffer, ui bounce->address, /* data */ write_size /* count */ }; - err = rp2040_call_rom_func(target, priv, priv->jump_flash_range_program, args, ARRAY_SIZE(args)); + err = rp2040_call_rom_func(target, priv, priv->jump_flash_range_program, + args, ARRAY_SIZE(args), 3000); if (err != ERROR_OK) { LOG_ERROR("Failed to invoke flash programming code on target"); break; @@ -292,7 +293,9 @@ static int rp2040_flash_erase(struct flash_bank *bank, unsigned int first, unsig an optional larger "block" (size and command provided in args). */ - err = rp2040_call_rom_func(bank->target, priv, priv->jump_flash_range_erase, args, ARRAY_SIZE(args)); + int timeout_ms = 2000 * (last - first) + 1000; + err = rp2040_call_rom_func(bank->target, priv, priv->jump_flash_range_erase, + args, ARRAY_SIZE(args), timeout_ms); cleanup: rp2040_finalize_stack_free(bank); ----------------------------------------------------------------------- Summary of changes: src/flash/nor/rp2040.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) hooks/post-receive -- Main OpenOCD repository |