diff options
Diffstat (limited to 'common/env_onenand.c')
| -rw-r--r-- | common/env_onenand.c | 13 | 
1 files changed, 7 insertions, 6 deletions
| diff --git a/common/env_onenand.c b/common/env_onenand.c index faa903d2f..6fd5613ee 100644 --- a/common/env_onenand.c +++ b/common/env_onenand.c @@ -42,6 +42,8 @@ char *env_name_spec = "OneNAND";  #define ONENAND_MAX_ENV_SIZE	CONFIG_ENV_SIZE  #define ONENAND_ENV_SIZE(mtd)	(ONENAND_MAX_ENV_SIZE - ENV_HEADER_SIZE) +static char env_buf[CONFIG_ENV_SIZE]; +  DECLARE_GLOBAL_DATA_PTR;  void env_relocate_spec(void) @@ -56,8 +58,7 @@ void env_relocate_spec(void)  	char *buf = (char *)&environment;  #else  	loff_t env_addr = CONFIG_ENV_ADDR; -	char onenand_env[ONENAND_MAX_ENV_SIZE]; -	char *buf = (char *)&onenand_env[0]; +	char *buf = env_buf;  #endif /* ENV_IS_EMBEDDED */  #ifndef ENV_IS_EMBEDDED @@ -81,7 +82,7 @@ void env_relocate_spec(void)  int saveenv(void)  { -	env_t	env_new; +	env_t	*env_new = env_buf;  	ssize_t	len;  	char	*res;  	struct mtd_info *mtd = &onenand_mtd; @@ -94,13 +95,13 @@ int saveenv(void)  		.callback	= NULL,  	}; -	res = (char *)&env_new.data; +	res = (char *)env_new->data;  	len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL);  	if (len < 0) {  		error("Cannot export environment: errno = %d\n", errno);  		return 1;  	} -	env_new.crc = crc32(0, env_new.data, ENV_SIZE); +	env_new->crc = crc32(0, env_new->data, ENV_SIZE);  	instr.len = CONFIG_ENV_SIZE;  #ifdef CONFIG_ENV_ADDR_FLEX @@ -119,7 +120,7 @@ int saveenv(void)  	}  	if (mtd->write(mtd, env_addr, ONENAND_MAX_ENV_SIZE, &retlen, -			(u_char *)&env_new)) { +			(u_char *)env_new)) {  		printf("OneNAND: write failed at 0x%llx\n", instr.addr);  		return 2;  	} |