X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=env%2Fubi.c;h=08aac47df2b6a7c5e7c04f1d9232f6db62e43bac;hb=1b6ae82a5abb4cbedb0d6cb262526173f4efa486;hp=4811f97413821222f2e504e92d84f42c9b9dc270;hpb=7938822a6b75b69fff9793b6b1769dddf1249525;p=oweals%2Fu-boot.git diff --git a/env/ubi.c b/env/ubi.c index 4811f97413..08aac47df2 100644 --- a/env/ubi.c +++ b/env/ubi.c @@ -1,14 +1,14 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * (c) Copyright 2012 by National Instruments, * Joe Hershberger - * - * SPDX-License-Identifier: GPL-2.0+ */ #include #include -#include +#include +#include #include #include #include @@ -16,9 +16,14 @@ #include #undef crc32 -char *env_name_spec = "UBI"; +#define _QUOTE(x) #x +#define QUOTE(x) _QUOTE(x) -env_t *env_ptr; +#if (CONFIG_ENV_UBI_VID_OFFSET == 0) + #define UBI_VID_OFFSET NULL +#else + #define UBI_VID_OFFSET QUOTE(CONFIG_ENV_UBI_VID_OFFSET) +#endif DECLARE_GLOBAL_DATA_PTR; @@ -33,7 +38,7 @@ static int env_ubi_save(void) if (ret) return ret; - if (ubi_part(CONFIG_ENV_UBI_PART, NULL)) { + if (ubi_part(CONFIG_ENV_UBI_PART, UBI_VID_OFFSET)) { printf("\n** Cannot find mtd partition \"%s\"\n", CONFIG_ENV_UBI_PART); return 1; @@ -75,7 +80,7 @@ static int env_ubi_save(void) if (ret) return ret; - if (ubi_part(CONFIG_ENV_UBI_PART, NULL)) { + if (ubi_part(CONFIG_ENV_UBI_PART, UBI_VID_OFFSET)) { printf("\n** Cannot find mtd partition \"%s\"\n", CONFIG_ENV_UBI_PART); return 1; @@ -95,10 +100,11 @@ static int env_ubi_save(void) #endif /* CONFIG_CMD_SAVEENV */ #ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT -static void env_ubi_load(void) +static int env_ubi_load(void) { ALLOC_CACHE_ALIGN_BUFFER(char, env1_buf, CONFIG_ENV_SIZE); ALLOC_CACHE_ALIGN_BUFFER(char, env2_buf, CONFIG_ENV_SIZE); + int read1_fail, read2_fail; env_t *tmp_env1, *tmp_env2; /* @@ -115,29 +121,30 @@ static void env_ubi_load(void) tmp_env1 = (env_t *)env1_buf; tmp_env2 = (env_t *)env2_buf; - if (ubi_part(CONFIG_ENV_UBI_PART, NULL)) { + if (ubi_part(CONFIG_ENV_UBI_PART, UBI_VID_OFFSET)) { printf("\n** Cannot find mtd partition \"%s\"\n", CONFIG_ENV_UBI_PART); - set_default_env(NULL); - return; + env_set_default(NULL, 0); + return -EIO; } - if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME, (void *)tmp_env1, - CONFIG_ENV_SIZE)) { + read1_fail = ubi_volume_read(CONFIG_ENV_UBI_VOLUME, (void *)tmp_env1, + CONFIG_ENV_SIZE); + if (read1_fail) printf("\n** Unable to read env from %s:%s **\n", CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME); - } - if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME_REDUND, (void *)tmp_env2, - CONFIG_ENV_SIZE)) { + read2_fail = ubi_volume_read(CONFIG_ENV_UBI_VOLUME_REDUND, + (void *)tmp_env2, CONFIG_ENV_SIZE); + if (read2_fail) printf("\n** Unable to read redundant env from %s:%s **\n", CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME_REDUND); - } - env_import_redund((char *)tmp_env1, (char *)tmp_env2); + return env_import_redund((char *)tmp_env1, read1_fail, (char *)tmp_env2, + read2_fail); } #else /* ! CONFIG_SYS_REDUNDAND_ENVIRONMENT */ -static void env_ubi_load(void) +static int env_ubi_load(void) { ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE); @@ -151,26 +158,27 @@ static void env_ubi_load(void) */ memset(buf, 0x0, CONFIG_ENV_SIZE); - if (ubi_part(CONFIG_ENV_UBI_PART, NULL)) { + if (ubi_part(CONFIG_ENV_UBI_PART, UBI_VID_OFFSET)) { printf("\n** Cannot find mtd partition \"%s\"\n", CONFIG_ENV_UBI_PART); - set_default_env(NULL); - return; + env_set_default(NULL, 0); + return -EIO; } if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME, buf, CONFIG_ENV_SIZE)) { printf("\n** Unable to read env from %s:%s **\n", CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME); - set_default_env(NULL); - return; + env_set_default(NULL, 0); + return -EIO; } - env_import(buf, 1); + return env_import(buf, 1); } #endif /* CONFIG_SYS_REDUNDAND_ENVIRONMENT */ U_BOOT_ENV_LOCATION(ubi) = { .location = ENVL_UBI, + ENV_NAME("UBI") .load = env_ubi_load, .save = env_save_ptr(env_ubi_save), };