at91samd: Bail early if trying to erase protected sector
Bail early if trying to erase protected sector and also do not double-erase already erased sectors. Change-Id: Ic2d39af48c3b8e10e78d52dd978b9bc01f671c6a Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Reviewed-on: http://openocd.zylin.com/2026 Tested-by: jenkins Reviewed-by: Paul Fertser <fercerpav@gmail.com>__archive__
parent
34db6b9c0a
commit
c92a605e26
|
@ -360,16 +360,23 @@ static int samd_erase(struct flash_bank *bank, int first, int last)
|
|||
|
||||
/* For each sector to be erased */
|
||||
for (int s = first; s <= last; s++) {
|
||||
/* For each row in that sector */
|
||||
for (int r = s * rows_in_sector; r < (s + 1) * rows_in_sector; r++) {
|
||||
res = samd_erase_row(bank, r * chip->page_size * 4);
|
||||
if (res != ERROR_OK) {
|
||||
LOG_ERROR("SAMD: failed to erase sector %d", s);
|
||||
return res;
|
||||
}
|
||||
if (bank->sectors[s].is_protected) {
|
||||
LOG_ERROR("SAMD: failed to erase sector %d. That sector is write-protected", s);
|
||||
return ERROR_FLASH_OPERATION_FAILED;
|
||||
}
|
||||
|
||||
bank->sectors[s].is_erased = 1;
|
||||
if (!bank->sectors[s].is_erased) {
|
||||
/* For each row in that sector */
|
||||
for (int r = s * rows_in_sector; r < (s + 1) * rows_in_sector; r++) {
|
||||
res = samd_erase_row(bank, r * chip->page_size * 4);
|
||||
if (res != ERROR_OK) {
|
||||
LOG_ERROR("SAMD: failed to erase sector %d", s);
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
bank->sectors[s].is_erased = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return ERROR_OK;
|
||||
|
|
Loading…
Reference in New Issue