]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/cmd_nvedit.c
mpc83xx: wait till UPM completes the write to array
[karo-tx-uboot.git] / common / cmd_nvedit.c
index de5a5148f69bda90b173a2910a60baeae62615c8..637d6c948d5f26bde36e00010a62b8014c3ee1fd 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#if !defined(CFG_ENV_IS_IN_NVRAM)      && \
-    !defined(CFG_ENV_IS_IN_EEPROM)     && \
-    !defined(CFG_ENV_IS_IN_FLASH)      && \
-    !defined(CFG_ENV_IS_IN_DATAFLASH)  && \
-    !defined(CFG_ENV_IS_IN_NAND)       && \
-    !defined(CFG_ENV_IS_NOWHERE)
-# error Define one of CFG_ENV_IS_IN_{NVRAM|EEPROM|FLASH|DATAFLASH|NOWHERE}
+#if !defined(CONFIG_ENV_IS_IN_NVRAM)   && \
+    !defined(CONFIG_ENV_IS_IN_EEPROM)  && \
+    !defined(CONFIG_ENV_IS_IN_FLASH)   && \
+    !defined(CONFIG_ENV_IS_IN_DATAFLASH)       && \
+    !defined(CONFIG_ENV_IS_IN_NAND)    && \
+    !defined(CONFIG_ENV_IS_IN_ONENAND) && \
+    !defined(CONFIG_ENV_IS_IN_SPI_FLASH)       && \
+    !defined(CONFIG_ENV_IS_NOWHERE)
+# error Define one of CONFIG_ENV_IS_IN_{NVRAM|EEPROM|FLASH|DATAFLASH|ONENAND|SPI_FLASH|NOWHERE}
 #endif
 
 #define XMK_STR(x)     #x
@@ -67,21 +69,6 @@ DECLARE_GLOBAL_DATA_PTR;
 /************************************************************************
 ************************************************************************/
 
-/* Function that returns a character from the environment */
-extern uchar (*env_get_char)(int);
-
-/* Function that returns a pointer to a value from the environment */
-/* (Only memory version supported / needed). */
-extern uchar *env_get_addr(int);
-
-/* Function that updates CRC of the enironment */
-extern void env_crc_update (void);
-
-/************************************************************************
-************************************************************************/
-
-static int envmatch (uchar *, int);
-
 /*
  * Table with supported baudrates (defined in config_xyz.h)
  */
@@ -112,7 +99,8 @@ int do_printenv (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                        }
                }
 
-               printf("\nEnvironment size: %d/%d bytes\n", i, ENV_SIZE);
+               printf("\nEnvironment size: %d/%ld bytes\n",
+                       i, (ulong)ENV_SIZE);
 
                return 0;
        }
@@ -193,7 +181,13 @@ int _do_setenv (int flag, int argc, char *argv[])
                 * Ethernet Address and serial# can be set only once,
                 * ver is readonly.
                 */
-               if ( (strcmp (name, "serial#") == 0) ||
+               if (
+#ifdef CONFIG_HAS_UID
+               /* Allow serial# forced overwrite with 0xdeaf4add flag */
+                   ((strcmp (name, "serial#") == 0) && (flag != 0xdeaf4add)) ||
+#else
+                   (strcmp (name, "serial#") == 0) ||
+#endif
                    ((strcmp (name, "ethaddr") == 0)
 #if defined(CONFIG_OVERWRITE_ETHADDR_ONCE) && defined(CONFIG_ETHADDR)
                     && (strcmp ((char *)env_get_addr(oldval),MK_STR(CONFIG_ETHADDR)) != 0)
@@ -388,16 +382,24 @@ int _do_setenv (int flag, int argc, char *argv[])
        return 0;
 }
 
-void setenv (char *varname, char *varvalue)
+int setenv (char *varname, char *varvalue)
 {
        char *argv[4] = { "setenv", varname, varvalue, NULL };
        if (varvalue == NULL)
-               _do_setenv (0, 2, argv);
+               return _do_setenv (0, 2, argv);
        else
-               _do_setenv (0, 3, argv);
+               return _do_setenv (0, 3, argv);
+}
+
+#ifdef CONFIG_HAS_UID
+void forceenv (char *varname, char *varvalue)
+{
+       char *argv[4] = { "forceenv", varname, varvalue, NULL };
+       _do_setenv (0xdeaf4add, 3, argv);
 }
+#endif
 
-int do_setenv ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+int do_setenv (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
        if (argc < 2) {
                printf ("Usage:\n%s\n", cmdtp->usage);
@@ -501,7 +503,7 @@ char *getenv (char *name)
                int val;
 
                for (nxt=i; env_get_char(nxt) != '\0'; ++nxt) {
-                       if (nxt >= CFG_ENV_SIZE) {
+                       if (nxt >= CONFIG_ENV_SIZE) {
                                return (NULL);
                        }
                }
@@ -521,7 +523,7 @@ int getenv_r (char *name, char *buf, unsigned len)
                int val, n;
 
                for (nxt=i; env_get_char(nxt) != '\0'; ++nxt) {
-                       if (nxt >= CFG_ENV_SIZE) {
+                       if (nxt >= CONFIG_ENV_SIZE) {
                                return (-1);
                        }
                }
@@ -538,9 +540,11 @@ int getenv_r (char *name, char *buf, unsigned len)
        return (-1);
 }
 
-#if defined(CFG_ENV_IS_IN_NVRAM) || defined(CFG_ENV_IS_IN_EEPROM) \
+#if ((defined(CONFIG_ENV_IS_IN_NVRAM) || defined(CONFIG_ENV_IS_IN_EEPROM) \
     || (defined(CONFIG_CMD_ENV) && defined(CONFIG_CMD_FLASH)) \
-    || (defined(CONFIG_CMD_ENV) && defined(CONFIG_CMD_NAND))
+    || (defined(CONFIG_CMD_ENV) && defined(CONFIG_CMD_NAND)) \
+    || (defined(CONFIG_CMD_ENV) && defined(CONFIG_CMD_ONENAND))) \
+    && !defined(CONFIG_ENV_IS_NOWHERE))
 int do_saveenv (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
        extern char * env_name_spec;
@@ -561,8 +565,7 @@ int do_saveenv (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
  * If the names match, return the index for the value2, else NULL.
  */
 
-static int
-envmatch (uchar *s1, int i2)
+int envmatch (uchar *s1, int i2)
 {
 
        while (*s1 == env_get_char(i2++))
@@ -593,9 +596,11 @@ U_BOOT_CMD(
        "    - delete environment variable 'name'\n"
 );
 
-#if defined(CFG_ENV_IS_IN_NVRAM) || defined(CFG_ENV_IS_IN_EEPROM) \
+#if ((defined(CONFIG_ENV_IS_IN_NVRAM) || defined(CONFIG_ENV_IS_IN_EEPROM) \
     || (defined(CONFIG_CMD_ENV) && defined(CONFIG_CMD_FLASH)) \
-    || (defined(CONFIG_CMD_ENV) && defined(CONFIG_CMD_NAND))
+    || (defined(CONFIG_CMD_ENV) && defined(CONFIG_CMD_NAND)) \
+    || (defined(CONFIG_CMD_ENV) && defined(CONFIG_CMD_ONENAND))) \
+    && !defined(CONFIG_ENV_IS_NOWHERE))
 U_BOOT_CMD(
        saveenv, 1, 0,  do_saveenv,
        "saveenv - save environment variables to persistent storage\n",