[U-Boot] [PATCH] env_mmc: add error message to pass to set_default_env

Tim Harvey tharvey at gateworks.com
Fri May 8 23:52:09 CEST 2015


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 at gateworks.com>
---
 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 */
-- 
1.9.1



More information about the U-Boot mailing list