diff --git a/common/env_flash.c b/common/env_flash.c
index e770ee6..a99f850 100644
--- a/common/env_flash.c
+++ b/common/env_flash.c
@@ -39,14 +39,15 @@
 #if defined(CONFIG_CMD_SAVEENV) && defined(CONFIG_CMD_FLASH)
 #define CMD_SAVEENV
 #elif defined(CONFIG_ENV_ADDR_REDUND)
-#error Cannot use CONFIG_ENV_ADDR_REDUND without CONFIG_CMD_SAVEENV & CONFIG_CMD_FLASH
+#error CONFIG_ENV_ADDR_REDUND must have CONFIG_CMD_SAVEENV & CONFIG_CMD_FLASH
 #endif
 
-#if defined(CONFIG_ENV_SIZE_REDUND) && (CONFIG_ENV_SIZE_REDUND < CONFIG_ENV_SIZE)
+#if defined(CONFIG_ENV_SIZE_REDUND) &&	\
+	(CONFIG_ENV_SIZE_REDUND < CONFIG_ENV_SIZE)
 #error CONFIG_ENV_SIZE_REDUND should not be less then CONFIG_ENV_SIZE
 #endif
 
-char * env_name_spec = "Flash";
+char *env_name_spec = "Flash";
 
 #ifdef ENV_IS_EMBEDDED
 env_t *env_ptr = &environment;
@@ -57,7 +58,6 @@
 
 env_t *env_ptr = (env_t *)CONFIG_ENV_ADDR;
 static env_t *flash_addr = (env_t *)CONFIG_ENV_ADDR;
-
 #endif /* ENV_IS_EMBEDDED */
 
 #if defined(CMD_SAVEENV) || defined(CONFIG_ENV_ADDR_REDUND)
@@ -75,12 +75,11 @@
 
 uchar env_get_char_spec(int index)
 {
-	return (*((uchar *)(gd->env_addr + index)));
+	return *((uchar *)(gd->env_addr + index));
 }
 
 #ifdef CONFIG_ENV_ADDR_REDUND
-
-int  env_init(void)
+int env_init(void)
 {
 	int crc1_ok = 0, crc2_ok = 0;
 
@@ -91,33 +90,34 @@
 	ulong addr1 = (ulong)&(flash_addr->data);
 	ulong addr2 = (ulong)&(flash_addr_new->data);
 
-	crc1_ok = (crc32(0, flash_addr->data, ENV_SIZE) == flash_addr->crc);
-	crc2_ok = (crc32(0, flash_addr_new->data, ENV_SIZE) == flash_addr_new->crc);
+	crc1_ok = crc32(0, flash_addr->data, ENV_SIZE) == flash_addr->crc;
+	crc2_ok =
+		crc32(0, flash_addr_new->data, ENV_SIZE) == flash_addr_new->crc;
 
-	if (crc1_ok && ! crc2_ok) {
-		gd->env_addr  = addr1;
-		gd->env_valid = 1;
-	} else if (! crc1_ok && crc2_ok) {
-		gd->env_addr  = addr2;
-		gd->env_valid = 1;
-	} else if (! crc1_ok && ! crc2_ok) {
-		gd->env_addr  = addr_default;
-		gd->env_valid = 0;
+	if (crc1_ok && !crc2_ok) {
+		gd->env_addr	= addr1;
+		gd->env_valid	= 1;
+	} else if (!crc1_ok && crc2_ok) {
+		gd->env_addr	= addr2;
+		gd->env_valid	= 1;
+	} else if (!crc1_ok && !crc2_ok) {
+		gd->env_addr	= addr_default;
+		gd->env_valid	= 0;
 	} else if (flag1 == ACTIVE_FLAG && flag2 == OBSOLETE_FLAG) {
-		gd->env_addr  = addr1;
-		gd->env_valid = 1;
+		gd->env_addr	= addr1;
+		gd->env_valid	= 1;
 	} else if (flag1 == OBSOLETE_FLAG && flag2 == ACTIVE_FLAG) {
-		gd->env_addr  = addr2;
-		gd->env_valid = 1;
+		gd->env_addr	= addr2;
+		gd->env_valid	= 1;
 	} else if (flag1 == flag2) {
-		gd->env_addr  = addr1;
-		gd->env_valid = 2;
+		gd->env_addr	= addr1;
+		gd->env_valid	= 2;
 	} else if (flag1 == 0xFF) {
-		gd->env_addr  = addr1;
-		gd->env_valid = 2;
+		gd->env_addr	= addr1;
+		gd->env_valid	= 2;
 	} else if (flag2 == 0xFF) {
-		gd->env_addr  = addr2;
-		gd->env_valid = 2;
+		gd->env_addr	= addr2;
+		gd->env_valid	= 2;
 	}
 
 	return 0;
@@ -128,27 +128,23 @@
 {
 	env_t	env_new;
 	ssize_t	len;
-	char	*saved_data = NULL;
-	char	*res;
-	int	rc = 1;
+	char	*res, *saved_data = NULL;
 	char	flag = OBSOLETE_FLAG, new_flag = ACTIVE_FLAG;
+	int	rc = 1;
 #if CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE
 	ulong	up_data = 0;
 #endif
 
-	debug("Protect off %08lX ... %08lX\n",
-		(ulong)flash_addr, end_addr);
+	debug("Protect off %08lX ... %08lX\n", (ulong)flash_addr, end_addr);
 
-	if (flash_sect_protect(0, (ulong)flash_addr, end_addr)) {
+	if (flash_sect_protect(0, (ulong)flash_addr, end_addr))
 		goto done;
-	}
 
 	debug("Protect off %08lX ... %08lX\n",
 		(ulong)flash_addr_new, end_addr_new);
 
-	if (flash_sect_protect(0, (ulong)flash_addr_new, end_addr_new)) {
+	if (flash_sect_protect(0, (ulong)flash_addr_new, end_addr_new))
 		goto done;
-	}
 
 	res = (char *)&env_new.data;
 	len = hexport_r(&env_htab, '\0', &res, ENV_SIZE, 0, NULL);
@@ -156,46 +152,46 @@
 		error("Cannot export environment: errno = %d\n", errno);
 		goto done;
 	}
-	env_new.crc   = crc32(0, env_new.data, ENV_SIZE);
-	env_new.flags = new_flag;
+	env_new.crc	= crc32(0, env_new.data, ENV_SIZE);
+	env_new.flags	= new_flag;
 
 #if CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE
-	up_data = (end_addr_new + 1 - ((long)flash_addr_new + CONFIG_ENV_SIZE));
+	up_data = end_addr_new + 1 - ((long)flash_addr_new + CONFIG_ENV_SIZE);
 	debug("Data to save 0x%lX\n", up_data);
 	if (up_data) {
-		if ((saved_data = malloc(up_data)) == NULL) {
+		saved_data = malloc(up_data);
+		if (saved_data == NULL) {
 			printf("Unable to save the rest of sector (%ld)\n",
 				up_data);
 			goto done;
 		}
 		memcpy(saved_data,
-			(void *)((long)flash_addr_new + CONFIG_ENV_SIZE), up_data);
+			(void *)((long)flash_addr_new + CONFIG_ENV_SIZE),
+			up_data);
 		debug("Data (start 0x%lX, len 0x%lX) saved at 0x%p\n",
 			(long)flash_addr_new + CONFIG_ENV_SIZE,
 			up_data, saved_data);
 	}
 #endif
 	puts("Erasing Flash...");
-	debug(" %08lX ... %08lX ...",
-		(ulong)flash_addr_new, end_addr_new);
+	debug(" %08lX ... %08lX ...", (ulong)flash_addr_new, end_addr_new);
 
-	if (flash_sect_erase((ulong)flash_addr_new, end_addr_new)) {
+	if (flash_sect_erase((ulong)flash_addr_new, end_addr_new))
 		goto done;
-	}
 
 	puts("Writing to Flash... ");
 	debug(" %08lX ... %08lX ...",
 		(ulong)&(flash_addr_new->data),
-		sizeof(env_ptr->data)+(ulong)&(flash_addr_new->data));
-	if ((rc = flash_write((char *)&env_new,
-			(ulong)flash_addr_new,
-			sizeof(env_new))) ||
-	    (rc = flash_write(&flag,
-			(ulong)&(flash_addr->flags),
-			sizeof(flash_addr->flags))) ) {
-		flash_perror(rc);
-		goto done;
-	}
+		sizeof(env_ptr->data) + (ulong)&(flash_addr_new->data));
+	rc = flash_write((char *)&env_new, (ulong)flash_addr_new,
+			 sizeof(env_new));
+	if (rc)
+		goto perror;
+
+	rc = flash_write(&flag, (ulong)&(flash_addr->flags),
+			 sizeof(flash_addr->flags));
+	if (rc)
+		goto perror;
 
 #if CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE
 	if (up_data) { /* restore the rest of sector */
@@ -203,16 +199,14 @@
 			(long)flash_addr_new + CONFIG_ENV_SIZE, up_data);
 		if (flash_write(saved_data,
 				(long)flash_addr_new + CONFIG_ENV_SIZE,
-				up_data)) {
-			flash_perror(rc);
-			goto done;
-		}
+				up_data))
+			goto perror;
 	}
 #endif
 	puts("done\n");
 
 	{
-		env_t * etmp = flash_addr;
+		env_t *etmp = flash_addr;
 		ulong ltmp = end_addr;
 
 		flash_addr = flash_addr_new;
@@ -223,12 +217,15 @@
 	}
 
 	rc = 0;
+	goto done;
+perror:
+	flash_perror(rc);
 done:
 	if (saved_data)
 		free(saved_data);
 	/* try to re-protect */
-	(void) flash_sect_protect(1, (ulong)flash_addr, end_addr);
-	(void) flash_sect_protect(1, (ulong)flash_addr_new, end_addr_new);
+	flash_sect_protect(1, (ulong)flash_addr, end_addr);
+	flash_sect_protect(1, (ulong)flash_addr_new, end_addr_new);
 
 	return rc;
 }
@@ -236,35 +233,34 @@
 
 #else /* ! CONFIG_ENV_ADDR_REDUND */
 
-int  env_init(void)
+int env_init(void)
 {
 	if (crc32(0, env_ptr->data, ENV_SIZE) == env_ptr->crc) {
-		gd->env_addr  = (ulong)&(env_ptr->data);
-		gd->env_valid = 1;
-		return(0);
+		gd->env_addr	= (ulong)&(env_ptr->data);
+		gd->env_valid	= 1;
+		return 0;
 	}
 
-	gd->env_addr  = (ulong)&default_environment[0];
-	gd->env_valid = 0;
+	gd->env_addr	= (ulong)&default_environment[0];
+	gd->env_valid	= 0;
 	return 0;
 }
 
 #ifdef CMD_SAVEENV
-
 int saveenv(void)
 {
 	env_t	env_new;
 	ssize_t	len;
 	int	rc = 1;
-	char	*res;
-	char	*saved_data = NULL;
+	char	*res, *saved_data = NULL;
 #if CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE
 	ulong	up_data = 0;
 
-	up_data = (end_addr + 1 - ((long)flash_addr + CONFIG_ENV_SIZE));
+	up_data = end_addr + 1 - ((long)flash_addr + CONFIG_ENV_SIZE);
 	debug("Data to save 0x%lx\n", up_data);
 	if (up_data) {
-		if ((saved_data = malloc(up_data)) == NULL) {
+		saved_data = malloc(up_data);
+		if (saved_data == NULL) {
 			printf("Unable to save the rest of sector (%ld)\n",
 				up_data);
 			goto done;
@@ -278,8 +274,7 @@
 	}
 #endif	/* CONFIG_ENV_SECT_SIZE */
 
-	debug("Protect off %08lX ... %08lX\n",
-		(ulong)flash_addr, end_addr);
+	debug("Protect off %08lX ... %08lX\n", (ulong)flash_addr, end_addr);
 
 	if (flash_sect_protect(0, (long)flash_addr, end_addr))
 		goto done;
@@ -298,32 +293,31 @@
 
 	puts("Writing to Flash... ");
 	rc = flash_write((char *)&env_new, (long)flash_addr, CONFIG_ENV_SIZE);
-	if (rc != 0) {
-		flash_perror(rc);
-		goto done;
-	}
+	if (rc != 0)
+		goto perror;
+
 #if CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE
 	if (up_data) {	/* restore the rest of sector */
 		debug("Restoring the rest of data to 0x%lx len 0x%lx\n",
 			(ulong)flash_addr + CONFIG_ENV_SIZE, up_data);
 		if (flash_write(saved_data,
 				(long)flash_addr + CONFIG_ENV_SIZE,
-				up_data)) {
-			flash_perror(rc);
-			goto done;
-		}
+				up_data))
+			goto perror;
 	}
 #endif
 	puts("done\n");
 	rc = 0;
+	goto done;
+perror:
+	flash_perror(rc);
 done:
 	if (saved_data)
 		free(saved_data);
 	/* try to re-protect */
-	(void) flash_sect_protect(1, (long)flash_addr, end_addr);
+	flash_sect_protect(1, (long)flash_addr, end_addr);
 	return rc;
 }
-
 #endif /* CMD_SAVEENV */
 
 #endif /* CONFIG_ENV_ADDR_REDUND */
@@ -343,8 +337,7 @@
 	}
 
 	if (flash_addr_new->flags != OBSOLETE_FLAG &&
-	    crc32(0, flash_addr_new->data, ENV_SIZE) ==
-	    flash_addr_new->crc) {
+	    crc32(0, flash_addr_new->data, ENV_SIZE) == flash_addr_new->crc) {
 		char flag = OBSOLETE_FLAG;
 
 		gd->env_valid = 2;
@@ -368,8 +361,8 @@
 	}
 
 	if (gd->env_valid == 2)
-		puts ("*** Warning - some problems detected "
-		      "reading environment; recovered successfully\n\n");
+		puts("*** Warning - some problems detected "
+		     "reading environment; recovered successfully\n\n");
 #endif /* CONFIG_ENV_ADDR_REDUND */
 
 	env_import((char *)flash_addr, 1);
