Merge "Change flash name."
diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
index 340c73e..a34f20f 100755
--- a/common/cmd_nvedit.c
+++ b/common/cmd_nvedit.c
@@ -188,15 +188,10 @@
 #ifndef CONFIG_ENV_OVERWRITE
 
 		/*
-		 * Ethernet Address and serial# can be set only once,
+		 * Serial# can be set only once,
 		 * ver is readonly.
 		 */
-		if ( (strcmp (name, "serial#") == 0) ||
-		    ((strcmp (name, "ethaddr") == 0)
-#if defined(CONFIG_OVERWRITE_ETHADDR_ONCE) && defined(CONFIG_ETHADDR)
-		     && (strcmp ((char *)env_get_addr(oldval),MK_STR(CONFIG_ETHADDR)) != 0)
-#endif	/* CONFIG_OVERWRITE_ETHADDR_ONCE && CONFIG_ETHADDR */
-		    ) ) {
+		if ((strcmp (name, "serial#") == 0)) {
 			printf ("Can't overwrite \"%s\"\n", name);
 			return 1;
 		}
@@ -401,6 +396,7 @@
 	if (argc >= 2 && is_sysvar_shared(argv[1])) {
 		printf("ERR: %s is a sysvar-shared variable.\n"
 			"     Please use setvar/sysvar instead\n", argv[1]);
+		return 1;
 	}
 
 	return _do_setenv (flag, argc, argv);
diff --git a/common/cmd_sysvar.c b/common/cmd_sysvar.c
index 4eacbb5..49bab01 100644
--- a/common/cmd_sysvar.c
+++ b/common/cmd_sysvar.c
@@ -20,10 +20,6 @@
   const char *uboot_name;
 };
 
-struct sysvar_uboot_map {
-  struct sysvar_uboot *map;
-};
-
 static const struct sysvar_uboot su_mappings[] = {
   {
     .sysvar_name = ACTIVATED_KERNEL_NAME_SV,
@@ -35,10 +31,6 @@
   },
 };
 
-static const struct sysvar_uboot_map su_map = {
-  .map = su_mappings,
-};
-
 // Some bit twiddling for erasing the correct sector on Atheros flash.  This
 // only erases multiples of 64kb.
 #define __SYSVAR_ERASE_SECTOR(x) (((x) >> 16) & 0xff)
@@ -693,9 +685,9 @@
 
 int is_sysvar_shared(const char *var) {
   int i;
-  for (i = 0; i < ARRAY_SIZE(su_map.map); ++i) {
-    if (strcmp(var, su_map.map[i].uboot_name) == 0 ||
-        strcmp(var, su_map.map[i].sysvar_name) == 0) {
+  for (i = 0; i < ARRAY_SIZE(su_mappings); ++i) {
+    if (strcmp(var, su_mappings[i].uboot_name) == 0 ||
+        strcmp(var, su_mappings[i].sysvar_name) == 0) {
       return true;
     }
   }
@@ -704,9 +696,9 @@
 
 const char *get_uboot_name(const char *sysvar_name) {
   int i;
-  for (i = 0; i < ARRAY_SIZE(su_map.map); ++i) {
-    if (strcmp(sysvar_name, su_map.map[i].uboot_name) == 0) {
-      return su_map.map[i].uboot_name;
+  for (i = 0; i < ARRAY_SIZE(su_mappings); ++i) {
+    if (strcmp(sysvar_name, su_mappings[i].sysvar_name) == 0) {
+      return su_mappings[i].uboot_name;
     }
   }
   return NULL;
@@ -714,8 +706,8 @@
 
 void delete_uboot_vars(void) {
   int i;
-  for (i = 0; i < ARRAY_SIZE(su_map.map); ++i) {
-    setenv(su_map.map[i].sysvar_name, NULL);
-    setenv(su_map.map[i].uboot_name, NULL);
+  for (i = 0; i < ARRAY_SIZE(su_mappings); ++i) {
+    setenv(su_mappings[i].sysvar_name, NULL);
+    setenv(su_mappings[i].uboot_name, NULL);
   }
 }
diff --git a/common/env_common.c b/common/env_common.c
index a188fa3..2b11e73 100755
--- a/common/env_common.c
+++ b/common/env_common.c
@@ -303,3 +303,54 @@
 	return found;
 }
 #endif
+
+int env_restore_defaults(void)
+{
+	int i;
+	const uchar delim = '=';
+	const int default_env_size = sizeof(default_environment) - 1;
+	char *s;
+	uchar *key = NULL;
+	uchar *val = NULL;
+	uchar *tmp_null = NULL;
+	for (i = 0; i < default_env_size; ++i) {
+		if (key == NULL) {
+			key = default_environment + i;
+		}
+		/* If delim is encountered, we know to check for key/val. */
+		if (default_environment[i] == delim) {
+			/* Ignore empty keys. */
+			if (key == (default_environment + i)) {
+				return -1;
+			}
+			/*
+			 * Does in-place changing of null terminator to avoid
+			 * extra buffers.
+			 */
+			tmp_null = default_environment + i;
+			val = tmp_null + 1;
+			*tmp_null = '\0';
+			s = getenv(key);
+			if (!s) {
+				setenv(key, val);
+			}
+			*tmp_null = delim;
+			/*
+			 * Advances pointer until we encounter the end of the
+			 * 'val' string.
+			 */
+			for ( ; i < default_env_size; ++i) {
+				if (default_environment[i] == '\0') {
+					break;
+				}
+			}
+			key = NULL;
+		}
+	}
+	if (key != NULL && *key != '\0') {
+		printf("%s: incomplete parsing while restoring env.\n", __FILE__);
+		printf("\tPlease check default_environment var\n");
+		return -1;
+	}
+	return 0;
+}
diff --git a/common/main.c b/common/main.c
index 46b2564..80e16bb 100755
--- a/common/main.c
+++ b/common/main.c
@@ -29,6 +29,9 @@
 #include <watchdog.h>
 #include <command.h>
 
+#define XMK_STR(x)	#x
+#define MK_STR(x)	XMK_STR(x)
+
 #ifdef CONFIG_MODEM_SUPPORT
 #include <malloc.h>		/* for free() prototype */
 #endif
@@ -405,24 +408,20 @@
 	}
 	else
 #endif /* CONFIG_BOOTCOUNT_LIMIT */
-		s = getenv ("bootcmd");
-       if (!s) {
-#ifdef CONFIG_ROOTFS_FLASH
-           /* XXX if rootfs is in flash, expect uImage to be in flash */
-#ifdef CONFIG_AR7100
-           setenv ("bootcmd", "bootm 0xbf200000");
-#else
-           setenv ("bootcmd", "bootm 0xbf450000");
-#endif /* CONFIG_AR7100 */
-#else
-           setenv ("bootcmd", "tftpboot 0x8022c090 uImage; bootm 0x8022c090");
-#endif
-       }
 
 #ifdef CONFIG_DUALIMAGE_SUPPORT
 		findbdr(0);
 #endif
-		s = getenv ("bootcmd");
+
+	if (env_restore_defaults()) {
+		printf("Warning: Unable to completely restore default env.\n");
+	}
+
+	s = getenv ("bootcmd");
+	if (!s) {
+		setenv("bootcmd", CONFIG_BOOTCOMMAND);
+		s = CONFIG_BOOTCOMMAND;
+	}
 
 //	debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>");
 
diff --git a/include/common.h b/include/common.h
index a39a27c..2d7aa6c 100755
--- a/include/common.h
+++ b/include/common.h
@@ -223,6 +223,9 @@
 const char *get_uboot_name(const char *sysvar_name);
 void delete_uboot_vars(void);
 
+/* common/env_common.c */
+int env_restore_defaults(void);
+
 /* common/cmd_nvedit.c */
 int	env_init     (void);
 void	env_relocate (void);
diff --git a/include/configs/board953x.h b/include/configs/board953x.h
index 69f4fe2..dc94ede 100755
--- a/include/configs/board953x.h
+++ b/include/configs/board953x.h
@@ -194,7 +194,7 @@
 #	define ATH_F_FILE		fs_name(${bc}-nand-jffs2)
 #	define ATH_F_LEN		0x700000
 #	define ATH_F_ADDR		0x1c0000
-#	define ATH_K_FILE		vmlinux${bc}.lzma.uImage
+#	define ATH_K_FILE		kernel.img
 #	define ATH_K_ADDR		0x80000
 #	define ATH_F_CMD		nand_gen_cmd(lf, ATH_F_ADDR, ATH_F_FILE, ATH_F_LEN)
 #	define ATH_K_CMD		nand_gen_cmd(lk, ATH_K_ADDR, ATH_K_FILE, 0x140000)
@@ -205,7 +205,7 @@
 #		define ATH_F_FILE	fs_name(${bc}-jffs2)
 #		define ATH_F_LEN	$filesize
 #		define ATH_F_ADDR	0x9f010000
-#		define ATH_K_FILE	vmlinux${bc}.lzma.uImage
+#		define ATH_K_FILE	kernel.img
 #		define ATH_K_ADDR	0x9f300000
 		/*
 		 * For compressed uboot, environment sector is not used.
@@ -238,7 +238,7 @@
 #		define MTDPARTS_DEFAULT		"mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env)," ATH_ROOTFS_SIZE ",1408k(uImage)," ATH_MTDPARTS_MIB0 ",64k(ART)"
 #		define ATH_F_ADDR               0x9f050000
 # 	endif
-#		define ATH_K_FILE		vmlinux${bc}.lzma.uImage
+#		define ATH_K_FILE		kernel.img
 #	endif
 #endif /*CONFIG_MI124*/