From 087ce864f4543459053148a1b080ee04fe154665 Mon Sep 17 00:00:00 2001 From: Tomas Vanek Date: Thu, 24 Sep 2015 10:29:12 +0200 Subject: [PATCH] Kinetis: give a reasonable default for max_flash_prog_size max_flash_prog_size euals to pflash_sector_size_bytes for most of devices. There is no point setting max_flash_prog_size for devices without FS_PROGRAM_SECTOR capability. Check for zero sector_size to avoid div by zero exception in case of device has FlexNVM but the driver does not define nvm_sector_size_bytes Change-Id: Iaf4e007fb1ec3d24c373350410e4bebe504a4c3e Signed-off-by: Tomas Vanek Reviewed-on: http://openocd.zylin.com/2958 Tested-by: jenkins Reviewed-by: Thomas Schmid Reviewed-by: Paul Fertser Reviewed-by: Patrick Stewart --- src/flash/nor/kinetis.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/flash/nor/kinetis.c b/src/flash/nor/kinetis.c index 6485bc3fa3..46591e9e2c 100644 --- a/src/flash/nor/kinetis.c +++ b/src/flash/nor/kinetis.c @@ -1072,7 +1072,6 @@ static int kinetis_read_part_info(struct flash_bank *bank) nvm_sector_size_bytes = 1<<10; num_blocks = 2; kinfo->flash_support = FS_PROGRAM_LONGWORD | FS_PROGRAM_SECTOR; - kinfo->max_flash_prog_size = 1<<10; break; case KINETIS_K_SDID_K10_M72: case KINETIS_K_SDID_K20_M72: @@ -1102,7 +1101,6 @@ static int kinetis_read_part_info(struct flash_bank *bank) nvm_sector_size_bytes = 2<<10; num_blocks = 2; kinfo->flash_support = FS_PROGRAM_LONGWORD | FS_PROGRAM_SECTOR; - kinfo->max_flash_prog_size = 2<<10; break; case KINETIS_K_SDID_K10_M120: case KINETIS_K_SDID_K20_M120: @@ -1115,7 +1113,6 @@ static int kinetis_read_part_info(struct flash_bank *bank) nvm_sector_size_bytes = 4<<10; num_blocks = 4; kinfo->flash_support = FS_PROGRAM_PHRASE | FS_PROGRAM_SECTOR; - kinfo->max_flash_prog_size = 4<<10; break; default: LOG_ERROR("Unsupported K-family FAMID"); @@ -1151,7 +1148,6 @@ static int kinetis_read_part_info(struct flash_bank *bank) pflash_sector_size_bytes = 4<<10; num_blocks = 1; kinfo->flash_support = FS_PROGRAM_LONGWORD; - kinfo->max_flash_prog_size = 1<<10; break; default: break; @@ -1163,7 +1159,6 @@ static int kinetis_read_part_info(struct flash_bank *bank) nvm_sector_size_bytes = 1<<10; num_blocks = 1; kinfo->flash_support = FS_PROGRAM_LONGWORD; - kinfo->max_flash_prog_size = 1<<10; break; default: break; @@ -1372,6 +1367,17 @@ static int kinetis_read_part_info(struct flash_bank *bank) bank->sectors = NULL; } + if (kinfo->sector_size == 0) { + LOG_ERROR("Unknown sector size for bank %d", bank->bank_number); + return ERROR_FLASH_BANK_INVALID; + } + + if (kinfo->flash_support & FS_PROGRAM_SECTOR + && kinfo->max_flash_prog_size == 0) { + kinfo->max_flash_prog_size = kinfo->sector_size; + /* Program section size is equal to sector size by default */ + } + bank->num_sectors = bank->size / kinfo->sector_size; assert(bank->num_sectors > 0); bank->sectors = malloc(sizeof(struct flash_sector) * bank->num_sectors); -- 2.30.2