flash: add error handling to get_flash_by_addr/name
[fw/openocd] / src / flash / nor / tcl.c
index a6e942e0da60982703137fcabf9f627244b34f7a..3d67327fd3ca771145354eecd6b5530831891c8f 100644 (file)
@@ -35,7 +35,9 @@ COMMAND_HELPER(flash_command_get_bank, unsigned name_index,
                struct flash_bank **bank)
 {
        const char *name = CMD_ARGV[name_index];
-       *bank = get_flash_bank_by_name(name);
+       int retval = get_flash_bank_by_name(name, bank);
+       if (retval != ERROR_OK)
+               return retval;
        if (*bank)
                return ERROR_OK;
 
@@ -199,8 +201,8 @@ COMMAND_HANDLER(handle_flash_erase_address_command)
 {
        struct flash_bank *p;
        int retval = ERROR_OK;
-       int address;
-       int length;
+       uint32_t address;
+       uint32_t length;
        bool do_pad = false;
        bool do_unlock = false;
        struct target *target = get_current_target(CMD_CTX);
@@ -229,8 +231,8 @@ COMMAND_HANDLER(handle_flash_erase_address_command)
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
-       COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], address);
-       COMMAND_PARSE_NUMBER(int, CMD_ARGV[1], length);
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], address);
+       COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], length);
 
        if (length <= 0)
        {
@@ -238,11 +240,9 @@ COMMAND_HANDLER(handle_flash_erase_address_command)
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
-       p = get_flash_bank_by_addr(target, address);
-       if (p == NULL)
-       {
-               return ERROR_FAIL;
-       }
+       retval = get_flash_bank_by_addr(target, address, true, &p);
+       if (retval != ERROR_OK)
+               return retval;
 
        /* We can't know if we did a resume + halt, in which case we no longer know the erased state */
        flash_set_dirty();
@@ -263,7 +263,7 @@ COMMAND_HANDLER(handle_flash_erase_address_command)
        if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
        {
                command_print(CMD_CTX, "erased address 0x%8.8x (length %i)"
-                               " in %fs (%0.3f kb/s)", address, length,
+                               " in %fs (%0.3f KiB/s)", address, length,
                                duration_elapsed(&bench), duration_kbps(&bench, length));
        }
 
@@ -448,7 +448,7 @@ COMMAND_HANDLER(handle_flash_write_image_command)
        if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
        {
                command_print(CMD_CTX, "wrote %" PRIu32 " bytes from file %s "
-                               "in %fs (%0.3f kb/s)", written, CMD_ARGV[0],
+                               "in %fs (%0.3f KiB/s)", written, CMD_ARGV[0],
                                duration_elapsed(&bench), duration_kbps(&bench, written));
        }
 
@@ -544,12 +544,9 @@ COMMAND_HANDLER(handle_flash_fill_command)
        {
                struct flash_bank *bank;
 
-               bank = get_flash_bank_by_addr(target, address);
-               if (bank == NULL)
-               {
-                       retval = ERROR_FAIL;
+               retval = get_flash_bank_by_addr(target, address, true, &bank );
+               if (retval != ERROR_OK)
                        goto done;
-               }
 
                cur_size = MIN((count * wordsize - wrote), chunksize);
                err = flash_driver_write(bank, chunk, address - bank->base + wrote, cur_size);
@@ -559,7 +556,7 @@ COMMAND_HANDLER(handle_flash_fill_command)
                        goto done;
                }
 
-               err = target_read_buffer(target, address + wrote, cur_size, readback);
+               err = flash_driver_read(bank, readback, address - bank->base + wrote, cur_size);
                if (err != ERROR_OK)
                {
                        retval = err;
@@ -571,7 +568,7 @@ COMMAND_HANDLER(handle_flash_fill_command)
                {
                        if (readback[i]!=chunk[i])
                        {
-                               LOG_ERROR("Verfication error address 0x%08" PRIx32 ", read back 0x%02x, expected 0x%02x",
+                               LOG_ERROR("Verification error address 0x%08" PRIx32 ", read back 0x%02x, expected 0x%02x",
                                                  address + wrote + i, readback[i], chunk[i]);
                                retval = ERROR_FAIL;
                                goto done;
@@ -582,7 +579,7 @@ COMMAND_HANDLER(handle_flash_fill_command)
        if (duration_measure(&bench) == ERROR_OK)
        {
                command_print(CMD_CTX, "wrote %" PRIu32 " bytes to 0x%8.8" PRIx32
-                               " in %fs (%0.3f kb/s)", wrote, address,
+                               " in %fs (%0.3f KiB/s)", wrote, address,
                                duration_elapsed(&bench), duration_kbps(&bench, wrote));
        }
 
@@ -634,7 +631,7 @@ COMMAND_HANDLER(handle_flash_write_bank_command)
        if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
        {
                command_print(CMD_CTX, "wrote %ld bytes from file %s to flash bank %u"
-                               " at offset 0x%8.8" PRIx32 " in %fs (%0.3f kb/s)",
+                               " at offset 0x%8.8" PRIx32 " in %fs (%0.3f KiB/s)",
                                (long)fileio.size, CMD_ARGV[1], p->bank_number, offset,
                                duration_elapsed(&bench), duration_kbps(&bench, fileio.size));
        }
@@ -796,7 +793,7 @@ COMMAND_HANDLER(handle_flash_bank_command)
        }
 
        /* check the flash bank name is unique */
-       if (get_flash_bank_by_name(bank_name) != NULL)
+       if (get_flash_bank_by_name_noprobe(bank_name) != NULL)
        {
                /* flash bank name already exists  */
                LOG_ERROR("flash bank name '%s' already exists", bank_name);