nrf51: verify that UICR needs erasing before triggering an error about it
authorJim Paris <jim@jtan.com>
Wed, 29 Oct 2014 23:00:52 +0000 (19:00 -0400)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 24 Nov 2014 21:54:02 +0000 (21:54 +0000)
If the UICR is already empty, there's no reason to return an error
just because it can't be erased again.  This happens, for example,
when flashing UICR from GDB after a "monitor nrf51 mass_erase".

Change-Id: Ia6d28c43189205fb5a7120b1c7312e45eb32edb7
Signed-off-by: Jim Paris <jim@jtan.com>
Reviewed-on: http://openocd.zylin.com/2363
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/flash/nor/nrf51.c

index 8b6a57fb8db73e6c2e253d2e6c605917c6ca77da..bfa199a2ffc415a7b8c5e010427b80b60ff833de 100644 (file)
@@ -581,6 +581,12 @@ static int nrf51_erase_page(struct flash_bank *bank,
                }
 
                if ((ppfc & 0xFF) == 0xFF) {
+                       /* We can't erase the UICR.  Double-check to
+                          see if it's already erased before complaining. */
+                       default_flash_blank_check(bank);
+                       if (sector->is_erased == 1)
+                               return ERROR_OK;
+
                        LOG_ERROR("The chip was not pre-programmed with SoftDevice stack and UICR cannot be erased separately. Please issue mass erase before trying to write to this region");
                        return ERROR_FAIL;
                };