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 <fercerpav@gmail.com> Reviewed-on: http://openocd.zylin.com/2694 Tested-by: jenkins Reviewed-by: Дмитрий Шпак <disona@yandex.ru> Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>__archive__
parent
14040c7a57
commit
03b72c367c
|
@ -5874,6 +5874,31 @@ flash bank $_FLASHNAME mrvlqspi 0x0 0 0 0 $_TARGETNAME 0x46010000
|
||||||
|
|
||||||
@end deffn
|
@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 <name> mdr <base> <size> 0 0 <target#> @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
|
@section mFlash
|
||||||
|
|
||||||
@subsection mFlash Configuration
|
@subsection mFlash Configuration
|
||||||
|
|
|
@ -482,6 +482,11 @@ static int mdr_probe(struct flash_bank *bank)
|
||||||
page_count = mdr_info->page_count;
|
page_count = mdr_info->page_count;
|
||||||
page_size = bank->size / page_count;
|
page_size = bank->size / page_count;
|
||||||
|
|
||||||
|
if (bank->sectors) {
|
||||||
|
free(bank->sectors);
|
||||||
|
bank->sectors = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
bank->num_sectors = page_count;
|
bank->num_sectors = page_count;
|
||||||
bank->sectors = malloc(sizeof(struct flash_sector) * 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 = {
|
struct flash_driver mdr_flash = {
|
||||||
.name = "mdr",
|
.name = "mdr",
|
||||||
|
.usage = "flash bank <name> mdr <base> <size> 0 0 <target#> <type> <page_count> <sec_count>\n"
|
||||||
|
"<type>: 0 for main memory, 1 for info memory",
|
||||||
.flash_bank_command = mdr_flash_bank_command,
|
.flash_bank_command = mdr_flash_bank_command,
|
||||||
.erase = mdr_erase,
|
.erase = mdr_erase,
|
||||||
.protect = mdr_protect,
|
.protect = mdr_protect,
|
||||||
|
|
Loading…
Reference in New Issue