flash/nor/stm32f1x: fix options reading from locked chip 40/4940/3
authorOleksandr Redchuk <real@real.kiev.ua>
Sat, 23 Feb 2019 21:03:13 +0000 (23:03 +0200)
committerTomas Vanek <vanekt@fbl.cz>
Thu, 2 Jan 2020 21:22:07 +0000 (21:22 +0000)
In commit cea40152f82f52bfc718c7bda9fa4a9d70bf9cfd option bytes
reading was changed to direct access to option bytes area.
While there are no problems with stm32f0xx and stm32f3xx chips,
option block (0x1ffff800..0x1ffff80F) is unreadable from locked
stm32f10x chips.
As a result, stm32f1x unlock command writes dirty values to user
options, user data and write protection bits.

Option bytes reading reverted from direct access to option bytes area
to reading currently loaded bytes from  FLASH_OBR/FLASH_WRPR registers.

Tested on stm32f100, stm32f103, stm32f107 as well as on stm32f030 and
stm32f303.

Change-Id: Iad476351ffdaca5ace12e02272dacea7f3d08f52
Signed-off-by: Oleksandr Redchuk <real@real.kiev.ua>
Reviewed-on: http://openocd.zylin.com/4940
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
src/flash/nor/stm32f1x.c

index cf10e3747a533d26fed4345eaecbaa341c8a7eed..91fd541f6dd01e633c892d8f447a728e05778644 100644 (file)
@@ -229,34 +229,20 @@ static int stm32x_read_options(struct flash_bank *bank)
        uint32_t option_bytes;
        int retval;
 
-       /* read user and read protection option bytes */
-       retval = target_read_u32(target, STM32_OB_RDP, &option_bytes);
+       /* read user and read protection option bytes, user data option bytes */
+       retval = target_read_u32(target, STM32_FLASH_OBR_B0, &option_bytes);
        if (retval != ERROR_OK)
                return retval;
 
-       stm32x_info->option_bytes.rdp = option_bytes & 0xFF;
-       stm32x_info->option_bytes.user = (option_bytes >> 16) & 0xFF;
-
-       /* read user data option bytes */
-       retval = target_read_u32(target, STM32_OB_DATA0, &option_bytes);
-       if (retval != ERROR_OK)
-               return retval;
-
-       stm32x_info->option_bytes.data = ((option_bytes >> 8) & 0xFF00) | (option_bytes & 0xFF);
+       stm32x_info->option_bytes.rdp = (option_bytes & (1 << OPT_READOUT)) ? 0 : stm32x_info->default_rdp;
+       stm32x_info->option_bytes.user = (option_bytes >> stm32x_info->option_offset >> 2) & 0xff;
+       stm32x_info->option_bytes.data = (option_bytes >> stm32x_info->user_data_offset) & 0xffff;
 
        /* read write protection option bytes */
-       retval = target_read_u32(target, STM32_OB_WRP0, &option_bytes);
+       retval = target_read_u32(target, STM32_FLASH_WRPR_B0, &stm32x_info->option_bytes.protection);
        if (retval != ERROR_OK)
                return retval;
 
-       stm32x_info->option_bytes.protection = ((option_bytes >> 8) & 0xFF00) | (option_bytes & 0xFF);
-
-       retval = target_read_u32(target, STM32_OB_WRP2, &option_bytes);
-       if (retval != ERROR_OK)
-               return retval;
-
-       stm32x_info->option_bytes.protection |= (((option_bytes >> 8) & 0xFF00) | (option_bytes & 0xFF)) << 16;
-
        return 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)