flash/nor/stm32l4: Fix stm32l4_probe() 26/6326/5
authorMarc Schink <dev@zapb.de>
Mon, 21 Jun 2021 14:18:38 +0000 (16:18 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sun, 27 Jun 2021 13:57:16 +0000 (14:57 +0100)
The current implementation fails due to the assert() statements in
get_stm32l4_rev_str() and get_stm32l4_bank_type_str(). Rearrange the
code in order to fix the problem.

Change-Id: If19c648dec8ddd3ef2fb801150114104b34c3bf2
Signed-off-by: Marc Schink <dev@zapb.de>
Fixes: 64c2e03b23 ("flash/nor: improved API of flash_driver.info & fixed buffer overruns")
Reviewed-on: http://openocd.zylin.com/6326
Tested-by: jenkins
Reviewed-by: Jan Matyas <matyas@codasip.com>
Reviewed-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
src/flash/nor/stm32l4x.c

index cd6229548cd924a68a06c9cd7ebbcb2f9473374d..9598345c615c555f9e33e594aaa83c5f8700da70 100644 (file)
@@ -1350,7 +1350,6 @@ static const char *get_stm32l4_bank_type_str(struct flash_bank *bank)
 {
        struct stm32l4_flash_bank *stm32l4_info = bank->driver_priv;
        assert(stm32l4_info->part_info);
-       assert(stm32l4_info->probed);
        return stm32l4_is_otp(bank) ? "OTP" :
                        stm32l4_info->dual_bank_mode ? "Flash dual" :
                        "Flash single";
@@ -1372,8 +1371,6 @@ static int stm32l4_probe(struct flash_bank *bank)
                return retval;
 
        const uint32_t device_id = stm32l4_info->idcode & 0xFFF;
-       const uint16_t rev_id = stm32l4_info->idcode >> 16;
-       const char *rev_str = get_stm32l4_rev_str(bank);
 
        for (unsigned int n = 0; n < ARRAY_SIZE(stm32l4_parts); n++) {
                if (device_id == stm32l4_parts[n].id) {
@@ -1388,12 +1385,15 @@ static int stm32l4_probe(struct flash_bank *bank)
        }
 
        part_info = stm32l4_info->part_info;
-       stm32l4_info->flash_regs = stm32l4_info->part_info->default_flash_regs;
+       const char *rev_str = get_stm32l4_rev_str(bank);
+       const uint16_t rev_id = stm32l4_info->idcode >> 16;
 
        LOG_INFO("device idcode = 0x%08" PRIx32 " (%s - Rev %s : 0x%04x - %s-bank)",
                        stm32l4_info->idcode, part_info->device_str, rev_str, rev_id,
                        get_stm32l4_bank_type_str(bank));
 
+       stm32l4_info->flash_regs = stm32l4_info->part_info->default_flash_regs;
+
        /* read flash option register */
        retval = stm32l4_read_flash_reg_by_index(bank, STM32_FLASH_OPTR_INDEX, &options);
        if (retval != ERROR_OK)

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)