aboutsummaryrefslogtreecommitdiff
path: root/src/flash/nor/tcl.c
diff options
context:
space:
mode:
authorAndrey Smirnov <andrew.smirnov@gmail.com>2014-04-04 07:41:58 -0700
committerSpencer Oliver <spen@spen-soft.co.uk>2014-09-22 19:38:37 +0000
commit9a42454c2bfd3c6b5d06a1359c56fb985a15d569 (patch)
tree75e36cbf75cc8b4818bb51d886d32b15e1a8253a /src/flash/nor/tcl.c
parente77b7447f7b30d70961e5bee45400f70baeb16fc (diff)
downloadriscv-openocd-9a42454c2bfd3c6b5d06a1359c56fb985a15d569.zip
riscv-openocd-9a42454c2bfd3c6b5d06a1359c56fb985a15d569.tar.gz
riscv-openocd-9a42454c2bfd3c6b5d06a1359c56fb985a15d569.tar.bz2
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 <andrew.smirnov@gmail.com> Reviewed-on: http://openocd.zylin.com/2093 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src/flash/nor/tcl.c')
-rw-r--r--src/flash/nor/tcl.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/src/flash/nor/tcl.c b/src/flash/nor/tcl.c
index 26c4328..8f97ebd 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;