flash/stm32l4x: fix dual bank support for STM32L552xC devices
authorTarek BOCHKATI <tarek.bouchkati@gmail.com>
Thu, 2 Sep 2021 11:03:59 +0000 (12:03 +0100)
committerOleksij Rempel <linux@rempel-privat.de>
Sat, 18 Sep 2021 18:15:15 +0000 (18:15 +0000)
For STM32L552xC devices with 256K flash:
  dual bank mode is activated if DB256 is set
  page size is 2KB if DBANK is set

For parts with 512K (aka STM32L5x2xE):
  DBANK controls both of dual/single bank mode and page size as well.

Change-Id: I8be668d5552fefe81acffaf2e3e35ef5e938162e
Signed-off-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
Reported-by: Patrik Bachan <diggit@users.sourceforge.net>
Fixes: https://sourceforge.net/p/openocd/tickets/317/
Reviewed-on: https://review.openocd.org/c/openocd/+/6538
Tested-by: jenkins
Reviewed-by: Oleksij Rempel <linux@rempel-privat.de>
src/flash/nor/stm32l4x.c

index 0182aae6600e601f0fca5bfc53f896d7f6db68ce..8c292e76d5be7318aefbfef880433dc7b1a70c2f 100644 (file)
@@ -1923,15 +1923,17 @@ static int stm32l4_probe(struct flash_bank *bank)
                /* STM32L55/L56xx can be single/dual bank:
                 *   if size = 512K check DBANK bit
                 *   if size = 256K check DB256K bit
+                *
+                * default page size is 4kb, if DBANK = 1, the page size is 2kb.
                 */
-               page_size_kb = 4;
+
+               page_size_kb = (stm32l4_info->optr & FLASH_L5_DBANK) ? 2 : 4;
                num_pages = flash_size_kb / page_size_kb;
                stm32l4_info->bank1_sectors = num_pages;
+
                if ((is_max_flash_size && (stm32l4_info->optr & FLASH_L5_DBANK)) ||
                        (!is_max_flash_size && (stm32l4_info->optr & FLASH_L5_DB256))) {
                        stm32l4_info->dual_bank_mode = true;
-                       page_size_kb = 2;
-                       num_pages = flash_size_kb / page_size_kb;
                        stm32l4_info->bank1_sectors = num_pages / 2;
                }
                break;