From ee4106ee995a1fc81778f4ebd496d6782e592b63 Mon Sep 17 00:00:00 2001 From: Spencer Oliver Date: Mon, 24 May 2010 12:30:29 +0100 Subject: [PATCH] nor: add get_flash_bank_by_name autoprobe When a flash cmd is called using the flash name the autoprobe function is not called. autoprobe is called if flash_command_get_bank falls through to get_flash_bank_by_num. This makes both get_flash_bank_by_name and get_flash_bank_by_num behave the same. Signed-off-by: Spencer Oliver --- src/flash/nor/core.c | 24 ++++++++++++++++++++++-- src/flash/nor/core.h | 10 +++++++++- src/flash/nor/tcl.c | 2 +- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/flash/nor/core.c b/src/flash/nor/core.c index 00f73f214a..1bd09b444d 100644 --- a/src/flash/nor/core.c +++ b/src/flash/nor/core.c @@ -178,7 +178,7 @@ int flash_get_bank_count(void) return i; } -struct flash_bank *get_flash_bank_by_name(const char *name) +struct flash_bank *get_flash_bank_by_name_noprobe(const char *name) { unsigned requested = get_flash_name_index(name); unsigned found = 0; @@ -197,6 +197,26 @@ struct flash_bank *get_flash_bank_by_name(const char *name) return NULL; } +struct flash_bank *get_flash_bank_by_name(const char *name) +{ + struct flash_bank *bank; + int retval; + + bank = get_flash_bank_by_name_noprobe(name); + if (bank != NULL) + { + retval = bank->driver->auto_probe(bank); + + if (retval != ERROR_OK) + { + LOG_ERROR("auto_probe failed %d\n", retval); + return NULL; + } + } + + return bank; +} + int get_flash_bank_by_num(int num, struct flash_bank **bank) { struct flash_bank *p = get_flash_bank_by_num_noprobe(num); @@ -660,7 +680,7 @@ int flash_write_unlock(struct target *target, struct image *image, intptr_t diff = (intptr_t)sections[section] - (intptr_t)image->sections; int t_section_num = diff / sizeof(struct imageection); - LOG_DEBUG("image_read_section: section = %d, t_section_num = %d, section_offset = %d, buffer_size = %d, size_read = %d", + LOG_DEBUG("image_read_section: section = %d, t_section_num = %d, section_offset = %d, buffer_size = %d, size_read = %d", (int)section, (int)t_section_num, (int)section_offset, (int)buffer_size, (int)size_read); if ((retval = image_read_section(image, t_section_num, section_offset, diff --git a/src/flash/nor/core.h b/src/flash/nor/core.h index a35f64f68f..17f1c53f92 100644 --- a/src/flash/nor/core.h +++ b/src/flash/nor/core.h @@ -170,7 +170,15 @@ int default_flash_mem_blank_check(struct flash_bank *bank); */ struct flash_bank *get_flash_bank_by_name(const char *name); /** - * Returns a flash bank by the specified flash_bank_s bank_number, @a num. + * Returns the flash bank specified by @a name, which matches the + * driver name and a suffix (option) specify the driver-specific + * bank number. The suffix consists of the '.' and the driver-specific + * bank number: when two str9x banks are defined, then 'str9x.1' refers + * to the second. + */ +struct flash_bank *get_flash_bank_by_name_noprobe(const char *name); +/** + * Returns the flash bank like get_flash_bank_by_name(), without probing. * @param num The flash bank number. * @param bank returned bank if fn returns ERROR_OK * @returns ERROR_OK if successful diff --git a/src/flash/nor/tcl.c b/src/flash/nor/tcl.c index 80d9a27c56..b3dbd7b8e5 100644 --- a/src/flash/nor/tcl.c +++ b/src/flash/nor/tcl.c @@ -796,7 +796,7 @@ COMMAND_HANDLER(handle_flash_bank_command) } /* check the flash bank name is unique */ - if (get_flash_bank_by_name(bank_name) != NULL) + if (get_flash_bank_by_name_noprobe(bank_name) != NULL) { /* flash bank name already exists */ LOG_ERROR("flash bank name '%s' already exists", bank_name); -- 2.30.2