Merge branch 'master' of git://git.denx.de/u-boot-arm
authorWolfgang Denk <wd@denx.de>
Sun, 17 Oct 2010 18:25:05 +0000 (20:25 +0200)
committerWolfgang Denk <wd@denx.de>
Sun, 17 Oct 2010 18:25:05 +0000 (20:25 +0200)
1  2 
common/env_mmc.c

diff --combined common/env_mmc.c
@@@ -29,7 -29,6 +29,7 @@@
  #include <linux/stddef.h>
  #include <malloc.h>
  #include <mmc.h>
 +#include <errno.h>
  
  /* references to names in env_common.c */
  extern uchar default_environment[];
@@@ -97,23 -96,13 +97,23 @@@ inline int write_env(struct mmc *mmc, u
  
  int saveenv(void)
  {
 +      env_t   env_new;
 +      ssize_t len;
 +      char    *res;
        struct mmc *mmc = find_mmc_device(CONFIG_SYS_MMC_ENV_DEV);
  
        if (init_mmc_for_env(mmc))
                return 1;
  
 +      res = (char *)&env_new.data;
 +      len = hexport('\0', &res, ENV_SIZE);
 +      if (len < 0) {
 +              error("Cannot export environment: errno = %d\n", errno);
 +              return 1;
 +      }
 +      env_new.crc   = crc32(0, env_new.data, ENV_SIZE);
        printf("Writing to MMC(%d)... ", CONFIG_SYS_MMC_ENV_DEV);
 -      if (write_env(mmc, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, env_ptr)) {
 +      if (write_env(mmc, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, (u_char *)&env_new)) {
                puts("failed\n");
                return 1;
        }
@@@ -140,18 -129,21 +140,21 @@@ inline int read_env(struct mmc *mmc, un
  void env_relocate_spec(void)
  {
  #if !defined(ENV_IS_EMBEDDED)
+        char buf[CONFIG_ENV_SIZE];
        struct mmc *mmc = find_mmc_device(CONFIG_SYS_MMC_ENV_DEV);
  
-       if (init_mmc_for_env(mmc))
+       if (init_mmc_for_env(mmc)) {
+               use_default();
                return;
+       }
  
-       if (read_env(mmc, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, env_ptr))
-               return use_default();
-       if (crc32(0, env_ptr->data, ENV_SIZE) != env_ptr->crc)
-               return use_default();
+       if (read_env(mmc, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, buf)) {
+               use_default();
+               return;
+       }
  
-       gd->env_valid = 1;
+       env_import(buf, 1);
  #endif
  }