]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/cmd_flash.c
dm: Adjust lists_bind_fdt() to return the bound device
[karo-tx-uboot.git] / common / cmd_flash.c
index 93eefa96432998d894ed5b439fc844c51c5680fe..85d18bb2c53a4787af348147fe2dd1a4b7242c42 100644 (file)
@@ -2,23 +2,7 @@
  * (C) Copyright 2000
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * 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
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 /*
 #include <dataflash.h>
 #endif
 
-#if defined(CONFIG_CMD_JFFS2) && defined(CONFIG_JFFS2_CMDLINE)
+#if defined(CONFIG_CMD_MTDPARTS)
 #include <jffs2/jffs2.h>
 
-/* parition handling routines */
+/* partition handling routines */
 int mtdparts_init(void);
-int id_parse(const char *id, const char **ret_id, u8 *dev_type, u8 *dev_num);
+int mtd_id_parse(const char *id, const char **ret_id, u8 *dev_type, u8 *dev_num);
 int find_dev_and_part(const char *id, struct mtd_device **dev,
                u8 *part_num, struct part_info **part);
 #endif
 
 #ifndef CONFIG_SYS_NO_FLASH
+#include <flash.h>
+#include <mtd/cfi_flash.h>
 extern flash_info_t flash_info[];      /* info for FLASH chips */
 
 /*
@@ -137,7 +123,7 @@ int flash_sect_roundb (ulong *addr)
                } /* bank */
        }
        if (!found) {
-               /* error, addres not in flash */
+               /* error, address not in flash */
                printf("Error: end address (0x%08lx) not in flash!\n", *addr);
                return 1;
        }
@@ -287,7 +273,7 @@ flash_fill_sect_ranges (ulong addr_first, ulong addr_last,
 }
 #endif /* CONFIG_SYS_NO_FLASH */
 
-int do_flinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+static int do_flinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 #ifndef CONFIG_SYS_NO_FLASH
        ulong bank;
@@ -319,23 +305,21 @@ int do_flinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        return 0;
 }
 
-int do_flerase (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+static int do_flerase(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 #ifndef CONFIG_SYS_NO_FLASH
-       flash_info_t *info;
+       flash_info_t *info = NULL;
        ulong bank, addr_first, addr_last;
-       int n, sect_first, sect_last;
-#if defined(CONFIG_CMD_JFFS2) && defined(CONFIG_JFFS2_CMDLINE)
+       int n, sect_first = 0, sect_last = 0;
+#if defined(CONFIG_CMD_MTDPARTS)
        struct mtd_device *dev;
        struct part_info *part;
        u8 dev_type, dev_num, pnum;
 #endif
        int rcode = 0;
 
-       if (argc < 2) {
-               printf ("Usage:\n%s\n", cmdtp->usage);
-               return 1;
-       }
+       if (argc < 2)
+               return CMD_RET_USAGE;
 
        if (strcmp(argv[1], "all") == 0) {
                for (bank=1; bank<=CONFIG_SYS_MAX_FLASH_BANKS; ++bank) {
@@ -357,9 +341,9 @@ int do_flerase (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                return rcode;
        }
 
-#if defined(CONFIG_CMD_JFFS2) && defined(CONFIG_JFFS2_CMDLINE)
+#if defined(CONFIG_CMD_MTDPARTS)
        /* erase <part-id> - erase partition */
-       if ((argc == 2) && (id_parse(argv[1], NULL, &dev_type, &dev_num) == 0)) {
+       if ((argc == 2) && (mtd_id_parse(argv[1], NULL, &dev_type, &dev_num) == 0)) {
                mtdparts_init();
                if (find_dev_and_part(argv[1], &dev, &pnum, &part) == 0) {
                        if (dev->id->type == MTD_DEV_TYPE_NOR) {
@@ -368,7 +352,7 @@ int do_flerase (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                                addr_first = part->offset + info->start[0];
                                addr_last = addr_first + part->size - 1;
 
-                               printf ("Erase Flash Parition %s, "
+                               printf ("Erase Flash Partition %s, "
                                                "bank %ld, 0x%08lx - 0x%08lx ",
                                                argv[1], bank, addr_first,
                                                addr_last);
@@ -383,10 +367,8 @@ int do_flerase (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        }
 #endif
 
-       if (argc != 3) {
-               printf ("Usage:\n%s\n", cmdtp->usage);
-               return 1;
-       }
+       if (argc != 3)
+               return CMD_RET_USAGE;
 
        if (strcmp(argv[1], "bank") == 0) {
                bank = simple_strtoul(argv[2], NULL, 16);
@@ -406,10 +388,8 @@ int do_flerase (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                return 1;
        }
 
-       if (addr_first >= addr_last) {
-               printf ("Usage:\n%s\n", cmdtp->usage);
-               return 1;
-       }
+       if (addr_first >= addr_last)
+               return CMD_RET_USAGE;
 
        rcode = flash_sect_erase(addr_first, addr_last);
        return rcode;
@@ -423,11 +403,7 @@ int flash_sect_erase (ulong addr_first, ulong addr_last)
 {
        flash_info_t *info;
        ulong bank;
-#ifdef CONFIG_SYS_MAX_FLASH_BANKS_DETECT
-       int s_first[CONFIG_SYS_MAX_FLASH_BANKS_DETECT], s_last[CONFIG_SYS_MAX_FLASH_BANKS_DETECT];
-#else
        int s_first[CONFIG_SYS_MAX_FLASH_BANKS], s_last[CONFIG_SYS_MAX_FLASH_BANKS];
-#endif
        int erased = 0;
        int planned;
        int rcode = 0;
@@ -451,7 +427,8 @@ int flash_sect_erase (ulong addr_first, ulong addr_last)
                                rcode = flash_erase (info, s_first[bank], s_last[bank]);
                        }
                }
-               printf ("Erased %d sectors\n", erased);
+               if (rcode == 0)
+                       printf("Erased %d sectors\n", erased);
        } else if (rcode == 0) {
                puts ("Error: start and/or end address"
                        " not on sector boundary\n");
@@ -461,38 +438,38 @@ int flash_sect_erase (ulong addr_first, ulong addr_last)
 }
 #endif /* CONFIG_SYS_NO_FLASH */
 
-int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+static int do_protect(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
+       int rcode = 0;
 #ifndef CONFIG_SYS_NO_FLASH
-       flash_info_t *info;
+       flash_info_t *info = NULL;
        ulong bank;
-       int i, n, sect_first, sect_last;
-#endif /* CONFIG_SYS_NO_FLASH */
-       ulong addr_first, addr_last;
-       int p;
-#if defined(CONFIG_CMD_JFFS2) && defined(CONFIG_JFFS2_CMDLINE)
+       int i, n, sect_first = 0, sect_last = 0;
+#if defined(CONFIG_CMD_MTDPARTS)
        struct mtd_device *dev;
        struct part_info *part;
        u8 dev_type, dev_num, pnum;
 #endif
-       int rcode = 0;
+#endif /* CONFIG_SYS_NO_FLASH */
 #ifdef CONFIG_HAS_DATAFLASH
        int status;
 #endif
+#if !defined(CONFIG_SYS_NO_FLASH) || defined(CONFIG_HAS_DATAFLASH)
+       int p;
+       ulong addr_first, addr_last;
+#endif
 
-       if (argc < 3) {
-               printf ("Usage:\n%s\n", cmdtp->usage);
-               return 1;
-       }
+       if (argc < 3)
+               return CMD_RET_USAGE;
 
-       if (strcmp(argv[1], "off") == 0) {
+#if !defined(CONFIG_SYS_NO_FLASH) || defined(CONFIG_HAS_DATAFLASH)
+       if (strcmp(argv[1], "off") == 0)
                p = 0;
-       } else if (strcmp(argv[1], "on") == 0) {
+       else if (strcmp(argv[1], "on") == 0)
                p = 1;
-       } else {
-               printf ("Usage:\n%s\n", cmdtp->usage);
-               return 1;
-       }
+       else
+               return CMD_RET_USAGE;
+#endif
 
 #ifdef CONFIG_HAS_DATAFLASH
        if ((strcmp(argv[2], "all") != 0) && (strcmp(argv[2], "bank") != 0)) {
@@ -563,9 +540,9 @@ int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                return rcode;
        }
 
-#if defined(CONFIG_CMD_JFFS2) && defined(CONFIG_JFFS2_CMDLINE)
+#if defined(CONFIG_CMD_MTDPARTS)
        /* protect on/off <part-id> */
-       if ((argc == 3) && (id_parse(argv[2], NULL, &dev_type, &dev_num) == 0)) {
+       if ((argc == 3) && (mtd_id_parse(argv[2], NULL, &dev_type, &dev_num) == 0)) {
                mtdparts_init();
                if (find_dev_and_part(argv[2], &dev, &pnum, &part) == 0) {
                        if (dev->id->type == MTD_DEV_TYPE_NOR) {
@@ -574,7 +551,7 @@ int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                                addr_first = part->offset + info->start[0];
                                addr_last = addr_first + part->size - 1;
 
-                               printf ("%sProtect Flash Parition %s, "
+                               printf ("%sProtect Flash Partition %s, "
                                                "bank %ld, 0x%08lx - 0x%08lx\n",
                                                p ? "" : "Un", argv[1],
                                                bank, addr_first, addr_last);
@@ -590,10 +567,8 @@ int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        }
 #endif
 
-       if (argc != 4) {
-               printf ("Usage:\n%s\n", cmdtp->usage);
-               return 1;
-       }
+       if (argc != 4)
+               return CMD_RET_USAGE;
 
        if (strcmp(argv[2], "bank") == 0) {
                bank = simple_strtoul(argv[3], NULL, 16);
@@ -632,10 +607,9 @@ int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                return 1;
        }
 
-       if (addr_first >= addr_last) {
-               printf ("Usage:\n%s\n", cmdtp->usage);
-               return 1;
-       }
+       if (addr_first >= addr_last)
+               return CMD_RET_USAGE;
+
        rcode = flash_sect_protect (p, addr_first, addr_last);
 #endif /* CONFIG_SYS_NO_FLASH */
        return rcode;
@@ -646,11 +620,7 @@ int flash_sect_protect (int p, ulong addr_first, ulong addr_last)
 {
        flash_info_t *info;
        ulong bank;
-#ifdef CONFIG_SYS_MAX_FLASH_BANKS_DETECT
-       int s_first[CONFIG_SYS_MAX_FLASH_BANKS_DETECT], s_last[CONFIG_SYS_MAX_FLASH_BANKS_DETECT];
-#else
        int s_first[CONFIG_SYS_MAX_FLASH_BANKS], s_last[CONFIG_SYS_MAX_FLASH_BANKS];
-#endif
        int protected, i;
        int planned;
        int rcode;
@@ -698,7 +668,7 @@ int flash_sect_protect (int p, ulong addr_first, ulong addr_last)
 
 
 /**************************************************/
-#if defined(CONFIG_CMD_JFFS2) && defined(CONFIG_JFFS2_CMDLINE)
+#if defined(CONFIG_CMD_MTDPARTS)
 # define TMP_ERASE     "erase <part-id>\n    - erase partition\n"
 # define TMP_PROT_ON   "protect on <part-id>\n    - protect partition\n"
 # define TMP_PROT_OFF  "protect off <part-id>\n    - make partition writable\n"
@@ -710,14 +680,14 @@ int flash_sect_protect (int p, ulong addr_first, ulong addr_last)
 
 U_BOOT_CMD(
        flinfo,    2,    1,    do_flinfo,
-       "flinfo  - print FLASH memory information\n",
+       "print FLASH memory information",
        "\n    - print information for all FLASH memory banks\n"
-       "flinfo N\n    - print information for FLASH memory bank # N\n"
+       "flinfo N\n    - print information for FLASH memory bank # N"
 );
 
 U_BOOT_CMD(
        erase,   3,   0,  do_flerase,
-       "erase   - erase FLASH memory\n",
+       "erase FLASH memory",
        "start end\n"
        "    - erase FLASH from addr 'start' to addr 'end'\n"
        "erase start +len\n"
@@ -726,12 +696,12 @@ U_BOOT_CMD(
        "erase N:SF[-SL]\n    - erase sectors SF-SL in FLASH bank # N\n"
        "erase bank N\n    - erase FLASH bank # N\n"
        TMP_ERASE
-       "erase all\n    - erase all FLASH banks\n"
+       "erase all\n    - erase all FLASH banks"
 );
 
 U_BOOT_CMD(
        protect,  4,  0,   do_protect,
-       "protect - enable or disable FLASH write protection\n",
+       "enable or disable FLASH write protection",
        "on  start end\n"
        "    - protect FLASH from addr 'start' to addr 'end'\n"
        "protect on start +len\n"
@@ -751,7 +721,7 @@ U_BOOT_CMD(
        "    - make sectors SF-SL writable in FLASH bank # N\n"
        "protect off bank N\n    - make FLASH bank # N writable\n"
        TMP_PROT_OFF
-       "protect off all\n    - make all FLASH banks writable\n"
+       "protect off all\n    - make all FLASH banks writable"
 );
 
 #undef TMP_ERASE