STM32F2x: Don't clear FLASH_OPTCR bits when locking register
authorElliott Partridge <elliott.partridge@gmail.com>
Wed, 28 May 2014 16:20:44 +0000 (12:20 -0400)
committerAndreas Fritiofson <andreas.fritiofson@gmail.com>
Sun, 1 Jun 2014 17:38:42 +0000 (17:38 +0000)
stm32x_write_options is locking the FLASH_OPTCR register by
writing 0x00000001 to it, which clears the other bits. This
causes problems with subsequent flash operations; the hardware
is probably seeing the write protection bits in the register
set to '0' (protect), causing a WRPERR.
This patch ORs the value of the register with 0x00000001, so that
the only change is the lock bit itself.

Change-Id: I0e3ca9aa6563ce1b57a01fc0faf7563b6b85f620
Signed-off-by: Elliott Partridge <elliott.partridge@gmail.com>
Reviewed-on: http://openocd.zylin.com/2155
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/flash/nor/stm32f2x.c

index eab19348cfda4c4f0ea7458c1dc0ec58cf1b8009..56fd9f66255fc5b28608a86f8199872cca82b287 100644 (file)
@@ -372,7 +372,7 @@ static int stm32x_write_options(struct flash_bank *bank)
                return retval;
 
        /* relock registers */
-       retval = target_write_u32(target, STM32_FLASH_OPTCR, OPT_LOCK);
+       retval = target_write_u32(target, STM32_FLASH_OPTCR, optiondata | OPT_LOCK);
        if (retval != ERROR_OK)
                return retval;