X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=env%2Fnand.c;h=9f3dc635cf1f0804d93f5ce0ec8748e00af92340;hb=22247c63ac4ebed8bbaafe1e717c1de7600a0883;hp=07edabab796b0d6e6ff418b3b6f93c9fe064fb23;hpb=4415f1d1f1c57d43f6bc8ff156554c2b2da45b52;p=oweals%2Fu-boot.git diff --git a/env/nand.c b/env/nand.c index 07edabab79..9f3dc635cf 100644 --- a/env/nand.c +++ b/env/nand.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * (C) Copyright 2000-2010 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. @@ -10,13 +11,12 @@ * * (C) Copyright 2001 Sysgo Real-Time Solutions, GmbH * Andreas Heppel - * - * SPDX-License-Identifier: GPL-2.0+ */ #include #include -#include +#include +#include #include #include #include @@ -27,7 +27,7 @@ #if defined(CONFIG_CMD_SAVEENV) && defined(CONFIG_CMD_NAND) && \ !defined(CONFIG_SPL_BUILD) #define CMD_SAVEENV -#elif defined(CONFIG_ENV_OFFSET_REDUND) +#elif defined(CONFIG_ENV_OFFSET_REDUND) && !defined(CONFIG_SPL_BUILD) #error CONFIG_ENV_OFFSET_REDUND must have CONFIG_CMD_SAVEENV & CONFIG_CMD_NAND #endif @@ -40,14 +40,10 @@ #define CONFIG_ENV_RANGE CONFIG_ENV_SIZE #endif -char *env_name_spec = "NAND"; - #if defined(ENV_IS_EMBEDDED) -env_t *env_ptr = &environment; +static env_t *env_ptr = &environment; #elif defined(CONFIG_NAND_ENV_DST) -env_t *env_ptr = (env_t *)CONFIG_NAND_ENV_DST; -#else /* ! ENV_IS_EMBEDDED */ -env_t *env_ptr; +static env_t *env_ptr = (env_t *)CONFIG_NAND_ENV_DST; #endif /* ENV_IS_EMBEDDED */ DECLARE_GLOBAL_DATA_PTR; @@ -64,7 +60,7 @@ DECLARE_GLOBAL_DATA_PTR; * This way the SPL loads not only the U-Boot image from NAND but * also the environment. */ -int env_init(void) +static int env_nand_init(void) { #if defined(ENV_IS_EMBEDDED) || defined(CONFIG_NAND_ENV_DST) int crc1_ok = 0, crc2_ok = 0; @@ -81,7 +77,7 @@ int env_init(void) 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) { @@ -185,7 +181,7 @@ static int erase_and_write_env(const struct nand_env_location *location, return ret; } -int saveenv(void) +static int env_nand_save(void) { int ret = 0; ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1); @@ -304,7 +300,7 @@ int get_nand_env_oob(struct mtd_info *mtd, unsigned long *result) } 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 { @@ -317,46 +313,35 @@ int get_nand_env_oob(struct mtd_info *mtd, unsigned long *result) #endif #ifdef CONFIG_ENV_OFFSET_REDUND -void env_relocate_spec(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"); + env_set_default("malloc() failed", 0); + 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 */ @@ -365,7 +350,7 @@ done: * device i.e., nand_dev_desc + 0. This is also the behaviour using * the new NAND code. */ -void env_relocate_spec(void) +static int env_nand_load(void) { #if !defined(ENV_IS_EMBEDDED) int ret; @@ -380,27 +365,30 @@ void env_relocate_spec(void) if (mtd && !get_nand_env_oob(mtd, &nand_env_oob_offset)) { printf("Found Environment offset in OOB..\n"); } else { - set_default_env("!no env offset in OOB"); + env_set_default("no env offset in OOB", 0); return; } #endif ret = readenv(CONFIG_ENV_OFFSET, (u_char *)buf); if (ret) { - set_default_env("!readenv() failed"); - return; + env_set_default("readenv() failed", 0); + return -EIO; } - env_import(buf, 1); + return env_import(buf, 1); #endif /* ! ENV_IS_EMBEDDED */ + + return 0; } #endif /* CONFIG_ENV_OFFSET_REDUND */ U_BOOT_ENV_LOCATION(nand) = { .location = ENVL_NAND, - .load = env_relocate_spec, + ENV_NAME("NAND") + .load = env_nand_load, #if defined(CMD_SAVEENV) - .save = env_save_ptr(saveenv), + .save = env_save_ptr(env_nand_save), #endif - .init = env_init, + .init = env_nand_init, };