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/4519

-- gerrit

commit 4a9a9a16fc7ac6b0f5a3462e95e1fbc52018f1ed
Author: Christopher Head <[email protected]>
Date:   Mon May 14 11:56:56 2018 -0700

    flash/nor/stm32: report errors in wait_status_busy
    
    Flash operation errors that occur during algorithm programming are
    reported via the algorithm return value. However, Flash operation errors
    that occur during non-algorithm work (erasing, programming without a
    work area, programming the last non-multiple-of-32-bytes on an H7, etc.)
    generally end with a call to stm32x_wait_status_busy, which reads the
    status register and clears the error flags but fails to actually report
    that something went wrong should an error flag (other than WRPERR) be
    set. Return an error status from stm32x_wait_status_busy in those cases.
    Correct a log message accordingly.
    
    Change-Id: I09369ea5f924fe58833aec1f45e52320ab4aaf43
    Signed-off-by: Christopher Head <[email protected]>

diff --git a/src/flash/nor/stm32f2x.c b/src/flash/nor/stm32f2x.c
index 8013e58..43f5d12 100644
--- a/src/flash/nor/stm32f2x.c
+++ b/src/flash/nor/stm32f2x.c
@@ -252,6 +252,8 @@ static int stm32x_wait_status_busy(struct flash_bank *bank, 
int timeout)
 
        /* Clear but report errors */
        if (status & FLASH_ERROR) {
+               if (retval == ERROR_OK)
+                       retval = ERROR_FAIL;
                /* If this operation fails, we ignore it and report the original
                 * retval
                 */
diff --git a/src/flash/nor/stm32h7x.c b/src/flash/nor/stm32h7x.c
index 009eb9b..8f34e04 100644
--- a/src/flash/nor/stm32h7x.c
+++ b/src/flash/nor/stm32h7x.c
@@ -220,6 +220,8 @@ static int stm32x_wait_status_busy(struct flash_bank *bank, 
int timeout)
 
        /* Clear error + EOP flags but report errors */
        if (status & FLASH_ERROR) {
+               if (retval == ERROR_OK)
+                       retval = ERROR_FAIL;
                /* If this operation fails, we ignore it and report the 
original retval */
                target_write_u32(target, stm32x_get_flash_reg(bank, FLASH_CCR), 
status);
        }
@@ -495,7 +497,7 @@ static int stm32x_erase(struct flash_bank *bank, int first, 
int last)
                retval = stm32x_wait_status_busy(bank, FLASH_ERASE_TIMEOUT);
 
                if (retval != ERROR_OK) {
-                       LOG_ERROR("erase time-out error sector %d", i);
+                       LOG_ERROR("erase time-out or operation error sector 
%d", i);
                        return retval;
                }
                bank->sectors[i].is_erased = 1;
diff --git a/src/flash/nor/stm32l4x.c b/src/flash/nor/stm32l4x.c
index e47313c..f713693 100644
--- a/src/flash/nor/stm32l4x.c
+++ b/src/flash/nor/stm32l4x.c
@@ -187,6 +187,8 @@ static int stm32l4_wait_status_busy(struct flash_bank 
*bank, int timeout)
 
        /* Clear but report errors */
        if (status & FLASH_ERROR) {
+               if (retval == ERROR_OK)
+                       retval = ERROR_FAIL;
                /* If this operation fails, we ignore it and report the original
                 * retval
                 */

-- 

------------------------------------------------------------------------------
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