This is an automated email from Gerrit. Jim Paris (j...@jtan.com) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/2362
-- gerrit commit 2969546af1595f97f4985025303db78d490f44ba Author: Jim Paris <j...@jtan.com> Date: Tue Oct 28 23:15:31 2014 -0400 nrf51: fix UICR erase nrf51_erase_page() checks for (sector->offset == NRF51_UICR_BASE) to determine if the UICR should be erased. However, sector->offset for the UICR bank is set to 0 in nrf51_probe, so this code is never hit. Attempting to erase UICR ends up erasing the first flash sector. Use bank->base instead to determine if UICR is being erased. Change-Id: Ie5df0f9732f23662085ae2b713d64968cd801472 Signed-off-by: Jim Paris <j...@jtan.com> diff --git a/src/flash/nor/nrf51.c b/src/flash/nor/nrf51.c index 8f6760d..5503320 100644 --- a/src/flash/nor/nrf51.c +++ b/src/flash/nor/nrf51.c @@ -562,14 +562,16 @@ static int nrf51_erase_all(struct nrf51_info *chip) 0x00000001); } -static int nrf51_erase_page(struct nrf51_info *chip, struct flash_sector *sector) +static int nrf51_erase_page(struct flash_bank *bank, + struct nrf51_info *chip, + struct flash_sector *sector) { int res; if (sector->is_protected) return ERROR_FAIL; - if (sector->offset == NRF51_UICR_BASE) { + if (bank->base == NRF51_UICR_BASE) { uint32_t ppfc; res = target_read_u32(chip->target, NRF51_FICR_PPFC, &ppfc); @@ -635,7 +637,7 @@ static int nrf51_write_page(struct flash_bank *bank, uint32_t offset, const uint goto error; if (!sector->is_erased) { - res = nrf51_erase_page(chip, sector); + res = nrf51_erase_page(bank, chip, sector); if (res != ERROR_OK) { LOG_ERROR("Failed to erase sector @ 0x%08"PRIx32, sector->offset); goto error; @@ -672,7 +674,7 @@ static int nrf51_erase(struct flash_bank *bank, int first, int last) /* For each sector to be erased */ for (int s = first; s <= last && res == ERROR_OK; s++) - res = nrf51_erase_page(chip, &bank->sectors[s]); + res = nrf51_erase_page(bank, chip, &bank->sectors[s]); return res; } @@ -777,7 +779,7 @@ static int nrf51_uicr_flash_write(struct flash_bank *bank, return res; if (!sector->is_erased) { - res = nrf51_erase_page(chip, sector); + res = nrf51_erase_page(bank, chip, sector); if (res != ERROR_OK) return res; } -- ------------------------------------------------------------------------------ _______________________________________________ OpenOCD-devel mailing list OpenOCD-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openocd-devel