This is an automated email from Gerrit. Tomas Vanek ([email protected]) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/4910
-- gerrit commit d4c4085a58a51c7ccd5e03296577de42e76dc9c3 Author: Tomas Vanek <[email protected]> Date: Wed Jan 23 20:36:46 2019 +0100 flash/nor/nrf5: fix allocation of driver_priv and sector array Drop static pointer to allocated struct nrf5_info, iterate over the flash bank list to find previously allocated nrf5 instances. nrf5 is swd only device, so static allocation makes no harm, but we should avoid copying the code to other flash drivers. Free sector array before allocating it to avoid memory leak on re-probing device. Change-Id: I781d8f4418a91c043f2393e5ecc5278fc6df3566 Signed-off-by: Tomas Vanek <[email protected]> diff --git a/src/flash/nor/nrf5.c b/src/flash/nor/nrf5.c index 7f9ca0a..c15ef17 100644 --- a/src/flash/nor/nrf5.c +++ b/src/flash/nor/nrf5.c @@ -283,6 +283,8 @@ static const struct nrf5_device_package nrf5_packages_table[] = { { 0x2005, "CK" }, }; +struct flash_driver nrf5_flash, nrf51_flash; + static int nrf5_bank_is_probed(struct flash_bank *bank) { struct nrf5_bank *nbank = bank->driver_priv; @@ -794,6 +796,8 @@ static int nrf5_probe(struct flash_bank *bank) } } + free(bank->sectors); + if (bank->base == NRF5_FLASH_BASE) { /* Sanity check */ if (chip->spec && chip->flash_size_kb != chip->spec->flash_size_kb) @@ -1063,9 +1067,31 @@ static void nrf5_free_driver_priv(struct flash_bank *bank) } } +static struct nrf5_info *nrf5_get_chip(struct target *target) +{ + struct flash_bank *bank_iter; + + /* iterate over nrf5 banks of same target */ + for (bank_iter = flash_bank_list(); bank_iter; bank_iter = bank_iter->next) { + if (bank_iter->driver != &nrf5_flash && bank_iter->driver != &nrf51_flash) + continue; + + if (bank_iter->target != target) + continue; + + struct nrf5_bank *nbank = bank_iter->driver_priv; + if (!nbank) + continue; + + if (nbank->chip) + return nbank->chip; + } + return NULL; +} + FLASH_BANK_COMMAND_HANDLER(nrf5_flash_bank_command) { - static struct nrf5_info *chip; + struct nrf5_info *chip; struct nrf5_bank *nbank = NULL; switch (bank->base) { @@ -1077,6 +1103,7 @@ FLASH_BANK_COMMAND_HANDLER(nrf5_flash_bank_command) return ERROR_FAIL; } + chip = nrf5_get_chip(bank->target); if (!chip) { /* Create a new chip */ chip = calloc(1, sizeof(*chip)); -- _______________________________________________ OpenOCD-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openocd-devel
