From 1c16d76c00cd48ac99daeae41cb59fa7d078fa48 Mon Sep 17 00:00:00 2001 From: Tarek BOCHKATI Date: Fri, 7 Feb 2020 20:13:10 +0100 Subject: [PATCH] flash/stm32f1x: fix maximum flash size for some devices For STM32F0xxx, according to RM0360 Rev 4 and RM0091 Rev 9, the accurate flash sizes are in RM0360, Table 4 and 5 DEV_ID=0x440 => F030x8 => 64K (64 * 1K) F05xxx => idem DEV_ID=0x442 => F030xC => 256K (128 * 2K) F09xxx => idem DEV_ID=0x444 => F030x4 => 16K (16 * 1K) F030x6 => 32K (32 * 1K) DEV_ID=0x445 => F070x6 => 32K (32 * 1K) F04xxx => idem DEV_ID=0x448 => F070xB => 128K (64 * 2K) For STM32 F100xx HD VL (0x428), max_flash_size_kb is 512 (was 128) refer to RM0041 Rev5: Table 5. Flash module organization (high-density value line devices) => (256 page of 2 Kbytes each) Change-Id: I4ead13093f8f4b8ec900482ee049a6fc83dcc664 Signed-off-by: Tarek BOCHKATI Reviewed-on: http://openocd.zylin.com/5444 Tested-by: jenkins Reviewed-by: Antonio Borneo --- src/flash/nor/stm32f1x.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/flash/nor/stm32f1x.c b/src/flash/nor/stm32f1x.c index 7d5a8f0a2..37dcafd87 100644 --- a/src/flash/nor/stm32f1x.c +++ b/src/flash/nor/stm32f1x.c @@ -714,17 +714,33 @@ static int stm32x_probe(struct flash_bank *bank) /* set page size, protection granularity and max flash size depending on family */ switch (device_id & 0xfff) { case 0x440: /* stm32f05x */ + page_size = 1024; + stm32x_info->ppage_size = 4; + max_flash_size_in_kb = 64; + stm32x_info->user_data_offset = 16; + stm32x_info->option_offset = 6; + stm32x_info->default_rdp = 0xAA; + stm32x_info->can_load_options = true; + break; case 0x444: /* stm32f03x */ case 0x445: /* stm32f04x */ page_size = 1024; stm32x_info->ppage_size = 4; - max_flash_size_in_kb = 64; + max_flash_size_in_kb = 32; stm32x_info->user_data_offset = 16; stm32x_info->option_offset = 6; stm32x_info->default_rdp = 0xAA; stm32x_info->can_load_options = true; break; case 0x448: /* stm32f07x */ + page_size = 2048; + stm32x_info->ppage_size = 4; + max_flash_size_in_kb = 128; + stm32x_info->user_data_offset = 16; + stm32x_info->option_offset = 6; + stm32x_info->default_rdp = 0xAA; + stm32x_info->can_load_options = true; + break; case 0x442: /* stm32f09x */ page_size = 2048; stm32x_info->ppage_size = 4; @@ -768,7 +784,7 @@ static int stm32x_probe(struct flash_bank *bank) case 0x428: /* stm32f100xx high-density value line */ page_size = 2048; stm32x_info->ppage_size = 4; - max_flash_size_in_kb = 128; + max_flash_size_in_kb = 512; break; case 0x422: /* stm32f302/3xb/c */ page_size = 2048; -- 2.47.2