diff options
author | Harald Welte <laforge@gnumonks.org> | 2008-07-07 15:40:39 +0800 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2008-07-10 00:28:20 +0200 |
commit | 5bb12dbd7ae03189b6c13d8737b5a1b37c3df698 (patch) | |
tree | 4e761b4b8bcf58c14e331640242cb9ed12ceb91d | |
parent | c3bf1ad7baa1b0dd989dedc260b7098b6089ae05 (diff) | |
download | u-boot-imx-5bb12dbd7ae03189b6c13d8737b5a1b37c3df698.zip u-boot-imx-5bb12dbd7ae03189b6c13d8737b5a1b37c3df698.tar.gz u-boot-imx-5bb12dbd7ae03189b6c13d8737b5a1b37c3df698.tar.bz2 |
Remove code duplication for setting the default environment
common/env_common.c (default_env): new function that resets the environment to
the default value
common/env_common.c (env_relocate): use default_env instead of own copy
common/env_nand.c (env_relocate_spec): use default_env instead of own copy
include/environment.h: added default_env prototype
Signed-off-by: Werner Almesberger <werner@openmoko.org>
Signed-off-by: Harald Welte <laforge@openmoko.org>
-rw-r--r-- | common/env_common.c | 34 | ||||
-rw-r--r-- | common/env_nand.c | 14 | ||||
-rw-r--r-- | include/environment.h | 3 |
3 files changed, 22 insertions, 29 deletions
diff --git a/common/env_common.c b/common/env_common.c index 5ac14e8..d51c211 100644 --- a/common/env_common.c +++ b/common/env_common.c @@ -204,6 +204,23 @@ uchar *env_get_addr (int index) } } +void set_default_env(void) +{ + if (sizeof(default_environment) > ENV_SIZE) { + puts ("*** Error - default environment is too large\n\n"); + return; + } + + memset(env_ptr, 0, sizeof(env_t)); + memcpy(env_ptr->data, default_environment, + sizeof(default_environment)); +#ifdef CFG_REDUNDAND_ENVIRONMENT + env_ptr->flags = 0xFF; +#endif + env_crc_update (); + gd->env_valid = 1; +} + void env_relocate (void) { DEBUGF ("%s[%d] offset = 0x%lx\n", __FUNCTION__,__LINE__, @@ -235,22 +252,7 @@ void env_relocate (void) puts ("*** Warning - bad CRC, using default environment\n\n"); show_boot_progress (-60); #endif - - if (sizeof(default_environment) > ENV_SIZE) - { - puts ("*** Error - default environment is too large\n\n"); - return; - } - - memset (env_ptr, 0, sizeof(env_t)); - memcpy (env_ptr->data, - default_environment, - sizeof(default_environment)); -#ifdef CFG_REDUNDAND_ENVIRONMENT - env_ptr->flags = 0xFF; -#endif - env_crc_update (); - gd->env_valid = 1; + set_default_env(); } else { env_relocate_spec (); diff --git a/common/env_nand.c b/common/env_nand.c index 8954017..3890b84 100644 --- a/common/env_nand.c +++ b/common/env_nand.c @@ -363,19 +363,7 @@ void env_relocate_spec (void) static void use_default() { puts ("*** Warning - bad CRC or NAND, using default environment\n\n"); - - if (default_environment_size > CFG_ENV_SIZE){ - puts ("*** Error - default environment is too large\n\n"); - return; - } - - memset (env_ptr, 0, sizeof(env_t)); - memcpy (env_ptr->data, - default_environment, - default_environment_size); - env_ptr->crc = crc32(0, env_ptr->data, ENV_SIZE); - gd->env_valid = 1; - + set_default_env(); } #endif diff --git a/include/environment.h b/include/environment.h index dcb7c5a..481ea73 100644 --- a/include/environment.h +++ b/include/environment.h @@ -117,4 +117,7 @@ unsigned char env_get_char_memory (int index); /* Function that updates CRC of the enironment */ void env_crc_update (void); +/* [re]set to the default environment */ +void set_default_env(void); + #endif /* _ENVIRONMENT_H_ */ |