]> git.sur5r.net Git - openocd/commitdiff
flash: pre-check flash unlock for stm32f2x
authorBruno FLEURETTE <bruno.fleurette@gmail.com>
Tue, 10 Jan 2012 15:21:00 +0000 (16:21 +0100)
committerSpencer Oliver <spen@spen-soft.co.uk>
Thu, 12 Jan 2012 20:39:41 +0000 (20:39 +0000)
add checking of the current flash lock status before performing the unlock sequence (which would fail in an unlocked state)

Change-Id: I693294c9cd2f59e69cb5bf3338120052fd680b1e
Signed-off-by: Bruno FLEURETTE <bruno.fleurette@gmail.com>
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Reviewed-on: http://openocd.zylin.com/363
Reviewed-by: Øyvind Harboe <oyvindharboe@gmail.com>
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Tested-by: jenkins
Reviewed-by: Mathias Küster <kesmtp@freenet.de>
src/flash/nor/stm32f2x.c

index 479df8af0077e571a18525f9e40fe8e9bafee3ca..591b326b5d61e287e41e0874f367d318661e3c80 100644 (file)
@@ -234,8 +234,18 @@ static int stm32x_unlock_reg(struct target *target)
 {
        uint32_t ctrl;
 
+       /* first check if not already unlocked
+        * otherwise writing on STM32_FLASH_KEYR will fail
+        */
+       int retval = target_read_u32(target, STM32_FLASH_CR, &ctrl);
+       if (retval != ERROR_OK)
+               return retval;
+
+       if ((ctrl & FLASH_LOCK) == 0)
+               return ERROR_OK;
+
        /* unlock flash registers */
-       int retval = target_write_u32(target, STM32_FLASH_KEYR, KEY1);
+       retval = target_write_u32(target, STM32_FLASH_KEYR, KEY1);
        if (retval != ERROR_OK)
                return retval;