From 9a42454c2bfd3c6b5d06a1359c56fb985a15d569 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Fri, 4 Apr 2014 07:41:58 -0700 Subject: [PATCH] flash/nor/tcl.c: Do not double probe banks Previous to this version the code of handle_flash_probe_command would probe a bank twice: first time by auto-probe through a call to flash_command_get_bank and second time by calling the probe function directly. This change adds a flash_command_get_bank_maybe_probe wich is a more generic version of the flash_command_get_bank, that would allow commands to decide whether auto-probing should be performed or not. Change-Id: If150ca9c169ffe05e8c7eba36338d333360811e3 Signed-off-by: Andrey Smirnov Reviewed-on: http://openocd.zylin.com/2093 Tested-by: jenkins Reviewed-by: Spencer Oliver --- src/flash/nor/tcl.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/flash/nor/tcl.c b/src/flash/nor/tcl.c index 26c4328827..8f97ebd245 100644 --- a/src/flash/nor/tcl.c +++ b/src/flash/nor/tcl.c @@ -31,11 +31,18 @@ * Implements Tcl commands used to access NOR flash facilities. */ -COMMAND_HELPER(flash_command_get_bank, unsigned name_index, - struct flash_bank **bank) +COMMAND_HELPER(flash_command_get_bank_maybe_probe, unsigned name_index, + struct flash_bank **bank, bool do_probe) { const char *name = CMD_ARGV[name_index]; - int retval = get_flash_bank_by_name(name, bank); + int retval; + if (do_probe) { + retval = get_flash_bank_by_name(name, bank); + } else { + *bank = get_flash_bank_by_name_noprobe(name); + retval = ERROR_OK; + } + if (retval != ERROR_OK) return retval; if (*bank) @@ -44,7 +51,20 @@ COMMAND_HELPER(flash_command_get_bank, unsigned name_index, unsigned bank_num; COMMAND_PARSE_NUMBER(uint, name, bank_num); - return get_flash_bank_by_num(bank_num, bank); + if (do_probe) { + return get_flash_bank_by_num(bank_num, bank); + } else { + *bank = get_flash_bank_by_num_noprobe(bank_num); + retval = (bank) ? ERROR_OK : ERROR_FAIL; + return retval; + } +} + +COMMAND_HELPER(flash_command_get_bank, unsigned name_index, + struct flash_bank **bank) +{ + return CALL_COMMAND_HANDLER(flash_command_get_bank_maybe_probe, + name_index, bank, true); } COMMAND_HANDLER(handle_flash_info_command) @@ -121,7 +141,7 @@ COMMAND_HANDLER(handle_flash_probe_command) if (CMD_ARGC != 1) return ERROR_COMMAND_SYNTAX_ERROR; - retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &p); + retval = CALL_COMMAND_HANDLER(flash_command_get_bank_maybe_probe, 0, &p, false); if (retval != ERROR_OK) return retval; -- 2.30.2