Blame view
env/ubi.c
4.75 KB
83d290c56 SPDX: Convert all... |
1 |
// SPDX-License-Identifier: GPL-2.0+ |
2b74433f3 env: Add support ... |
2 3 4 |
/* * (c) Copyright 2012 by National Instruments, * Joe Hershberger <joe.hershberger@ni.com> |
2b74433f3 env: Add support ... |
5 6 7 8 9 |
*/ #include <common.h> #include <command.h> |
0ac7d722e env: Move get/set... |
10 |
#include <env.h> |
f3998fdc4 env: Rename envir... |
11 |
#include <env_internal.h> |
2b74433f3 env: Add support ... |
12 13 |
#include <errno.h> #include <malloc.h> |
cf92e05c0 Move ALLOC_CACHE_... |
14 |
#include <memalign.h> |
2b74433f3 env: Add support ... |
15 16 17 |
#include <search.h> #include <ubi_uboot.h> #undef crc32 |
985186d1f env: ubi: support... |
18 19 20 21 22 23 24 25 |
#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 |
2b74433f3 env: Add support ... |
26 |
DECLARE_GLOBAL_DATA_PTR; |
2b74433f3 env: Add support ... |
27 |
#ifdef CONFIG_CMD_SAVEENV |
785881f77 env: Add redundan... |
28 |
#ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT |
e5bce247b env: Switch over ... |
29 |
static int env_ubi_save(void) |
785881f77 env: Add redundan... |
30 31 |
{ ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1); |
7ce1526ed env: Add env_expo... |
32 |
int ret; |
785881f77 env: Add redundan... |
33 |
|
7ce1526ed env: Add env_expo... |
34 35 36 |
ret = env_export(env_new); if (ret) return ret; |
785881f77 env: Add redundan... |
37 |
|
985186d1f env: ubi: support... |
38 |
if (ubi_part(CONFIG_ENV_UBI_PART, UBI_VID_OFFSET)) { |
785881f77 env: Add redundan... |
39 40 41 42 43 44 |
printf(" ** Cannot find mtd partition \"%s\" ", CONFIG_ENV_UBI_PART); return 1; } |
203e94f6c env: Add an enum ... |
45 |
if (gd->env_valid == ENV_VALID) { |
785881f77 env: Add redundan... |
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
puts("Writing to redundant UBI... "); if (ubi_volume_write(CONFIG_ENV_UBI_VOLUME_REDUND, (void *)env_new, CONFIG_ENV_SIZE)) { printf(" ** Unable to write env to %s:%s ** ", CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME_REDUND); return 1; } } else { puts("Writing to UBI... "); if (ubi_volume_write(CONFIG_ENV_UBI_VOLUME, (void *)env_new, CONFIG_ENV_SIZE)) { printf(" ** Unable to write env to %s:%s ** ", CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME); return 1; } } puts("done "); |
203e94f6c env: Add an enum ... |
71 |
gd->env_valid = gd->env_valid == ENV_REDUND ? ENV_VALID : ENV_REDUND; |
785881f77 env: Add redundan... |
72 73 74 75 |
return 0; } #else /* ! CONFIG_SYS_REDUNDAND_ENVIRONMENT */ |
e5bce247b env: Switch over ... |
76 |
static int env_ubi_save(void) |
2b74433f3 env: Add support ... |
77 78 |
{ ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1); |
7ce1526ed env: Add env_expo... |
79 |
int ret; |
2b74433f3 env: Add support ... |
80 |
|
7ce1526ed env: Add env_expo... |
81 82 83 |
ret = env_export(env_new); if (ret) return ret; |
2b74433f3 env: Add support ... |
84 |
|
985186d1f env: ubi: support... |
85 |
if (ubi_part(CONFIG_ENV_UBI_PART, UBI_VID_OFFSET)) { |
2b74433f3 env: Add support ... |
86 87 88 89 90 91 |
printf(" ** Cannot find mtd partition \"%s\" ", CONFIG_ENV_UBI_PART); return 1; } |
2b74433f3 env: Add support ... |
92 93 94 95 96 97 98 99 100 101 102 103 104 |
if (ubi_volume_write(CONFIG_ENV_UBI_VOLUME, (void *)env_new, CONFIG_ENV_SIZE)) { printf(" ** Unable to write env to %s:%s ** ", CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME); return 1; } puts("done "); return 0; } |
785881f77 env: Add redundan... |
105 |
#endif /* CONFIG_SYS_REDUNDAND_ENVIRONMENT */ |
2b74433f3 env: Add support ... |
106 |
#endif /* CONFIG_CMD_SAVEENV */ |
785881f77 env: Add redundan... |
107 |
#ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT |
c59519919 env: Adjust the l... |
108 |
static int env_ubi_load(void) |
785881f77 env: Add redundan... |
109 110 111 |
{ ALLOC_CACHE_ALIGN_BUFFER(char, env1_buf, CONFIG_ENV_SIZE); ALLOC_CACHE_ALIGN_BUFFER(char, env2_buf, CONFIG_ENV_SIZE); |
31f044bd9 env: move more co... |
112 |
int read1_fail, read2_fail; |
9d364af23 env: Switch env_n... |
113 |
env_t *tmp_env1, *tmp_env2; |
785881f77 env: Add redundan... |
114 |
|
c1f51e0f3 common: env_ubi: ... |
115 116 117 118 119 120 121 122 123 124 |
/* * In case we have restarted u-boot there is a chance that buffer * contains old environment (from the previous boot). * If UBI volume is zero size, ubi_volume_read() doesn't modify the * buffer. * We need to clear buffer manually here, so the invalid CRC will * cause setting default environment as expected. */ memset(env1_buf, 0x0, CONFIG_ENV_SIZE); memset(env2_buf, 0x0, CONFIG_ENV_SIZE); |
785881f77 env: Add redundan... |
125 126 |
tmp_env1 = (env_t *)env1_buf; tmp_env2 = (env_t *)env2_buf; |
985186d1f env: ubi: support... |
127 |
if (ubi_part(CONFIG_ENV_UBI_PART, UBI_VID_OFFSET)) { |
785881f77 env: Add redundan... |
128 129 130 131 |
printf(" ** Cannot find mtd partition \"%s\" ", CONFIG_ENV_UBI_PART); |
0ac7d722e env: Move get/set... |
132 |
env_set_default(NULL, 0); |
c59519919 env: Adjust the l... |
133 |
return -EIO; |
785881f77 env: Add redundan... |
134 |
} |
31f044bd9 env: move more co... |
135 136 137 |
read1_fail = ubi_volume_read(CONFIG_ENV_UBI_VOLUME, (void *)tmp_env1, CONFIG_ENV_SIZE); if (read1_fail) |
785881f77 env: Add redundan... |
138 139 140 141 |
printf(" ** Unable to read env from %s:%s ** ", CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME); |
785881f77 env: Add redundan... |
142 |
|
31f044bd9 env: move more co... |
143 144 145 |
read2_fail = ubi_volume_read(CONFIG_ENV_UBI_VOLUME_REDUND, (void *)tmp_env2, CONFIG_ENV_SIZE); if (read2_fail) |
785881f77 env: Add redundan... |
146 147 148 149 |
printf(" ** Unable to read redundant env from %s:%s ** ", CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME_REDUND); |
785881f77 env: Add redundan... |
150 |
|
31f044bd9 env: move more co... |
151 152 |
return env_import_redund((char *)tmp_env1, read1_fail, (char *)tmp_env2, read2_fail); |
785881f77 env: Add redundan... |
153 154 |
} #else /* ! CONFIG_SYS_REDUNDAND_ENVIRONMENT */ |
c59519919 env: Adjust the l... |
155 |
static int env_ubi_load(void) |
2b74433f3 env: Add support ... |
156 157 |
{ ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE); |
c1f51e0f3 common: env_ubi: ... |
158 159 160 161 162 163 164 165 166 |
/* * In case we have restarted u-boot there is a chance that buffer * contains old environment (from the previous boot). * If UBI volume is zero size, ubi_volume_read() doesn't modify the * buffer. * We need to clear buffer manually here, so the invalid CRC will * cause setting default environment as expected. */ memset(buf, 0x0, CONFIG_ENV_SIZE); |
985186d1f env: ubi: support... |
167 |
if (ubi_part(CONFIG_ENV_UBI_PART, UBI_VID_OFFSET)) { |
2b74433f3 env: Add support ... |
168 169 170 171 |
printf(" ** Cannot find mtd partition \"%s\" ", CONFIG_ENV_UBI_PART); |
0ac7d722e env: Move get/set... |
172 |
env_set_default(NULL, 0); |
c59519919 env: Adjust the l... |
173 |
return -EIO; |
2b74433f3 env: Add support ... |
174 |
} |
a7c06cd3a env_ubi.c: Correc... |
175 |
if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME, buf, CONFIG_ENV_SIZE)) { |
2b74433f3 env: Add support ... |
176 177 178 179 |
printf(" ** Unable to read env from %s:%s ** ", CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME); |
0ac7d722e env: Move get/set... |
180 |
env_set_default(NULL, 0); |
c59519919 env: Adjust the l... |
181 |
return -EIO; |
2b74433f3 env: Add support ... |
182 |
} |
2166ebf78 env: make env dri... |
183 |
return env_import(buf, 1); |
2b74433f3 env: Add support ... |
184 |
} |
785881f77 env: Add redundan... |
185 |
#endif /* CONFIG_SYS_REDUNDAND_ENVIRONMENT */ |
4415f1d1f env: Create a loc... |
186 187 188 |
U_BOOT_ENV_LOCATION(ubi) = { .location = ENVL_UBI, |
344ca7950 env: ubi: Add mis... |
189 |
ENV_NAME("UBI") |
e5bce247b env: Switch over ... |
190 191 |
.load = env_ubi_load, .save = env_save_ptr(env_ubi_save), |
4415f1d1f env: Create a loc... |
192 |
}; |