X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fnor%2Fat91sam7.c;h=9de829327ac01cea07b4ae2f0016641d7b565079;hp=0d81f06239c67988169aaa4edc51c7581bebbc8f;hb=8f777bc1a66b5f604fde8bbdbe64206413c8aa1c;hpb=d0e763ac7ef6aa17b17bd00ccdfbccfb4eacda69 diff --git a/src/flash/nor/at91sam7.c b/src/flash/nor/at91sam7.c index 0d81f06239..9de829327a 100644 --- a/src/flash/nor/at91sam7.c +++ b/src/flash/nor/at91sam7.c @@ -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; @@ -645,14 +639,6 @@ static int at91sam7_read_part_info(struct flash_bank *bank) static int at91sam7_erase_check(struct flash_bank *bank) { - struct target *target = bank->target; - uint16_t retval; - uint32_t blank; - uint16_t fast_check; - uint8_t *buffer; - uint16_t nSector; - uint16_t nByte; - if (bank->target->state != TARGET_HALTED) { LOG_ERROR("Target not halted"); return ERROR_TARGET_NOT_HALTED; @@ -662,45 +648,7 @@ static int at91sam7_erase_check(struct flash_bank *bank) at91sam7_read_clock_info(bank); at91sam7_set_flash_mode(bank, FMR_TIMING_FLASH); - fast_check = 1; - for (nSector = 0; nSector < bank->num_sectors; nSector++) { - retval = target_blank_check_memory(target, - bank->base + bank->sectors[nSector].offset, - bank->sectors[nSector].size, - &blank); - if (retval != ERROR_OK) { - fast_check = 0; - break; - } - if (blank == 0xFF) - bank->sectors[nSector].is_erased = 1; - else - bank->sectors[nSector].is_erased = 0; - } - - if (fast_check) - return ERROR_OK; - - LOG_USER("Running slow fallback erase check - add working memory"); - - buffer = malloc(bank->sectors[0].size); - for (nSector = 0; nSector < bank->num_sectors; nSector++) { - bank->sectors[nSector].is_erased = 1; - retval = target_read_memory(target, bank->base + bank->sectors[nSector].offset, 4, - bank->sectors[nSector].size/4, buffer); - if (retval != ERROR_OK) - return retval; - - for (nByte = 0; nByte < bank->sectors[nSector].size; nByte++) { - if (buffer[nByte] != 0xFF) { - bank->sectors[nSector].is_erased = 0; - break; - } - } - } - free(buffer); - - return ERROR_OK; + return default_flash_blank_check(bank); } static int at91sam7_protect_check(struct flash_bank *bank)