diff options
Diffstat (limited to 'common/env_nand.c')
| -rw-r--r-- | common/env_nand.c | 18 | 
1 files changed, 12 insertions, 6 deletions
| diff --git a/common/env_nand.c b/common/env_nand.c index 22e72a20b..5b69889c0 100644 --- a/common/env_nand.c +++ b/common/env_nand.c @@ -331,6 +331,7 @@ int get_nand_env_oob(nand_info_t *nand, unsigned long *result)  void env_relocate_spec(void)  {  #if !defined(ENV_IS_EMBEDDED) +	int read1_fail = 0, read2_fail = 0;  	int crc1_ok = 0, crc2_ok = 0;  	env_t *ep, *tmp_env1, *tmp_env2; @@ -342,14 +343,19 @@ void env_relocate_spec(void)  		goto done;  	} -	if (readenv(CONFIG_ENV_OFFSET, (u_char *) tmp_env1)) -		puts("No Valid Environment Area found\n"); +	read1_fail = readenv(CONFIG_ENV_OFFSET, (u_char *) tmp_env1); +	read2_fail = readenv(CONFIG_ENV_OFFSET_REDUND, (u_char *) tmp_env2); -	if (readenv(CONFIG_ENV_OFFSET_REDUND, (u_char *) tmp_env2)) -		puts("No Valid Redundant Environment Area found\n"); +	if (read1_fail && read2_fail) +		puts("*** Error - No Valid Environment Area found\n"); +	else if (read1_fail || read2_fail) +		puts("*** Warning - some problems detected " +		     "reading environment; recovered successfully\n"); -	crc1_ok = crc32(0, tmp_env1->data, ENV_SIZE) == tmp_env1->crc; -	crc2_ok = crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc; +	crc1_ok = !read1_fail && +		(crc32(0, tmp_env1->data, ENV_SIZE) == tmp_env1->crc); +	crc2_ok = !read2_fail && +		(crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc);  	if (!crc1_ok && !crc2_ok) {  		set_default_env("!bad CRC"); |