diff options
author | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-10-16 12:21:24 +0000 |
---|---|---|
committer | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-10-16 12:21:24 +0000 |
commit | 3884c7505fc262921d618b5e6e19de32d0c44443 (patch) | |
tree | 5612dd3c85e394c9fd82806a6c76a89db22afed9 /src/flash/flash.c | |
parent | cd9e0e3115c2e6540e75eb7bf7b159c82d70fbb6 (diff) | |
download | riscv-openocd-3884c7505fc262921d618b5e6e19de32d0c44443.zip riscv-openocd-3884c7505fc262921d618b5e6e19de32d0c44443.tar.gz riscv-openocd-3884c7505fc262921d618b5e6e19de32d0c44443.tar.bz2 |
removed autoerase from flash fillX
git-svn-id: svn://svn.berlios.de/openocd/trunk@1070 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/flash/flash.c')
-rw-r--r-- | src/flash/flash.c | 36 |
1 files changed, 13 insertions, 23 deletions
diff --git a/src/flash/flash.c b/src/flash/flash.c index d5f89de..fb9fa69 100644 --- a/src/flash/flash.c +++ b/src/flash/flash.c @@ -206,7 +206,7 @@ int flash_init_drivers(struct command_context_s *cmd_ctx) "erase address range <address> <length>"); register_command(cmd_ctx, flash_cmd, "fillw", handle_flash_fill_command, COMMAND_EXEC, - "fill with pattern <address> <word_pattern> <count>"); + "fill with pattern (no autoerase) <address> <word_pattern> <count>"); register_command(cmd_ctx, flash_cmd, "fillh", handle_flash_fill_command, COMMAND_EXEC, "fill with pattern <address> <halfword_pattern> <count>"); register_command(cmd_ctx, flash_cmd, "fillb", handle_flash_fill_command, COMMAND_EXEC, @@ -516,7 +516,6 @@ int handle_flash_erase_address_command(struct command_context_s *cmd_ctx, char * { if ((retval = duration_stop_measure(&duration, &duration_text)) != ERROR_OK) { - free(duration_text); return retval; } command_print(cmd_ctx, "erased address 0x%8.8x length %i in %s", address, length, duration_text); @@ -582,7 +581,6 @@ int handle_flash_erase_command(struct command_context_s *cmd_ctx, char *cmd, cha { if ((retval = duration_stop_measure(&duration, &duration_text)) != ERROR_OK) { - free(duration_text); return retval; } @@ -707,7 +705,6 @@ int handle_flash_write_image_command(struct command_context_s *cmd_ctx, char *cm if ((retvaltemp = duration_stop_measure(&duration, &duration_text)) != ERROR_OK) { - free(duration_text); image_close(&image); return retvaltemp; } @@ -792,33 +789,27 @@ int handle_flash_fill_command(struct command_context_s *cmd_ctx, char *cmd, char duration_start_measure(&duration); - flash_set_dirty(); - err = flash_erase_address_range( target, address, count*wordsize ); - if (err == ERROR_OK) + for (wrote=0; wrote<(count*wordsize); wrote+=sizeof(chunk)) { - for (wrote=0; wrote<(count*wordsize); wrote+=sizeof(chunk)) + int cur_size = MIN( (count*wordsize - wrote) , 1024 ); + if (err == ERROR_OK) { - int cur_size = MIN( (count*wordsize - wrote) , 1024 ); - if (err == ERROR_OK) + flash_bank_t *bank; + bank = get_flash_bank_by_addr(target, address); + if(bank == NULL) { - flash_bank_t *bank; - bank = get_flash_bank_by_addr(target, address); - if(bank == NULL) - { - err = ERROR_FAIL; - break; - } - err = flash_driver_write(bank, chunk, address - bank->base + wrote, cur_size); - wrote += cur_size; - } - if (err!=ERROR_OK) + err = ERROR_FAIL; break; + } + err = flash_driver_write(bank, chunk, address - bank->base + wrote, cur_size); + wrote += cur_size; } + if (err!=ERROR_OK) + break; } if ((retval = duration_stop_measure(&duration, &duration_text)) != ERROR_OK) { - free(duration_text); return retval; } @@ -885,7 +876,6 @@ int handle_flash_write_bank_command(struct command_context_s *cmd_ctx, char *cmd if ((retvaltemp = duration_stop_measure(&duration, &duration_text)) != ERROR_OK) { - free(duration_text); fileio_close(&fileio); return retvaltemp; } |