This is an automated email from Gerrit.

Robert Jordens ([email protected]) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/2843

-- gerrit

commit 2c36b40f1a443ed4da8a3669562783d0218bfe04
Author: Robert Jordens <[email protected]>
Date:   Wed Jul 1 03:15:04 2015 -0600

    flash/nor/tcl: add "flash verify_bank" command
    
    Verification previously relied on the target's support for reading. This
    command allows the direct use of the flash_driver_read() api to do the
    verification.
    
    Change-Id: Ic1f4b6bd5222bcd59ad1fb76d1975d9808438b2c
    Signed-off-by: Robert Jordens <[email protected]>

diff --git a/src/flash/nor/tcl.c b/src/flash/nor/tcl.c
index 812fd54..bc10b38 100644
--- a/src/flash/nor/tcl.c
+++ b/src/flash/nor/tcl.c
@@ -674,6 +674,90 @@ COMMAND_HANDLER(handle_flash_read_bank_command)
 }
 
 
+COMMAND_HANDLER(handle_flash_verify_bank_command)
+{
+       uint32_t offset;
+       uint8_t *buffer_file, *buffer_flash;
+       struct fileio fileio;
+       size_t read_cnt;
+       int filesize;
+       int differ;
+
+       if (CMD_ARGC != 3)
+               return ERROR_COMMAND_SYNTAX_ERROR;
+
+       struct duration bench;
+       duration_start(&bench);
+
+       struct flash_bank *p;
+       int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &p);
+       if (ERROR_OK != retval)
+               return retval;
+
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], offset);
+
+       retval = fileio_open(&fileio, CMD_ARGV[1], FILEIO_READ, FILEIO_BINARY);
+       if (retval != ERROR_OK) {
+               LOG_ERROR("Could not open file");
+               return retval;
+       }
+
+       retval = fileio_size(&fileio, &filesize);
+       if (retval != ERROR_OK) {
+               fileio_close(&fileio);
+               return retval;
+       }
+
+       buffer_file = malloc(filesize);
+       if (buffer_file == NULL) {
+               LOG_ERROR("Out of memory");
+               return ERROR_FAIL;
+       }
+
+       retval = fileio_read(&fileio, filesize, buffer_file, &read_cnt);
+       fileio_close(&fileio);
+       if (retval != ERROR_OK) {
+               LOG_ERROR("File read failure");
+               free(buffer_file);
+               return retval;
+       }
+
+       if (read_cnt != (size_t) filesize) {
+               LOG_ERROR("Short read");
+               free(buffer_file);
+               return ERROR_FAIL;
+       }
+
+       buffer_flash = malloc(filesize);
+       if (buffer_flash == NULL) {
+               LOG_ERROR("Out of memory");
+               free(buffer_file);
+               return ERROR_FAIL;
+       }
+
+       retval = flash_driver_read(p, buffer_flash, offset, filesize);
+       if (retval != ERROR_OK) {
+               LOG_ERROR("Flash read error");
+               free(buffer_flash);
+               free(buffer_file);
+               return retval;
+       }
+
+       differ = memcmp(buffer_file, buffer_flash, filesize);
+       free(buffer_flash);
+       free(buffer_file);
+
+       if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK)) {
+               command_print(CMD_CTX, "read %ld bytes from file %s and flash 
bank %u"
+                       " at offset 0x%8.8" PRIx32 " in %fs (%0.3f KiB/s)",
+                       (long)read_cnt, CMD_ARGV[1], p->bank_number, offset,
+                       duration_elapsed(&bench), duration_kbps(&bench, 
read_cnt));
+               command_print(CMD_CTX, "contents %s", differ ? "differ" : 
"match");
+       }
+
+       return differ ? ERROR_FAIL : ERROR_OK;
+}
+
 void flash_set_dirty(void)
 {
        struct flash_bank *c;
@@ -800,6 +884,15 @@ static const struct command_registration 
flash_exec_command_handlers[] = {
                        "beginning of the bank.",
        },
        {
+               .name = "verify_bank",
+               .handler = handle_flash_verify_bank_command,
+               .mode = COMMAND_EXEC,
+               .usage = "bank_id filename offset",
+               .help = "Read binary data from flash bank and file, "
+                       "starting at specified byte offset from the "
+                       "beginning of the bank. Compare the contents.",
+       },
+       {
                .name = "protect",
                .handler = handle_flash_protect_command,
                .mode = COMMAND_EXEC,

-- 

------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to