This is an automated email from Gerrit.

Tomas Vanek ([email protected]) just uploaded a new patch set to Gerrit, which you 
can find at http://openocd.zylin.com/4043

-- gerrit

commit f449d42e3be49dd91d7fbc0c9f270849b2c49ac3
Author: Tomas Vanek <[email protected]>
Date:   Fri Mar 3 17:52:00 2017 +0100

    flash/nor/at91samd: fix chip erase of a secured device
    
    'at91samd chip-erase' command did not work on secured device.
    
    Fix it changing address of DSU.CTRL register
    (see Atmel SAM D21 datasheet, 13.9. Intellectual Property Protection).
    
    While on it check error return of DSU.CTRL write.
    
    Change-Id: I83155a634a5458cdc0cc16c99c0e155eb1d8b3d6
    Signed-off-by: Tomas Vanek <[email protected]>
    Reported-by: Thomas Irmen <[email protected]>

diff --git a/src/flash/nor/at91samd.c b/src/flash/nor/at91samd.c
index 2673b0e..79e16e1 100644
--- a/src/flash/nor/at91samd.c
+++ b/src/flash/nor/at91samd.c
@@ -36,6 +36,7 @@
 
 #define SAMD_DSU_STATUSA        1               /* DSU status register */
 #define SAMD_DSU_DID           0x18            /* Device ID register */
+#define SAMD_DSU_CTRL_EXT      0x100           /* CTRL register, external 
access */
 
 #define SAMD_NVMCTRL_CTRLA             0x00    /* NVM control A register */
 #define SAMD_NVMCTRL_CTRLB             0x04    /* NVM control B register */
@@ -859,15 +860,16 @@ COMMAND_HANDLER(samd_handle_info_command)
 COMMAND_HANDLER(samd_handle_chip_erase_command)
 {
        struct target *target = get_current_target(CMD_CTX);
+       int res;
 
        if (target) {
                /* Enable access to the DSU by disabling the write protect bit 
*/
                target_write_u32(target, SAMD_PAC1, (1<<1));
                /* Tell the DSU to perform a full chip erase.  It takes about 
240ms to
                 * perform the erase. */
-               target_write_u8(target, SAMD_DSU, (1<<4));
-
-               command_print(CMD_CTX, "chip erased");
+               res = target_write_u8(target, SAMD_DSU + SAMD_DSU_CTRL_EXT, 
(1<<4));
+               if (res == ERROR_OK)
+                       command_print(CMD_CTX, "chip erased");
        }
 
        return ERROR_OK;

-- 

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to