flash/stm32l4x: add support of STM32WL5x dual core
[fw/openocd] / src / flash / nand / tcl.c
index 6f942d27f3d3dbf6902f1d3cc34e281f10ef9dcd..6707314ccc824d3c87caebf02107c8b663aaa57c 100644 (file)
@@ -16,9 +16,7 @@
  *   GNU General Public License for more details.                          *
  *                                                                         *
  *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
@@ -39,20 +37,20 @@ COMMAND_HANDLER(handle_nand_list_command)
        int i;
 
        if (!nand_devices) {
-               command_print(CMD_CTX, "no NAND flash devices configured");
+               command_print(CMD, "no NAND flash devices configured");
                return ERROR_OK;
        }
 
        for (p = nand_devices, i = 0; p; p = p->next, i++) {
                if (p->device)
-                       command_print(CMD_CTX, "#%i: %s (%s) "
+                       command_print(CMD, "#%i: %s (%s) "
                                "pagesize: %i, buswidth: %i,\n\t"
                                "blocksize: %i, blocks: %i",
                                i, p->device->name, p->manufacturer->name,
                                p->page_size, p->bus_width,
                                p->erase_size, p->num_blocks);
                else
-                       command_print(CMD_CTX, "#%i: not probed", i);
+                       command_print(CMD, "#%i: not probed", i);
        }
 
        return ERROR_OK;
@@ -85,11 +83,11 @@ COMMAND_HANDLER(handle_nand_info_command)
 
        struct nand_device *p;
        int retval = CALL_COMMAND_HANDLER(nand_command_get_device, 0, &p);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
-       if (NULL == p->device) {
-               command_print(CMD_CTX, "#%s: not probed", CMD_ARGV[0]);
+       if (!p->device) {
+               command_print(CMD, "#%s: not probed", CMD_ARGV[0]);
                return ERROR_OK;
        }
 
@@ -99,7 +97,7 @@ COMMAND_HANDLER(handle_nand_info_command)
        if (last >= p->num_blocks)
                last = p->num_blocks - 1;
 
-       command_print(CMD_CTX,
+       command_print(CMD,
                "#%i: %s (%s) pagesize: %i, buswidth: %i, erasesize: %i",
                i++,
                p->device->name,
@@ -125,8 +123,8 @@ COMMAND_HANDLER(handle_nand_info_command)
                else
                        bad_state = " (block condition unknown)";
 
-               command_print(CMD_CTX,
-                       "\t#%i: 0x%8.8" PRIx32 " (%" PRId32 "kB) %s%s",
+               command_print(CMD,
+                       "\t#%i: 0x%8.8" PRIx32 " (%" PRIu32 "kB) %s%s",
                        j,
                        p->blocks[j].offset,
                        p->blocks[j].size / 1024,
@@ -144,12 +142,12 @@ COMMAND_HANDLER(handle_nand_probe_command)
 
        struct nand_device *p;
        int retval = CALL_COMMAND_HANDLER(nand_command_get_device, 0, &p);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        retval = nand_probe(p);
        if (retval == ERROR_OK) {
-               command_print(CMD_CTX, "NAND flash device '%s (%s)' found",
+               command_print(CMD, "NAND flash device '%s (%s)' found",
                        p->device->name, p->manufacturer->name);
        }
 
@@ -163,7 +161,7 @@ COMMAND_HANDLER(handle_nand_erase_command)
 
        struct nand_device *p;
        int retval = CALL_COMMAND_HANDLER(nand_command_get_device, 0, &p);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        unsigned long offset;
@@ -191,7 +189,7 @@ COMMAND_HANDLER(handle_nand_erase_command)
 
        retval = nand_erase(p, offset, offset + length - 1);
        if (retval == ERROR_OK) {
-               command_print(CMD_CTX, "erased blocks %lu to %lu "
+               command_print(CMD, "erased blocks %lu to %lu "
                        "on NAND flash device #%s '%s'",
                        offset, offset + length - 1,
                        CMD_ARGV[0], p->device->name);
@@ -210,7 +208,7 @@ COMMAND_HANDLER(handle_nand_check_bad_blocks_command)
 
        struct nand_device *p;
        int retval = CALL_COMMAND_HANDLER(nand_command_get_device, 0, &p);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        if (CMD_ARGC == 3) {
@@ -235,7 +233,7 @@ COMMAND_HANDLER(handle_nand_check_bad_blocks_command)
 
        retval = nand_build_bbt(p, first, last);
        if (retval == ERROR_OK) {
-               command_print(CMD_CTX, "checked NAND flash device for bad blocks, "
+               command_print(CMD, "checked NAND flash device for bad blocks, "
                        "use \"nand info\" command to list blocks");
        }
 
@@ -248,31 +246,33 @@ COMMAND_HANDLER(handle_nand_write_command)
        struct nand_fileio_state s;
        int retval = CALL_COMMAND_HANDLER(nand_fileio_parse_args,
                        &s, &nand, FILEIO_READ, false, true);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        uint32_t total_bytes = s.size;
        while (s.size > 0) {
                int bytes_read = nand_fileio_read(nand, &s);
                if (bytes_read <= 0) {
-                       command_print(CMD_CTX, "error while reading file");
-                       return nand_fileio_cleanup(&s);
+                       command_print(CMD, "error while reading file");
+                       nand_fileio_cleanup(&s);
+                       return ERROR_FAIL;
                }
                s.size -= bytes_read;
 
                retval = nand_write_page(nand, s.address / nand->page_size,
                                s.page, s.page_size, s.oob, s.oob_size);
-               if (ERROR_OK != retval) {
-                       command_print(CMD_CTX, "failed writing file %s "
+               if (retval != ERROR_OK) {
+                       command_print(CMD, "failed writing file %s "
                                "to NAND flash %s at offset 0x%8.8" PRIx32,
                                CMD_ARGV[1], CMD_ARGV[0], s.address);
-                       return nand_fileio_cleanup(&s);
+                       nand_fileio_cleanup(&s);
+                       return retval;
                }
                s.address += s.page_size;
        }
 
-       if (nand_fileio_finish(&s)) {
-               command_print(CMD_CTX, "wrote file %s to NAND flash %s up to "
+       if (nand_fileio_finish(&s) == ERROR_OK) {
+               command_print(CMD, "wrote file %s to NAND flash %s up to "
                        "offset 0x%8.8" PRIx32 " in %fs (%0.3f KiB/s)",
                        CMD_ARGV[1], CMD_ARGV[0], s.address, duration_elapsed(&s.bench),
                        duration_kbps(&s.bench, total_bytes));
@@ -286,7 +286,7 @@ COMMAND_HANDLER(handle_nand_verify_command)
        struct nand_fileio_state file;
        int retval = CALL_COMMAND_HANDLER(nand_fileio_parse_args,
                        &file, &nand, FILEIO_READ, false, true);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        struct nand_fileio_state dev;
@@ -294,15 +294,15 @@ COMMAND_HANDLER(handle_nand_verify_command)
        dev.address = file.address;
        dev.size = file.size;
        dev.oob_format = file.oob_format;
-       retval = nand_fileio_start(CMD_CTX, nand, NULL, FILEIO_NONE, &dev);
-       if (ERROR_OK != retval)
+       retval = nand_fileio_start(CMD, nand, NULL, FILEIO_NONE, &dev);
+       if (retval != ERROR_OK)
                return retval;
 
        while (file.size > 0) {
                retval = nand_read_page(nand, dev.address / dev.page_size,
                                dev.page, dev.page_size, dev.oob, dev.oob_size);
-               if (ERROR_OK != retval) {
-                       command_print(CMD_CTX, "reading NAND flash page failed");
+               if (retval != ERROR_OK) {
+                       command_print(CMD, "reading NAND flash page failed");
                        nand_fileio_cleanup(&dev);
                        nand_fileio_cleanup(&file);
                        return retval;
@@ -310,7 +310,7 @@ COMMAND_HANDLER(handle_nand_verify_command)
 
                int bytes_read = nand_fileio_read(nand, &file);
                if (bytes_read <= 0) {
-                       command_print(CMD_CTX, "error while reading file");
+                       command_print(CMD, "error while reading file");
                        nand_fileio_cleanup(&dev);
                        nand_fileio_cleanup(&file);
                        return ERROR_FAIL;
@@ -318,7 +318,7 @@ COMMAND_HANDLER(handle_nand_verify_command)
 
                if ((dev.page && memcmp(dev.page, file.page, dev.page_size)) ||
                                (dev.oob && memcmp(dev.oob, file.oob, dev.oob_size))) {
-                       command_print(CMD_CTX, "NAND flash contents differ "
+                       command_print(CMD, "NAND flash contents differ "
                                "at 0x%8.8" PRIx32, dev.address);
                        nand_fileio_cleanup(&dev);
                        nand_fileio_cleanup(&file);
@@ -330,7 +330,7 @@ COMMAND_HANDLER(handle_nand_verify_command)
        }
 
        if (nand_fileio_finish(&file) == ERROR_OK) {
-               command_print(CMD_CTX, "verified file %s in NAND flash %s "
+               command_print(CMD, "verified file %s in NAND flash %s "
                        "up to offset 0x%8.8" PRIx32 " in %fs (%0.3f KiB/s)",
                        CMD_ARGV[1], CMD_ARGV[0], dev.address, duration_elapsed(&file.bench),
                        duration_kbps(&file.bench, dev.size));
@@ -341,41 +341,41 @@ COMMAND_HANDLER(handle_nand_verify_command)
 
 COMMAND_HANDLER(handle_nand_dump_command)
 {
-       int filesize;
+       size_t filesize;
        struct nand_device *nand = NULL;
        struct nand_fileio_state s;
        int retval = CALL_COMMAND_HANDLER(nand_fileio_parse_args,
                        &s, &nand, FILEIO_WRITE, true, false);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
        while (s.size > 0) {
                size_t size_written;
                retval = nand_read_page(nand, s.address / nand->page_size,
                                s.page, s.page_size, s.oob, s.oob_size);
-               if (ERROR_OK != retval) {
-                       command_print(CMD_CTX, "reading NAND flash page failed");
+               if (retval != ERROR_OK) {
+                       command_print(CMD, "reading NAND flash page failed");
                        nand_fileio_cleanup(&s);
                        return retval;
                }
 
-               if (NULL != s.page)
-                       fileio_write(&s.fileio, s.page_size, s.page, &size_written);
+               if (s.page)
+                       fileio_write(s.fileio, s.page_size, s.page, &size_written);
 
-               if (NULL != s.oob)
-                       fileio_write(&s.fileio, s.oob_size, s.oob, &size_written);
+               if (s.oob)
+                       fileio_write(s.fileio, s.oob_size, s.oob, &size_written);
 
                s.size -= nand->page_size;
                s.address += nand->page_size;
        }
 
-       retval = fileio_size(&s.fileio, &filesize);
+       retval = fileio_size(s.fileio, &filesize);
        if (retval != ERROR_OK)
                return retval;
 
        if (nand_fileio_finish(&s) == ERROR_OK) {
-               command_print(CMD_CTX, "dumped %ld bytes in %fs (%0.3f KiB/s)",
-                       (long)filesize, duration_elapsed(&s.bench),
+               command_print(CMD, "dumped %zu bytes in %fs (%0.3f KiB/s)",
+                       filesize, duration_elapsed(&s.bench),
                        duration_kbps(&s.bench, filesize));
        }
        return ERROR_OK;
@@ -388,11 +388,11 @@ COMMAND_HANDLER(handle_nand_raw_access_command)
 
        struct nand_device *p;
        int retval = CALL_COMMAND_HANDLER(nand_command_get_device, 0, &p);
-       if (ERROR_OK != retval)
+       if (retval != ERROR_OK)
                return retval;
 
-       if (NULL == p->device) {
-               command_print(CMD_CTX, "#%s: not probed", CMD_ARGV[0]);
+       if (!p->device) {
+               command_print(CMD, "#%s: not probed", CMD_ARGV[0]);
                return ERROR_OK;
        }
 
@@ -400,7 +400,7 @@ COMMAND_HANDLER(handle_nand_raw_access_command)
                COMMAND_PARSE_ENABLE(CMD_ARGV[1], p->use_raw);
 
        const char *msg = p->use_raw ? "enabled" : "disabled";
-       command_print(CMD_CTX, "raw access is %s", msg);
+       command_print(CMD, "raw access is %s", msg);
 
        return ERROR_OK;
 }
@@ -411,6 +411,7 @@ static const struct command_registration nand_exec_command_handlers[] = {
                .handler = handle_nand_list_command,
                .mode = COMMAND_EXEC,
                .help = "list configured NAND flash devices",
+               .usage = "",
        },
        {
                .name = "info",
@@ -478,8 +479,8 @@ static int nand_init(struct command_context *cmd_ctx)
 {
        if (!nand_devices)
                return ERROR_OK;
-       struct command *parent = command_find_in_context(cmd_ctx, "nand");
-       return register_commands(cmd_ctx, parent, nand_exec_command_handlers);
+
+       return register_commands(cmd_ctx, "nand", nand_exec_command_handlers);
 }
 
 COMMAND_HANDLER(handle_nand_init_command)
@@ -500,15 +501,15 @@ COMMAND_HANDLER(handle_nand_init_command)
 
 static int nand_list_walker(struct nand_flash_controller *c, void *x)
 {
-       struct command_context *cmd_ctx = (struct command_context *)x;
-       command_print(cmd_ctx, "  %s", c->name);
+       struct command_invocation *cmd = x;
+       command_print(cmd, "  %s", c->name);
        return ERROR_OK;
 }
 
 COMMAND_HANDLER(handle_nand_list_drivers)
 {
-       command_print(CMD_CTX, "Available NAND flash controller drivers:");
-       return nand_driver_walk(&nand_list_walker, CMD_CTX);
+       command_print(CMD, "Available NAND flash controller drivers:");
+       return nand_driver_walk(&nand_list_walker, CMD);
 }
 
 static COMMAND_HELPER(create_nand_device, const char *bank_name,
@@ -526,14 +527,14 @@ static COMMAND_HELPER(create_nand_device, const char *bank_name,
                return ERROR_COMMAND_ARGUMENT_INVALID;
        }
 
-       if (NULL != controller->commands) {
+       if (controller->commands) {
                retval = register_commands(CMD_CTX, NULL,
                                controller->commands);
-               if (ERROR_OK != retval)
+               if (retval != ERROR_OK)
                        return retval;
        }
        c = malloc(sizeof(struct nand_device));
-       if (c == NULL) {
+       if (!c) {
                LOG_ERROR("End of memory");
                return ERROR_FAIL;
        }
@@ -547,11 +548,11 @@ static COMMAND_HELPER(create_nand_device, const char *bank_name,
        c->bus_width = 0;
        c->address_cycles = 0;
        c->page_size = 0;
-       c->use_raw = 0;
+       c->use_raw = false;
        c->next = NULL;
 
        retval = CALL_COMMAND_HANDLER(controller->nand_device_command, c);
-       if (ERROR_OK != retval) {
+       if (retval != ERROR_OK) {
                LOG_ERROR("'%s' driver rejected nand flash. Usage: %s",
                        controller->name,
                        controller->usage);
@@ -559,7 +560,7 @@ static COMMAND_HELPER(create_nand_device, const char *bank_name,
                return retval;
        }
 
-       if (controller->usage == NULL)
+       if (!controller->usage)
                LOG_DEBUG("'%s' driver usage field missing", controller->name);
 
        nand_device_add(c);
@@ -579,7 +580,7 @@ COMMAND_HANDLER(handle_nand_device_command)
        const char *driver_name = CMD_ARGV[0];
        struct nand_flash_controller *controller;
        controller = nand_driver_find_by_name(CMD_ARGV[0]);
-       if (NULL == controller) {
+       if (!controller) {
                LOG_ERROR("No valid NAND flash driver found (%s)", driver_name);
                return CALL_COMMAND_HANDLER(handle_nand_list_drivers);
        }