X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=common%2Fenv_mmc.c;h=51e7707cb0f7b0bcc7ca9f377e4f42ca97255a9e;hb=1aaa7b6d14b7c2396897e2771093a1e6c2b12f65;hp=a7621a897c44f475a185547cfe051880c0847d0d;hpb=6e7b7df4df435742fcfde5f384760ae1bda2e39c;p=karo-tx-uboot.git diff --git a/common/env_mmc.c b/common/env_mmc.c index a7621a897c..51e7707cb0 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) @@ -113,7 +112,7 @@ static void fini_mmc_for_env(struct mmc *mmc) #ifdef CONFIG_SPL_BUILD dev = 0; #endif - if (CONFIG_SYS_MMC_ENV_PART != mmc->part_num) + if (mmc_get_env_part(mmc) != mmc->part_num) mmc_switch_part(dev, mmc->part_num); #endif } @@ -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 */