From: Paul Fertser Date: Sat, 4 Apr 2015 08:08:15 +0000 (+0300) Subject: flash/nor/mdr: add docs, remove memory leak on probe() X-Git-Tag: v0.9.0-rc1~13 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=03b72c367c327b4e0510fa65c9664fd62d3ca6af flash/nor/mdr: add docs, remove memory leak on probe() This adds the mandatory Info documentation for the driver as well as the usage field. As a clean up, this also includes freeing of the allocated memory which results in a memory leak if probe is invoked multiple times. Valgrind-tested. Reported by Dmitry Shpak. Change-Id: I2b1d9b9e8b069c6665b11d880b40ce19a1b26ce6 Signed-off-by: Paul Fertser Reviewed-on: http://openocd.zylin.com/2694 Tested-by: jenkins Reviewed-by: Дмитрий Шпак Reviewed-by: Spencer Oliver --- diff --git a/doc/openocd.texi b/doc/openocd.texi index 3573d6d87f..679d017b80 100644 --- a/doc/openocd.texi +++ b/doc/openocd.texi @@ -5874,6 +5874,31 @@ flash bank $_FLASHNAME mrvlqspi 0x0 0 0 0 $_TARGETNAME 0x46010000 @end deffn +@deffn {Flash Driver} mdr +This drivers handles the integrated NOR flash on Milandr Cortex-M +based controllers. A known limitation is that the Info memory can't be +read or verified as it's not memory mapped. + +@example +flash bank mdr 0 0 @var{type} @var{page_count} @var{sec_count} +@end example + +@itemize @bullet +@item @var{type} - 0 for main memory, 1 for info memory +@item @var{page_count} - total number of pages +@item @var{sec_count} - number of sector per page count +@end itemize + +Example usage: +@example +if @{ [info exists IMEMORY] && [string equal $IMEMORY true] @} @{ + flash bank $@{_CHIPNAME@}_info.flash mdr 0x00000000 0x01000 0 0 $_TARGETNAME 1 1 4 +@} else @{ + flash bank $_CHIPNAME.flash mdr 0x00000000 0x20000 0 0 $_TARGETNAME 0 32 4 +@} +@end example +@end deffn + @section mFlash @subsection mFlash Configuration diff --git a/src/flash/nor/mdr.c b/src/flash/nor/mdr.c index ed76aab097..98e013aa35 100644 --- a/src/flash/nor/mdr.c +++ b/src/flash/nor/mdr.c @@ -482,6 +482,11 @@ static int mdr_probe(struct flash_bank *bank) page_count = mdr_info->page_count; page_size = bank->size / page_count; + if (bank->sectors) { + free(bank->sectors); + bank->sectors = NULL; + } + bank->num_sectors = page_count; bank->sectors = malloc(sizeof(struct flash_sector) * page_count); @@ -516,6 +521,8 @@ static int get_mdr_info(struct flash_bank *bank, char *buf, int buf_size) struct flash_driver mdr_flash = { .name = "mdr", + .usage = "flash bank mdr 0 0 \n" + ": 0 for main memory, 1 for info memory", .flash_bank_command = mdr_flash_bank_command, .erase = mdr_erase, .protect = mdr_protect,