This is an automated email from Gerrit.

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

-- gerrit

commit ca2c82921eb142574a0180aebaee9f69282584bf
Author: Christopher Head <[email protected]>
Date:   Mon Jan 27 14:48:15 2020 -0800

    flash/nor/stm32h7x: check OPTCHANGEERR
    
    Without this, a failed attempt to change option bytes will silently
    appear to succeed but without actually changing the option bytes
    (confusingly, the option bytes will still read back as if they had been
    changed until a reboot as well!).
    
    Change-Id: Id529c6c384a8a16be75f5702310670d99d8fac79
    Signed-off-by: Christopher Head <[email protected]>

diff --git a/src/flash/nor/stm32h7x.c b/src/flash/nor/stm32h7x.c
index 0085729..6c17456 100644
--- a/src/flash/nor/stm32h7x.c
+++ b/src/flash/nor/stm32h7x.c
@@ -83,6 +83,7 @@
 #define OPT_BSY        (1 << 0)
 #define OPT_RDP_POS    8
 #define OPT_RDP_MASK   (0xff << OPT_RDP_POS)
+#define OPT_OPTCHANGEERR (1 << 30)
 
 /* FLASH_OPTCCR register bits */
 #define OPT_CLR_OPTCHANGEERR (1 << 30)
@@ -343,8 +344,8 @@ static int stm32x_write_option(struct flash_bank *bank, 
uint32_t reg_offset, uin
 
        /* wait for completion */
        int timeout = FLASH_ERASE_TIMEOUT;
+       uint32_t status;
        for (;;) {
-               uint32_t status;
                retval = stm32x_read_flash_reg(bank, FLASH_OPTSR_CUR, &status);
                if (retval != ERROR_OK) {
                        LOG_ERROR("stm32x_options_program: failed to read 
FLASH_OPTSR_CUR");
@@ -361,6 +362,12 @@ static int stm32x_write_option(struct flash_bank *bank, 
uint32_t reg_offset, uin
                alive_sleep(1);
        }
 
+       /* check for failure */
+       if (status & OPT_OPTCHANGEERR) {
+               LOG_ERROR("error changing option bytes (OPTCHANGEERR=1)");
+               retval = ERROR_FLASH_OPERATION_FAILED;
+       }
+
 flash_options_lock:
        retval2 = stm32x_lock_option_reg(bank);
        if (retval2 != ERROR_OK)

-- 


_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to