This is an automated email from Gerrit. Romain Goyet ([email protected]) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/4926
-- gerrit commit 68fe5eeb801147d2c7d7dffa9632683670ad90bc Author: Romain Goyet <[email protected]> Date: Mon Feb 18 17:29:59 2019 +0100 flash/nor/stm32f2x: Support value line chips with trimmed flash Change-Id: If00e5d7a328d11b399babc0bb2111e3ad8a3217e Signed-off-by: Romain Goyet <[email protected]> diff --git a/src/flash/nor/stm32f2x.c b/src/flash/nor/stm32f2x.c index b46fb07..00b1555 100644 --- a/src/flash/nor/stm32f2x.c +++ b/src/flash/nor/stm32f2x.c @@ -766,31 +766,38 @@ static int stm32x_write(struct flash_bank *bank, const uint8_t *buffer, return target_write_u32(target, STM32_FLASH_CR, FLASH_LOCK); } -static int setup_sector(struct flash_bank *bank, int start, int num, int size) +static void setup_sector(struct flash_bank *bank, int i, int size) { + assert(i < bank->num_sectors); + bank->sectors[i].offset = bank->size; + bank->sectors[i].size = size; + bank->size += bank->sectors[i].size; + LOG_DEBUG("sector %d: %dkBytes", i, size >> 10); +} - for (int i = start; i < (start + num) ; i++) { - assert(i < bank->num_sectors); - bank->sectors[i].offset = bank->size; - bank->sectors[i].size = size; - bank->size += bank->sectors[i].size; - LOG_DEBUG("sector %d: %dkBytes", i, size >> 10); +static int sector_size_in_kb(int i, int max_sector_size_in_kb) { + assert(i >= 0); + if (i < 4) { + return (max_sector_size_in_kb / 8); + } else if (i == 4) { + return (max_sector_size_in_kb / 2); + } else { + return max_sector_size_in_kb; } - - return start + num; } static void setup_bank(struct flash_bank *bank, int start, uint16_t flash_size_in_kb, uint16_t max_sector_size_in_kb) { - int remain; - - start = setup_sector(bank, start, 4, (max_sector_size_in_kb / 8) * 1024); - start = setup_sector(bank, start, 1, (max_sector_size_in_kb / 2) * 1024); - - /* remaining sectors all of size max_sector_size_in_kb */ - remain = (flash_size_in_kb / max_sector_size_in_kb) - 1; - start = setup_sector(bank, start, remain, max_sector_size_in_kb * 1024); + int remaining_flash_size_in_kb = flash_size_in_kb; + int sector_index = 0; + while (remaining_flash_size_in_kb > 0) { + int size_in_kb = sector_size_in_kb(sector_index, max_sector_size_in_kb); + setup_sector(bank, sector_index, size_in_kb * 1024); + assert(size_in_kb <= remaining_flash_size_in_kb); + remaining_flash_size_in_kb -= size_in_kb; + sector_index++; + } } static int stm32x_get_device_id(struct flash_bank *bank, uint32_t *device_id) -- _______________________________________________ OpenOCD-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openocd-devel
