eliminate src/flash/flash.c
authorZachary T Welch <zw@superlucidity.net>
Fri, 4 Dec 2009 12:37:27 +0000 (04:37 -0800)
committerZachary T Welch <zw@superlucidity.net>
Sat, 5 Dec 2009 00:56:23 +0000 (16:56 -0800)
Move remaining NOR flash implemenation into flash/nor/core.c
Removes flash.c from the build, leaving only its header to split.

src/flash/Makefile.am
src/flash/flash.c [deleted file]
src/flash/nor/core.c

index cda59e44e1f98ac388eda23d419ae7e32f86e953..b5cd52603e0a7b0d47f8473b02692ab9edc37ba1 100644 (file)
@@ -9,7 +9,6 @@ METASOURCES = AUTO
 noinst_LTLIBRARIES = libflash.la
 libflash_la_SOURCES = \
        common.c \
-       flash.c \
        arm_nandio.c \
        nand_ecc.c \
        nand_ecc_kw.c \
diff --git a/src/flash/flash.c b/src/flash/flash.c
deleted file mode 100644 (file)
index dfeea5b..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-/***************************************************************************
- *   Copyright (C) 2005 by Dominic Rath                                    *
- *   Dominic.Rath@gmx.de                                                   *
- *                                                                         *
- *   Copyright (C) 2007,2008 Øyvind Harboe                                 *
- *   oyvind.harboe@zylin.com                                               *
- *                                                                         *
- *   Copyright (C) 2008 by Spencer Oliver                                  *
- *   spen@spen-soft.co.uk                                                  *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   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.             *
- ***************************************************************************/
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "flash.h"
-#include "common.h"
-#include <target/image.h>
-#include <helper/time_support.h>
-
-struct flash_bank *flash_banks;
-
-struct flash_bank *get_flash_bank_by_num_noprobe(int num)
-{
-       struct flash_bank *p;
-       int i = 0;
-
-       for (p = flash_banks; p; p = p->next)
-       {
-               if (i++ == num)
-               {
-                       return p;
-               }
-       }
-       LOG_ERROR("flash bank %d does not exist", num);
-       return NULL;
-}
-
-int flash_get_bank_count(void)
-{
-       struct flash_bank *p;
-       int i = 0;
-       for (p = flash_banks; p; p = p->next)
-       {
-               i++;
-       }
-       return i;
-}
-
-struct flash_bank *get_flash_bank_by_name(const char *name)
-{
-       unsigned requested = get_flash_name_index(name);
-       unsigned found = 0;
-
-       struct flash_bank *bank;
-       for (bank = flash_banks; NULL != bank; bank = bank->next)
-       {
-               if (strcmp(bank->name, name) == 0)
-                       return bank;
-               if (!flash_driver_name_matches(bank->driver->name, name))
-                       continue;
-               if (++found < requested)
-                       continue;
-               return bank;
-       }
-       return NULL;
-}
-
-struct flash_bank *get_flash_bank_by_num(int num)
-{
-       struct flash_bank *p = get_flash_bank_by_num_noprobe(num);
-       int retval;
-
-       if (p == NULL)
-               return NULL;
-
-       retval = p->driver->auto_probe(p);
-
-       if (retval != ERROR_OK)
-       {
-               LOG_ERROR("auto_probe failed %d\n", retval);
-               return NULL;
-       }
-       return p;
-}
-
-/* lookup flash bank by address */
-struct flash_bank *get_flash_bank_by_addr(struct target *target, uint32_t addr)
-{
-       struct flash_bank *c;
-
-       /* cycle through bank list */
-       for (c = flash_banks; c; c = c->next)
-       {
-               int retval;
-               retval = c->driver->auto_probe(c);
-
-               if (retval != ERROR_OK)
-               {
-                       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 - 1)) && target == c->target)
-                       return c;
-       }
-       LOG_ERROR("No flash at address 0x%08" PRIx32 "\n", addr);
-       return NULL;
-}
-
-int default_flash_mem_blank_check(struct flash_bank *bank)
-{
-       struct target *target = bank->target;
-       const int buffer_size = 1024;
-       int i;
-       uint32_t nBytes;
-       int retval = ERROR_OK;
-
-       if (bank->target->state != TARGET_HALTED)
-       {
-               LOG_ERROR("Target not halted");
-               return ERROR_TARGET_NOT_HALTED;
-       }
-
-       uint8_t *buffer = malloc(buffer_size);
-
-       for (i = 0; i < bank->num_sectors; i++)
-       {
-               uint32_t j;
-               bank->sectors[i].is_erased = 1;
-
-               for (j = 0; j < bank->sectors[i].size; j += buffer_size)
-               {
-                       uint32_t chunk;
-                       chunk = buffer_size;
-                       if (chunk > (j - bank->sectors[i].size))
-                       {
-                               chunk = (j - bank->sectors[i].size);
-                       }
-
-                       retval = target_read_memory(target, bank->base + bank->sectors[i].offset + j, 4, chunk/4, buffer);
-                       if (retval != ERROR_OK)
-                       {
-                               goto done;
-                       }
-
-                       for (nBytes = 0; nBytes < chunk; nBytes++)
-                       {
-                               if (buffer[nBytes] != 0xFF)
-                               {
-                                       bank->sectors[i].is_erased = 0;
-                                       break;
-                               }
-                       }
-               }
-       }
-
-       done:
-       free(buffer);
-
-       return retval;
-}
-
-int default_flash_blank_check(struct flash_bank *bank)
-{
-       struct target *target = bank->target;
-       int i;
-       int retval;
-       int fast_check = 0;
-       uint32_t blank;
-
-       if (bank->target->state != TARGET_HALTED)
-       {
-               LOG_ERROR("Target not halted");
-               return ERROR_TARGET_NOT_HALTED;
-       }
-
-       for (i = 0; i < bank->num_sectors; i++)
-       {
-               uint32_t address = bank->base + bank->sectors[i].offset;
-               uint32_t size = bank->sectors[i].size;
-
-               if ((retval = target_blank_check_memory(target, address, size, &blank)) != ERROR_OK)
-               {
-                       fast_check = 0;
-                       break;
-               }
-               if (blank == 0xFF)
-                       bank->sectors[i].is_erased = 1;
-               else
-                       bank->sectors[i].is_erased = 0;
-               fast_check = 1;
-       }
-
-       if (!fast_check)
-       {
-               LOG_USER("Running slow fallback erase check - add working memory");
-               return default_flash_mem_blank_check(bank);
-       }
-
-       return ERROR_OK;
-}
index 0fff8efc7e1361fefbdd2469203227cbacd2c594..c2ea134a393609371be6bfb915476481db8cd24f 100644 (file)
@@ -1,4 +1,7 @@
 /***************************************************************************
+ *   Copyright (C) 2005 by Dominic Rath <Dominic.Rath@gmx.de>              *
+ *   Copyright (C) 2007,2008 Øyvind Harboe <oyvind.harboe@zylin.com>       *
+ *   Copyright (C) 2008 by Spencer Oliver <spen@spen-soft.co.uk>           *
  *   Copyright (C) 2009 Zachary T Welch <zw@superlucidity.net>             *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
-#include <flash/flash.h>
+#include <flash/common.h>
+#include <flash/nor/core.h>
 #include <flash/nor/imp.h>
 #include <target/image.h>
 
-// in flash.c, to be moved here
-extern struct flash_bank *flash_banks;
+
+struct flash_bank *flash_banks;
 
 int flash_driver_erase(struct flash_bank *bank, int first, int last)
 {
@@ -68,7 +72,6 @@ int flash_driver_write(struct flash_bank *bank,
        return retval;
 }
 
-
 void flash_bank_add(struct flash_bank *bank)
 {
        /* put flash bank in linked list */
@@ -96,6 +99,186 @@ struct flash_bank *flash_bank_list(void)
        return flash_banks;
 }
 
+struct flash_bank *get_flash_bank_by_num_noprobe(int num)
+{
+       struct flash_bank *p;
+       int i = 0;
+
+       for (p = flash_banks; p; p = p->next)
+       {
+               if (i++ == num)
+               {
+                       return p;
+               }
+       }
+       LOG_ERROR("flash bank %d does not exist", num);
+       return NULL;
+}
+
+int flash_get_bank_count(void)
+{
+       struct flash_bank *p;
+       int i = 0;
+       for (p = flash_banks; p; p = p->next)
+       {
+               i++;
+       }
+       return i;
+}
+
+struct flash_bank *get_flash_bank_by_name(const char *name)
+{
+       unsigned requested = get_flash_name_index(name);
+       unsigned found = 0;
+
+       struct flash_bank *bank;
+       for (bank = flash_banks; NULL != bank; bank = bank->next)
+       {
+               if (strcmp(bank->name, name) == 0)
+                       return bank;
+               if (!flash_driver_name_matches(bank->driver->name, name))
+                       continue;
+               if (++found < requested)
+                       continue;
+               return bank;
+       }
+       return NULL;
+}
+
+struct flash_bank *get_flash_bank_by_num(int num)
+{
+       struct flash_bank *p = get_flash_bank_by_num_noprobe(num);
+       int retval;
+
+       if (p == NULL)
+               return NULL;
+
+       retval = p->driver->auto_probe(p);
+
+       if (retval != ERROR_OK)
+       {
+               LOG_ERROR("auto_probe failed %d\n", retval);
+               return NULL;
+       }
+       return p;
+}
+
+/* lookup flash bank by address */
+struct flash_bank *get_flash_bank_by_addr(struct target *target, uint32_t addr)
+{
+       struct flash_bank *c;
+
+       /* cycle through bank list */
+       for (c = flash_banks; c; c = c->next)
+       {
+               int retval;
+               retval = c->driver->auto_probe(c);
+
+               if (retval != ERROR_OK)
+               {
+                       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 - 1)) && target == c->target)
+                       return c;
+       }
+       LOG_ERROR("No flash at address 0x%08" PRIx32 "\n", addr);
+       return NULL;
+}
+
+int default_flash_mem_blank_check(struct flash_bank *bank)
+{
+       struct target *target = bank->target;
+       const int buffer_size = 1024;
+       int i;
+       uint32_t nBytes;
+       int retval = ERROR_OK;
+
+       if (bank->target->state != TARGET_HALTED)
+       {
+               LOG_ERROR("Target not halted");
+               return ERROR_TARGET_NOT_HALTED;
+       }
+
+       uint8_t *buffer = malloc(buffer_size);
+
+       for (i = 0; i < bank->num_sectors; i++)
+       {
+               uint32_t j;
+               bank->sectors[i].is_erased = 1;
+
+               for (j = 0; j < bank->sectors[i].size; j += buffer_size)
+               {
+                       uint32_t chunk;
+                       chunk = buffer_size;
+                       if (chunk > (j - bank->sectors[i].size))
+                       {
+                               chunk = (j - bank->sectors[i].size);
+                       }
+
+                       retval = target_read_memory(target, bank->base + bank->sectors[i].offset + j, 4, chunk/4, buffer);
+                       if (retval != ERROR_OK)
+                       {
+                               goto done;
+                       }
+
+                       for (nBytes = 0; nBytes < chunk; nBytes++)
+                       {
+                               if (buffer[nBytes] != 0xFF)
+                               {
+                                       bank->sectors[i].is_erased = 0;
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       done:
+       free(buffer);
+
+       return retval;
+}
+
+int default_flash_blank_check(struct flash_bank *bank)
+{
+       struct target *target = bank->target;
+       int i;
+       int retval;
+       int fast_check = 0;
+       uint32_t blank;
+
+       if (bank->target->state != TARGET_HALTED)
+       {
+               LOG_ERROR("Target not halted");
+               return ERROR_TARGET_NOT_HALTED;
+       }
+
+       for (i = 0; i < bank->num_sectors; i++)
+       {
+               uint32_t address = bank->base + bank->sectors[i].offset;
+               uint32_t size = bank->sectors[i].size;
+
+               if ((retval = target_blank_check_memory(target, address, size, &blank)) != ERROR_OK)
+               {
+                       fast_check = 0;
+                       break;
+               }
+               if (blank == 0xFF)
+                       bank->sectors[i].is_erased = 1;
+               else
+                       bank->sectors[i].is_erased = 0;
+               fast_check = 1;
+       }
+
+       if (!fast_check)
+       {
+               LOG_USER("Running slow fallback erase check - add working memory");
+               return default_flash_mem_blank_check(bank);
+       }
+
+       return ERROR_OK;
+}
 /* erase given flash region, selects proper bank according to target and address */
 static int flash_iterate_address_range(struct target *target, uint32_t addr, uint32_t length,
                int (*callback)(struct flash_bank *bank, int first, int last))

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)