at91sam7: do not touch flash banks which belong to other targets
at91sam7_read_part_info() walks throw all flash banks following current one. I don't know why it has to do it at all (possibly for multi-bank devices like SAM7S512), but if there is more than one target in JTAG chain, this lookup can touch flash bank of another (possibly not halted) target, which cause probe error and current command execution abort. [andreas.fritiofson@gmail.com]: Change to for-loop and reduce indentation Change-Id: Ide50e93578786e1250f7a0fd0e3d296247924814 Signed-off-by: Sergey A. Borshch <sb-sf@users.sourceforge.net> Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com> Reviewed-on: http://openocd.zylin.com/2610 Tested-by: jenkins__archive__
parent
2cc1c6daf2
commit
a7984eef03
|
@ -371,10 +371,9 @@ static int at91sam7_read_part_info(struct flash_bank *bank)
|
|||
|
||||
if (at91sam7_info->cidr != 0) {
|
||||
/* flash already configured, update clock and check for protected sectors */
|
||||
struct flash_bank *fb = bank;
|
||||
struct flash_bank *t_bank = bank;
|
||||
|
||||
while (t_bank) {
|
||||
for (struct flash_bank *t_bank = bank; t_bank; t_bank = t_bank->next) {
|
||||
if (t_bank->target != target)
|
||||
continue;
|
||||
/* re-calculate master clock frequency */
|
||||
at91sam7_read_clock_info(t_bank);
|
||||
|
||||
|
@ -383,9 +382,6 @@ static int at91sam7_read_part_info(struct flash_bank *bank)
|
|||
|
||||
/* check protect state */
|
||||
at91sam7_protect_check(t_bank);
|
||||
|
||||
t_bank = fb->next;
|
||||
fb = t_bank;
|
||||
}
|
||||
|
||||
return ERROR_OK;
|
||||
|
@ -400,9 +396,10 @@ static int at91sam7_read_part_info(struct flash_bank *bank)
|
|||
|
||||
if (at91sam7_info->flash_autodetection == 0) {
|
||||
/* banks and sectors are already created, based on data from input file */
|
||||
struct flash_bank *fb = bank;
|
||||
struct flash_bank *t_bank = bank;
|
||||
while (t_bank) {
|
||||
for (struct flash_bank *t_bank = bank; t_bank; t_bank = t_bank->next) {
|
||||
if (t_bank->target != target)
|
||||
continue;
|
||||
|
||||
at91sam7_info = t_bank->driver_priv;
|
||||
|
||||
at91sam7_info->cidr = cidr;
|
||||
|
@ -423,9 +420,6 @@ static int at91sam7_read_part_info(struct flash_bank *bank)
|
|||
|
||||
/* check protect state */
|
||||
at91sam7_protect_check(t_bank);
|
||||
|
||||
t_bank = fb->next;
|
||||
fb = t_bank;
|
||||
}
|
||||
|
||||
return ERROR_OK;
|
||||
|
|
Loading…
Reference in New Issue