X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=env%2Fflash.c;h=3198147c380834e8560347e271ef8122f74ccd92;hb=4e7413a998ba5666aa4ee0b4f49789f52b1281b1;hp=b60be57a8dd1585bcc9edb895e9d00dce1f4d789;hpb=470135be276b2d92c6da464c68839202d4ff0d08;p=oweals%2Fu-boot.git diff --git a/env/flash.c b/env/flash.c index b60be57a8d..3198147c38 100644 --- a/env/flash.c +++ b/env/flash.c @@ -1,22 +1,25 @@ +// 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 * Andreas Heppel - - * SPDX-License-Identifier: GPL-2.0+ */ /* #define DEBUG */ #include #include -#include +#include +#include +#include +#include #include #include #include #include +#include DECLARE_GLOBAL_DATA_PTR; @@ -28,11 +31,6 @@ DECLARE_GLOBAL_DATA_PTR; # endif #endif -#if defined(CONFIG_ENV_SIZE_REDUND) && \ - (CONFIG_ENV_SIZE_REDUND < CONFIG_ENV_SIZE) -#error CONFIG_ENV_SIZE_REDUND should not be less then CONFIG_ENV_SIZE -#endif - /* TODO(sjg@chromium.org): Figure out all these special cases */ #if (!defined(CONFIG_MICROBLAZE) && !defined(CONFIG_ARCH_ZYNQ) && \ !defined(CONFIG_TARGET_MCCMON6) && !defined(CONFIG_TARGET_X600) && \ @@ -45,16 +43,16 @@ DECLARE_GLOBAL_DATA_PTR; #define INITENV #endif +#if defined(CONFIG_ENV_ADDR_REDUND) && defined(CMD_SAVEENV) || \ + !defined(CONFIG_ENV_ADDR_REDUND) && defined(INITENV) #ifdef ENV_IS_EMBEDDED -env_t *env_ptr = &environment; - -static __maybe_unused env_t *flash_addr = (env_t *)CONFIG_ENV_ADDR; - +static env_t *env_ptr = &embedded_environment; #else /* ! ENV_IS_EMBEDDED */ -env_t *env_ptr = (env_t *)CONFIG_ENV_ADDR; -static __maybe_unused env_t *flash_addr = (env_t *)CONFIG_ENV_ADDR; +static env_t *env_ptr = (env_t *)CONFIG_ENV_ADDR; #endif /* ENV_IS_EMBEDDED */ +#endif +static __maybe_unused env_t *flash_addr = (env_t *)CONFIG_ENV_ADDR; /* CONFIG_ENV_ADDR is supposed to be on sector boundary */ static ulong __maybe_unused end_addr = @@ -94,11 +92,13 @@ static int env_flash_init(void) gd->env_valid = ENV_VALID; } else if (!crc1_ok && !crc2_ok) { gd->env_addr = addr_default; - gd->env_valid = 0; - } else if (flag1 == ACTIVE_FLAG && flag2 == OBSOLETE_FLAG) { + gd->env_valid = ENV_INVALID; + } else if (flag1 == ENV_REDUND_ACTIVE && + flag2 == ENV_REDUND_OBSOLETE) { gd->env_addr = addr1; gd->env_valid = ENV_VALID; - } else if (flag1 == OBSOLETE_FLAG && flag2 == ACTIVE_FLAG) { + } else if (flag1 == ENV_REDUND_OBSOLETE && + flag2 == ENV_REDUND_ACTIVE) { gd->env_addr = addr2; gd->env_valid = ENV_VALID; } else if (flag1 == flag2) { @@ -121,7 +121,7 @@ static int env_flash_save(void) { env_t env_new; char *saved_data = NULL; - char flag = OBSOLETE_FLAG, new_flag = ACTIVE_FLAG; + char flag = ENV_REDUND_OBSOLETE, new_flag = ENV_REDUND_ACTIVE; int rc = 1; #if CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE ulong up_data = 0; @@ -231,7 +231,7 @@ static int env_flash_init(void) } gd->env_addr = (ulong)&default_environment[0]; - gd->env_valid = 0; + gd->env_valid = ENV_INVALID; return 0; } #endif @@ -322,9 +322,9 @@ static int env_flash_load(void) end_addr_new = ltmp; } - if (flash_addr_new->flags != OBSOLETE_FLAG && + if (flash_addr_new->flags != ENV_REDUND_OBSOLETE && crc32(0, flash_addr_new->data, ENV_SIZE) == flash_addr_new->crc) { - char flag = OBSOLETE_FLAG; + char flag = ENV_REDUND_OBSOLETE; gd->env_valid = ENV_REDUND; flash_sect_protect(0, (ulong)flash_addr_new, end_addr_new); @@ -334,9 +334,9 @@ static int env_flash_load(void) flash_sect_protect(1, (ulong)flash_addr_new, end_addr_new); } - if (flash_addr->flags != ACTIVE_FLAG && - (flash_addr->flags & ACTIVE_FLAG) == ACTIVE_FLAG) { - char flag = ACTIVE_FLAG; + if (flash_addr->flags != ENV_REDUND_ACTIVE && + (flash_addr->flags & ENV_REDUND_ACTIVE) == ENV_REDUND_ACTIVE) { + char flag = ENV_REDUND_ACTIVE; gd->env_valid = ENV_REDUND; flash_sect_protect(0, (ulong)flash_addr, end_addr); @@ -351,9 +351,7 @@ static int env_flash_load(void) "reading environment; recovered successfully\n\n"); #endif /* CONFIG_ENV_ADDR_REDUND */ - env_import((char *)flash_addr, 1); - - return 0; + return env_import((char *)flash_addr, 1); } #endif /* LOADENV */