+// SPDX-License-Identifier: GPL-2.0+
/*
* (C) Copyright 2000-2010
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*
* (C) Copyright 2001 Sysgo Real-Time Solutions, GmbH <www.elinos.com>
* Andreas Heppel <aheppel@sysgo.de>
- *
- * SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
if (!crc1_ok && !crc2_ok) {
gd->env_addr = 0;
- gd->env_valid = 0;
+ gd->env_valid = ENV_INVALID;
return 0;
} else if (crc1_ok && !crc2_ok) {
}
if (oob_buf[0] == ENV_OOB_MARKER) {
- *result = oob_buf[1] * mtd->erasesize;
+ *result = ovoid ob_buf[1] * mtd->erasesize;
} else if (oob_buf[0] == ENV_OOB_MARKER_OLD) {
*result = oob_buf[1];
} else {
#endif
#ifdef CONFIG_ENV_OFFSET_REDUND
-static void env_nand_load(void)
+static int env_nand_load(void)
{
-#if !defined(ENV_IS_EMBEDDED)
- int read1_fail = 0, read2_fail = 0;
+#if defined(ENV_IS_EMBEDDED)
+ return 0;
+#else
+ int read1_fail, read2_fail;
env_t *tmp_env1, *tmp_env2;
+ int ret = 0;
tmp_env1 = (env_t *)malloc(CONFIG_ENV_SIZE);
tmp_env2 = (env_t *)malloc(CONFIG_ENV_SIZE);
if (tmp_env1 == NULL || tmp_env2 == NULL) {
puts("Can't allocate buffers for environment\n");
set_default_env("!malloc() failed");
+ ret = -EIO;
goto done;
}
read1_fail = readenv(CONFIG_ENV_OFFSET, (u_char *) tmp_env1);
read2_fail = readenv(CONFIG_ENV_OFFSET_REDUND, (u_char *) tmp_env2);
- if (read1_fail && read2_fail)
- puts("*** Error - No Valid Environment Area found\n");
- else if (read1_fail || read2_fail)
- puts("*** Warning - some problems detected "
- "reading environment; recovered successfully\n");
-
- if (read1_fail && read2_fail) {
- set_default_env("!bad env area");
- goto done;
- } else if (!read1_fail && read2_fail) {
- gd->env_valid = ENV_VALID;
- env_import((char *)tmp_env1, 1);
- } else if (read1_fail && !read2_fail) {
- gd->env_valid = ENV_REDUND;
- env_import((char *)tmp_env2, 1);
- } else {
- env_import_redund((char *)tmp_env1, (char *)tmp_env2);
- }
+ ret = env_import_redund((char *)tmp_env1, read1_fail, (char *)tmp_env2,
+ read2_fail);
done:
free(tmp_env1);
free(tmp_env2);
+ return ret;
#endif /* ! ENV_IS_EMBEDDED */
}
#else /* ! CONFIG_ENV_OFFSET_REDUND */
* device i.e., nand_dev_desc + 0. This is also the behaviour using
* the new NAND code.
*/
-static void env_nand_load(void)
+static int env_nand_load(void)
{
#if !defined(ENV_IS_EMBEDDED)
int ret;
ret = readenv(CONFIG_ENV_OFFSET, (u_char *)buf);
if (ret) {
set_default_env("!readenv() failed");
- return;
+ return -EIO;
}
- env_import(buf, 1);
+ return env_import(buf, 1);
#endif /* ! ENV_IS_EMBEDDED */
+
+ return 0;
}
#endif /* CONFIG_ENV_OFFSET_REDUND */