From 1cf1ba1ddbaf9a073a62a1e5d5cdb282b0b2aa0d Mon Sep 17 00:00:00 2001 From: Piotr Esden-Tempski Date: Wed, 13 Jul 2022 20:34:05 -0700 Subject: [PATCH] stm32f4: Fixes erase_mass command return error. The final erase_mass command check is looking for the EOP (End of OPeration) bit to be set. This bit is only set when the EOP interrupts (EOPIE = 1) are enabled. We are not enabling those on the target so this bit will never get set. As we are monitoring the BSY flag to make sure the erase_mass operation is still ongoing and finished it is enough if we just check the error flags. --- src/target/stm32f4.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/target/stm32f4.c b/src/target/stm32f4.c index b73c3ee9..e28aa96b 100644 --- a/src/target/stm32f4.c +++ b/src/target/stm32f4.c @@ -56,7 +56,7 @@ static int stm32f4_flash_erase(struct target_flash *f, target_addr addr, static int stm32f4_flash_write(struct target_flash *f, target_addr dest, const void *src, size_t len); -/* Flash Program ad Erase Controller Register Map */ +/* Flash Program and Erase Controller Register Map */ #define FPEC_BASE 0x40023C00 #define FLASH_ACR (FPEC_BASE+0x00) #define FLASH_KEYR (FPEC_BASE+0x04) @@ -503,11 +503,8 @@ static bool stm32f4_cmd_erase_mass(target *t, int argc, const char **argv) tc_printf(t, "\n"); /* Check for error */ - uint32_t sr = target_mem_read32(t, FLASH_SR); - if ((sr & SR_ERROR_MASK) || !(sr & SR_EOP)) - return false; - - return true; + const uint32_t result = target_mem_read32(t, FLASH_SR); + return !(result & SR_ERROR_MASK); } /* Dev | DOC |Rev|ID |OPTCR |OPTCR |OPTCR1 |OPTCR1 | OPTCR2