summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLei Wen <leiwen@marvell.com>2010-10-13 11:07:21 +0800
committerWolfgang Denk <wd@denx.de>2010-10-13 22:02:32 +0200
commite79f48393dd919079b34f37957c933f8e75c164d (patch)
treefe99ef0317b9a38f4d998a69138f4995597fc553
parent1a2d9b30e31e2b7ed0acb64bfb2290911e3c9efb (diff)
downloadu-boot-imx-e79f48393dd919079b34f37957c933f8e75c164d.zip
u-boot-imx-e79f48393dd919079b34f37957c933f8e75c164d.tar.gz
u-boot-imx-e79f48393dd919079b34f37957c933f8e75c164d.tar.bz2
env_mmc: fix cannot save env issue
The env change its implementation after this log, while env mmc didn't change it immediately, which cause issue. Follow to the new style to fix it. commit ea882baf9c17cd142c99e3ff640d3ab01daa5cec Author: Wolfgang Denk <wd@denx.de> Date: Sun Jun 20 23:33:59 2010 +0200 New implementation for internal handling of environment variables. Signed-off-by: Lei Wen <leiwen@marvell.com>
-rw-r--r--common/env_mmc.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/common/env_mmc.c b/common/env_mmc.c
index cc288d4..dcab994 100644
--- a/common/env_mmc.c
+++ b/common/env_mmc.c
@@ -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[];
@@ -96,13 +97,23 @@ inline int write_env(struct mmc *mmc, unsigned long size,
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;
}