aboutsummaryrefslogtreecommitdiff
path: root/src/flash
diff options
context:
space:
mode:
authorSergey A. Borshch <sb-sf@users.sourceforge.net>2013-11-22 17:27:40 +0200
committerAndreas Fritiofson <andreas.fritiofson@gmail.com>2013-12-17 23:04:01 +0000
commit5175f8be3318d13931a319885cf6e5560329e324 (patch)
tree740cefb44dc81f789a29c078fc1639c9c7cf70b7 /src/flash
parent255301fb507519b5cd022cfdb465d4963d186c5a (diff)
fix flash bank auto_probe() fail with multiple targets
get_flash_bank_by_addr() iterates through all flash banks trying to auto_probe() every bank, even if bank can belongs to target other than requested, and this other target can be in non-halted state, which leads to error message and operation abort. Same situation in gdb_new_connection() and gdb_memory_map(): get_flash_bank_by_num() tries to auto_probe() requested bank, so first get bank by get_flash_bank_by_num_noprobe(), check if it belongs to current connection's target and skip get_flash_bank_by_num() (actually autoprobing) if not. Change-Id: I48b3f93dddcd9283394f14ad2de3248397c75ab3 Signed-off-by: Sergey A. Borshch <sb-sf@users.sourceforge.net> Reviewed-on: http://openocd.zylin.com/1813 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Diffstat (limited to 'src/flash')
-rw-r--r--src/flash/nor/core.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/flash/nor/core.c b/src/flash/nor/core.c
index cc2ecac0..4410d5c6 100644
--- a/src/flash/nor/core.c
+++ b/src/flash/nor/core.c
@@ -232,6 +232,9 @@ int get_flash_bank_by_addr(struct target *target,
/* cycle through bank list */
for (c = flash_banks; c; c = c->next) {
+ if (c->target != target)
+ continue;
+
int retval;
retval = c->driver->auto_probe(c);
@@ -240,7 +243,7 @@ int get_flash_bank_by_addr(struct target *target,
return retval;
}
/* check whether address belongs to this flash bank */
- if ((addr >= c->base) && (addr <= c->base + (c->size - 1)) && target == c->target) {
+ if ((addr >= c->base) && (addr <= c->base + (c->size - 1))) {
*result_bank = c;
return ERROR_OK;
}