This is an automated email from Gerrit.

"Tarek BOCHKATI <[email protected]>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/6670

-- gerrit

commit feb7f0c2ef2fe42aab37556bd49639da0248df3c
Author: Tarek BOCHKATI <[email protected]>
Date:   Wed Oct 20 12:13:01 2021 +0100

    flash/stm32h7x: don't read flash size using the H74/H75x CPU2
    
    CPU2 (Cortex-M4) cannot read flash size register.
    assume the maximum flash size without triggering an error message
    
    Change-Id: I5c3328b7cc42e3aa57165075021227d7936f3d26
    Signed-off-by: Tarek BOCHKATI <[email protected]>

diff --git a/src/flash/nor/stm32h7x.c b/src/flash/nor/stm32h7x.c
index e6a4efc19..a3e304351 100644
--- a/src/flash/nor/stm32h7x.c
+++ b/src/flash/nor/stm32h7x.c
@@ -21,7 +21,7 @@
 #include "imp.h"
 #include <helper/binarybuffer.h>
 #include <target/algorithm.h>
-#include <target/armv7m.h>
+#include <target/cortex_m.h>
 
 
 /* Erase time can be as high as 1000ms, 10x this and it's toast... */
@@ -759,6 +759,7 @@ static int stm32x_read_id_code(struct flash_bank *bank, 
uint32_t *id)
 static int stm32x_probe(struct flash_bank *bank)
 {
        struct target *target = bank->target;
+       struct cortex_m_common *cortex_m = target_to_cm(target);
        struct stm32h7x_flash_bank *stm32x_info = bank->driver_priv;
        uint16_t flash_size_in_kb;
        uint32_t device_id;
@@ -797,15 +798,19 @@ static int stm32x_probe(struct flash_bank *bank)
        LOG_DEBUG("flash_regs_base: 0x%" PRIx32, stm32x_info->flash_regs_base);
 
        /* get flash size from target */
-       retval = target_read_u16(target, stm32x_info->part_info->fsize_addr, 
&flash_size_in_kb);
+       /* STM32H74x/H75x, the second core (Cortex-M4) cannot read the flash 
size */
+       retval = ERROR_FAIL;
+       if (device_id == DEVID_STM32H74_H75XX && cortex_m->core_info->partno == 
CORTEX_M4_PARTNO)
+               LOG_WARNING("%s cannot read the flash size register", 
target_name(target));
+       else
+               retval = target_read_u16(target, 
stm32x_info->part_info->fsize_addr, &flash_size_in_kb);
+
        if (retval != ERROR_OK) {
                /* read error when device has invalid value, set max flash size 
*/
                flash_size_in_kb = stm32x_info->part_info->max_flash_size_kb;
+               LOG_INFO("assuming %" PRIu16 "k flash", flash_size_in_kb);
        } else
-               LOG_INFO("flash size probed value %" PRIu16, flash_size_in_kb);
-
-
-
+               LOG_INFO("flash size probed value %" PRIu16 "k", 
flash_size_in_kb);
 
        /* setup bank size */
        const uint32_t bank1_base = FLASH_BANK0_ADDRESS;

-- 

Reply via email to