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

Reply via email to