diff options
author | Tim Harvey <tharvey@gateworks.com> | 2015-05-08 14:52:09 -0700 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2015-05-27 13:35:54 -0400 |
commit | c75648d75ecd164975da08110f67d2a81302f5ac (patch) | |
tree | 707776b8ffa8d680791c28a9f4c9ef7f9aee7e29 /common | |
parent | f19f389f341f5370e7cdec8f9f345993a3c070d6 (diff) | |
download | u-boot-imx-c75648d75ecd164975da08110f67d2a81302f5ac.zip u-boot-imx-c75648d75ecd164975da08110f67d2a81302f5ac.tar.gz u-boot-imx-c75648d75ecd164975da08110f67d2a81302f5ac.tar.bz2 |
env_mmc: add error message to pass to set_default_env
Add an error message that gets passed to set_default_env() like
env_nand implements. This message is displayed to the user as the
reason for falling back to the default environment.
Signed-off-by: Tim Harvey <tharvey@gateworks.com>
Diffstat (limited to 'common')
-rw-r--r-- | common/env_mmc.c | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/common/env_mmc.c b/common/env_mmc.c index 14648e3..6c4ce2f 100644 --- a/common/env_mmc.c +++ b/common/env_mmc.c @@ -90,19 +90,18 @@ static int mmc_set_env_part(struct mmc *mmc) static inline int mmc_set_env_part(struct mmc *mmc) {return 0; }; #endif -static int init_mmc_for_env(struct mmc *mmc) +static const char *init_mmc_for_env(struct mmc *mmc) { - if (!mmc) { - puts("No MMC card found\n"); - return -1; - } + if (!mmc) + return "No MMC card found"; - if (mmc_init(mmc)) { - puts("MMC init failed\n"); - return -1; - } + if (mmc_init(mmc)) + return "MMC init failed"; + + if (mmc_set_env_part(mmc)) + return "MMC partition switch failed"; - return mmc_set_env_part(mmc); + return NULL; } static void fini_mmc_for_env(struct mmc *mmc) @@ -143,9 +142,13 @@ int saveenv(void) struct mmc *mmc = find_mmc_device(CONFIG_SYS_MMC_ENV_DEV); u32 offset; int ret, copy = 0; + const char *errmsg; - if (init_mmc_for_env(mmc)) + errmsg = init_mmc_for_env(mmc); + if (errmsg) { + printf("%s\n", errmsg); return 1; + } ret = env_export(env_new); if (ret) @@ -213,6 +216,7 @@ void env_relocate_spec(void) env_t *ep; int ret; int dev = CONFIG_SYS_MMC_ENV_DEV; + const char *errmsg = NULL; ALLOC_CACHE_ALIGN_BUFFER(env_t, tmp_env1, 1); ALLOC_CACHE_ALIGN_BUFFER(env_t, tmp_env2, 1); @@ -223,7 +227,8 @@ void env_relocate_spec(void) mmc = find_mmc_device(dev); - if (init_mmc_for_env(mmc)) { + errmsg = init_mmc_for_env(mmc); + if (errmsg) { ret = 1; goto err; } @@ -249,6 +254,7 @@ void env_relocate_spec(void) (crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc); if (!crc1_ok && !crc2_ok) { + errmsg = "!bad CRC"; ret = 1; goto fini; } else if (crc1_ok && !crc2_ok) { @@ -284,8 +290,7 @@ fini: fini_mmc_for_env(mmc); err: if (ret) - set_default_env(NULL); - + set_default_env(errmsg); #endif } #else /* ! CONFIG_ENV_OFFSET_REDUND */ @@ -297,6 +302,7 @@ void env_relocate_spec(void) u32 offset; int ret; int dev = CONFIG_SYS_MMC_ENV_DEV; + const char *errmsg; #ifdef CONFIG_SPL_BUILD dev = 0; @@ -304,7 +310,8 @@ void env_relocate_spec(void) mmc = find_mmc_device(dev); - if (init_mmc_for_env(mmc)) { + errmsg = init_mmc_for_env(mmc); + if (errmsg) { ret = 1; goto err; } @@ -315,6 +322,7 @@ void env_relocate_spec(void) } if (read_env(mmc, CONFIG_ENV_SIZE, offset, buf)) { + errmsg = "!read failed"; ret = 1; goto fini; } @@ -326,7 +334,7 @@ fini: fini_mmc_for_env(mmc); err: if (ret) - set_default_env(NULL); + set_default_env(errmsg); #endif } #endif /* CONFIG_ENV_OFFSET_REDUND */ |