From c75648d75ecd164975da08110f67d2a81302f5ac Mon Sep 17 00:00:00 2001 From: Tim Harvey Date: Fri, 8 May 2015 14:52:09 -0700 Subject: 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 --- common/env_mmc.c | 40 ++++++++++++++++++++++++---------------- 1 file 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 */ -- cgit v1.1