X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=env%2Fubi.c;h=08aac47df2b6a7c5e7c04f1d9232f6db62e43bac;hb=18b9c98024ec89e00a57707f07ff6ada06089d26;hp=4d5ae1343defe9bccf1f9b00fc0dfc83296b1868;hpb=ac358beb85362fb2fac47aaec40a7e1bca49656c;p=oweals%2Fu-boot.git diff --git a/env/ubi.c b/env/ubi.c index 4d5ae1343d..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,7 +16,14 @@ #include #undef crc32 -env_t *env_ptr; +#define _QUOTE(x) #x +#define QUOTE(x) _QUOTE(x) + +#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; @@ -31,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; @@ -73,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; @@ -93,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; /* @@ -113,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); @@ -149,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), };