X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=common%2Fenv_mmc.c;h=51e7707cb0f7b0bcc7ca9f377e4f42ca97255a9e;hb=3be064244b37ae9c29dc6d6d52c3956af365ceb3;hp=14648e37bdf284ccb683740b5ce3d05df47e3779;hpb=19345d7c9483b84578da5206b3c604b534121d88;p=karo-tx-uboot.git diff --git a/common/env_mmc.c b/common/env_mmc.c index 14648e37bd..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) @@ -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 */