- rename log functions to stop conflicts under win32 (wingdi)
[openocd.git] / src / flash / flash.c
index 84d1158695bf174a342fcea6458359a6e56c375a..b3d1aa755855956b8e552a801a7c3b40283829ad 100644 (file)
@@ -88,63 +88,40 @@ static int auto_erase = 0;
 /* wafer thin wrapper for invoking the flash driver */
 static int flash_driver_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count)
 {
-       int retval=ERROR_OK;
-       if (bank->target->state != TARGET_HALTED)
-       {
-               ERROR("target not halted - aborting flash write");
-               retval=ERROR_TARGET_NOT_HALTED;
-       } else
-       {
-               retval=bank->driver->write(bank, buffer, offset, count);
-       }
+       int retval;
+
+       retval=bank->driver->write(bank, buffer, offset, count);
        if (retval!=ERROR_OK)
        {
-               ERROR("Writing to flash bank at address 0x%08x at offset 0x%8.8x", bank->base, offset);
+               LOG_ERROR("error writing to flash at address 0x%08x at offset 0x%8.8x (%d)", bank->base, offset, retval);
        }
+
        return retval;
 }
 
 static int flash_driver_erase(struct flash_bank_s *bank, int first, int last)
 {
-       int retval=ERROR_OK;
-       if (bank->target->state != TARGET_HALTED)
-       {
-               ERROR("target not halted - aborting flash erase");
-               retval=ERROR_TARGET_NOT_HALTED;
-       } else if ((first < 0) || (last < first) || (last >= bank->num_sectors))
-       {
-               ERROR("invalid flash sector");
-               retval=ERROR_FLASH_SECTOR_INVALID;
-       } else
-       {
-               retval=bank->driver->erase(bank, first, last);
-       }
+       int retval;
+
+       retval=bank->driver->erase(bank, first, last);
        if (retval!=ERROR_OK)
        {
-               ERROR("Failed erasing banks %d to %d", first, last);
+               LOG_ERROR("failed erasing sectors %d to %d (%d)", first, last, retval);
        }
+
        return retval;
 }
 
 int flash_driver_protect(struct flash_bank_s *bank, int set, int first, int last)
 {
        int retval;
-       if (bank->target->state != TARGET_HALTED)
-       {
-               ERROR("target not halted - aborting flash erase");
-               retval=ERROR_TARGET_NOT_HALTED;
-       } else if ((first < 0) || (last < first) || (last >= bank->num_sectors))
-       {
-               ERROR("invalid flash sector");
-               retval=ERROR_FLASH_SECTOR_INVALID;
-       } else
-       {
-               retval=bank->driver->protect(bank, set, first, last);
-       }
+
+       retval=bank->driver->protect(bank, set, first, last);
        if (retval!=ERROR_OK)
        {
-               ERROR("Failed protecting banks %d to %d", first, last);
+               LOG_ERROR("failed setting protection for areas %d to %d (%d)", first, last, retval);
        }
+
        return retval;
 }
 
@@ -200,10 +177,21 @@ flash_bank_t *get_flash_bank_by_num_noprobe(int num)
                        return p;
                }
        }
-       ERROR("flash bank %d does not exist", num);
+       LOG_ERROR("flash bank %d does not exist", num);
        return NULL;
 }
 
+int flash_get_bank_count()
+{
+       flash_bank_t *p;
+       int i = 0;
+       for (p = flash_banks; p; p = p->next)
+       {
+               i++;
+       }
+       return i;
+}
+
 flash_bank_t *get_flash_bank_by_num(int num)
 {
        flash_bank_t *p = get_flash_bank_by_num_noprobe(num);
@@ -216,7 +204,7 @@ flash_bank_t *get_flash_bank_by_num(int num)
 
        if (retval != ERROR_OK)
        {
-               ERROR("auto_probe failed %d\n", retval);
+               LOG_ERROR("auto_probe failed %d\n", retval);
                return NULL;
        }
        return p;
@@ -235,7 +223,7 @@ int handle_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char
 
        if ((target = get_target_by_num(strtoul(args[5], NULL, 0))) == NULL)
        {
-               ERROR("target %lu not defined", strtoul(args[5], NULL, 0));
+               LOG_ERROR("target %lu not defined", strtoul(args[5], NULL, 0));
                return ERROR_OK;
        }
 
@@ -248,7 +236,7 @@ int handle_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char
                        /* register flash specific commands */
                        if (flash_drivers[i]->register_commands(cmd_ctx) != ERROR_OK)
                        {
-                               ERROR("couldn't register '%s' commands", args[0]);
+                               LOG_ERROR("couldn't register '%s' commands", args[0]);
                                exit(-1);
                        }
 
@@ -266,7 +254,7 @@ int handle_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char
 
                        if (flash_drivers[i]->flash_bank_command(cmd_ctx, cmd, args, argc, c) != ERROR_OK)
                        {
-                               ERROR("'%s' driver rejected flash bank at 0x%8.8x", args[0], c->base);
+                               LOG_ERROR("'%s' driver rejected flash bank at 0x%8.8x", args[0], c->base);
                                free(c);
                                return ERROR_OK;
                        }
@@ -291,7 +279,7 @@ int handle_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char
        /* no matching flash driver found */
        if (!found)
        {
-               ERROR("flash driver '%s' not found", args[0]);
+               LOG_ERROR("flash driver '%s' not found", args[0]);
                exit(-1);
        }
 
@@ -323,6 +311,7 @@ int handle_flash_info_command(struct command_context_s *cmd_ctx, char *cmd, char
        flash_bank_t *p;
        int i = 0;
        int j = 0;
+       int retval;
 
        if (argc != 1)
        {
@@ -363,8 +352,11 @@ int handle_flash_info_command(struct command_context_s *cmd_ctx, char *cmd, char
                                                        erase_state, protect_state);
                        }
 
-                       p->driver->info(p, buf, 1024);
+                       *buf = '\0'; /* initialize buffer, otherwise it migh contain garbage if driver function fails */
+                       retval = p->driver->info(p, buf, sizeof(buf));
                        command_print(cmd_ctx, "%s", buf);
+                       if (retval != ERROR_OK)
+                               LOG_ERROR("error retrieving flash info (%d)", retval);
                }
        }
 
@@ -606,7 +598,7 @@ int handle_flash_write_image_command(struct command_context_s *cmd_ctx, char *cm
 
        if (!target)
        {
-               ERROR("no target selected");
+               LOG_ERROR("no target selected");
                return ERROR_OK;
        }
 
@@ -628,7 +620,6 @@ int handle_flash_write_image_command(struct command_context_s *cmd_ctx, char *cm
        retval = image_open(&image, args[0], (argc == 3) ? args[2] : NULL);
        if (retval != ERROR_OK)
        {
-               command_print(cmd_ctx, "image_open error: %s", image.error_str);
                return retval;
        }
 
@@ -685,14 +676,12 @@ int handle_flash_write_bank_command(struct command_context_s *cmd_ctx, char *cmd
 
        if (fileio_open(&fileio, args[1], FILEIO_READ, FILEIO_BINARY) != ERROR_OK)
        {
-               command_print(cmd_ctx, "flash write_binary error: %s", fileio.error_str);
                return ERROR_OK;
        }
 
        buffer = malloc(fileio.size);
        if (fileio_read(&fileio, fileio.size, buffer, &buf_cnt) != ERROR_OK)
        {
-               command_print(cmd_ctx, "flash write_binary error: %s", fileio.error_str);
                return ERROR_OK;
        }
 
@@ -742,14 +731,14 @@ flash_bank_t *get_flash_bank_by_addr(target_t *target, u32 addr)
 
                if (retval != ERROR_OK)
                {
-                       ERROR("auto_probe failed %d\n", retval);
+                       LOG_ERROR("auto_probe failed %d\n", retval);
                        return NULL;
                }
                /* check whether address belongs to this flash bank */
                if ((addr >= c->base) && (addr < c->base + c->size) && target == c->target)
                        return c;
        }
-       ERROR("No flash at address 0x%08x\n", addr);
+       LOG_ERROR("No flash at address 0x%08x\n", addr);
        return NULL;
 }
 
@@ -834,7 +823,7 @@ int flash_write(target_t *target, image_t *image, u32 *written, int erase)
 
                if (image->sections[section].size ==  0)
                {
-                       WARNING("empty section %d", section);
+                       LOG_WARNING("empty section %d", section);
                        section++;
                        section_offset = 0;
                        continue;
@@ -856,7 +845,7 @@ int flash_write(target_t *target, image_t *image, u32 *written, int erase)
                {
                        if (image->sections[section_last + 1].base_address < (run_address + run_size))
                        {
-                               DEBUG("section %d out of order(very slightly surprising, but supported)", section_last + 1);
+                               LOG_DEBUG("section %d out of order(very slightly surprising, but supported)", section_last + 1);
                                break;
                        }
                        if (image->sections[section_last + 1].base_address != (run_address + run_size))
@@ -933,7 +922,6 @@ int handle_flash_auto_erase_command(struct command_context_s *cmd_ctx, char *cmd
        if (argc != 1)
        {
                return ERROR_COMMAND_SYNTAX_ERROR;
-
        }
 
        if (strcmp(args[0], "on") == 0)

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)