Commit c5951991942330c129f3b181e94969d7c01e9abb
Committed by
Tom Rini
1 parent
21f639446d
Exists in
smarc_8mq_lf_v2020.04
and in
17 other branches
env: Adjust the load() method to return an error
The load() methods have inconsistent behaviour on error. Some of them load an empty default environment. Some load an environment containing an error message. Others do nothing. As a step in the right direction, have the method return an error code. Then the caller could handle this itself in a consistent way. Signed-off-by: Simon Glass <sjg@chromium.org>
Showing 14 changed files with 83 additions and 42 deletions Side-by-side Diff
env/dataflash.c
... | ... | @@ -23,7 +23,7 @@ |
23 | 23 | return c; |
24 | 24 | } |
25 | 25 | |
26 | -static void env_dataflash_load(void) | |
26 | +static int env_dataflash_load(void) | |
27 | 27 | { |
28 | 28 | ulong crc, new = 0; |
29 | 29 | unsigned off; |
... | ... | @@ -44,6 +44,8 @@ |
44 | 44 | env_import(buf, 1); |
45 | 45 | else |
46 | 46 | set_default_env("!bad CRC"); |
47 | + | |
48 | + return 0; | |
47 | 49 | } |
48 | 50 | |
49 | 51 | #ifdef CONFIG_ENV_OFFSET_REDUND |
env/eeprom.c
... | ... | @@ -76,7 +76,7 @@ |
76 | 76 | return c; |
77 | 77 | } |
78 | 78 | |
79 | -static void env_eeprom_load(void) | |
79 | +static int env_eeprom_load(void) | |
80 | 80 | { |
81 | 81 | char buf_env[CONFIG_ENV_SIZE]; |
82 | 82 | unsigned int off = CONFIG_ENV_OFFSET; |
... | ... | @@ -182,6 +182,8 @@ |
182 | 182 | off, (uchar *)buf_env, CONFIG_ENV_SIZE); |
183 | 183 | |
184 | 184 | env_import(buf_env, 1); |
185 | + | |
186 | + return 0; | |
185 | 187 | } |
186 | 188 | |
187 | 189 | static int env_eeprom_save(void) |
env/ext4.c
... | ... | @@ -75,7 +75,7 @@ |
75 | 75 | } |
76 | 76 | #endif /* CONFIG_CMD_SAVEENV */ |
77 | 77 | |
78 | -static void env_ext4_load(void) | |
78 | +static int env_ext4_load(void) | |
79 | 79 | { |
80 | 80 | ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE); |
81 | 81 | struct blk_desc *dev_desc = NULL; |
82 | 82 | |
... | ... | @@ -109,10 +109,12 @@ |
109 | 109 | } |
110 | 110 | |
111 | 111 | env_import(buf, 1); |
112 | - return; | |
112 | + return 0; | |
113 | 113 | |
114 | 114 | err_env_relocate: |
115 | 115 | set_default_env(NULL); |
116 | + | |
117 | + return -EIO; | |
116 | 118 | } |
117 | 119 | |
118 | 120 | U_BOOT_ENV_LOCATION(ext4) = { |
env/fat.c
... | ... | @@ -74,7 +74,7 @@ |
74 | 74 | #endif /* CMD_SAVEENV */ |
75 | 75 | |
76 | 76 | #ifdef LOADENV |
77 | -static void env_fat_load(void) | |
77 | +static int env_fat_load(void) | |
78 | 78 | { |
79 | 79 | ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE); |
80 | 80 | struct blk_desc *dev_desc = NULL; |
81 | 81 | |
... | ... | @@ -103,10 +103,12 @@ |
103 | 103 | } |
104 | 104 | |
105 | 105 | env_import(buf, 1); |
106 | - return; | |
106 | + return 0; | |
107 | 107 | |
108 | 108 | err_env_relocate: |
109 | 109 | set_default_env(NULL); |
110 | + | |
111 | + return -EIO; | |
110 | 112 | } |
111 | 113 | #endif /* LOADENV */ |
112 | 114 |
env/flash.c
... | ... | @@ -308,7 +308,7 @@ |
308 | 308 | #endif /* CONFIG_ENV_ADDR_REDUND */ |
309 | 309 | |
310 | 310 | #ifdef LOADENV |
311 | -static void env_flash_load(void) | |
311 | +static int env_flash_load(void) | |
312 | 312 | { |
313 | 313 | #ifdef CONFIG_ENV_ADDR_REDUND |
314 | 314 | if (gd->env_addr != (ulong)&(flash_addr->data)) { |
... | ... | @@ -352,6 +352,8 @@ |
352 | 352 | #endif /* CONFIG_ENV_ADDR_REDUND */ |
353 | 353 | |
354 | 354 | env_import((char *)flash_addr, 1); |
355 | + | |
356 | + return 0; | |
355 | 357 | } |
356 | 358 | #endif /* LOADENV */ |
357 | 359 |
env/mmc.c
... | ... | @@ -207,7 +207,7 @@ |
207 | 207 | } |
208 | 208 | |
209 | 209 | #ifdef CONFIG_ENV_OFFSET_REDUND |
210 | -static void env_mmc_load(void) | |
210 | +static int env_mmc_load(void) | |
211 | 211 | { |
212 | 212 | #if !defined(ENV_IS_EMBEDDED) |
213 | 213 | struct mmc *mmc; |
214 | 214 | |
... | ... | @@ -224,13 +224,13 @@ |
224 | 224 | |
225 | 225 | errmsg = init_mmc_for_env(mmc); |
226 | 226 | if (errmsg) { |
227 | - ret = 1; | |
227 | + ret = -EIO; | |
228 | 228 | goto err; |
229 | 229 | } |
230 | 230 | |
231 | 231 | if (mmc_get_env_addr(mmc, 0, &offset1) || |
232 | 232 | mmc_get_env_addr(mmc, 1, &offset2)) { |
233 | - ret = 1; | |
233 | + ret = -EIO; | |
234 | 234 | goto fini; |
235 | 235 | } |
236 | 236 | |
... | ... | @@ -245,7 +245,7 @@ |
245 | 245 | |
246 | 246 | if (read1_fail && read2_fail) { |
247 | 247 | errmsg = "!bad CRC"; |
248 | - ret = 1; | |
248 | + ret = -EIO; | |
249 | 249 | goto fini; |
250 | 250 | } else if (!read1_fail && read2_fail) { |
251 | 251 | gd->env_valid = ENV_VALID; |
252 | 252 | |
253 | 253 | |
... | ... | @@ -264,10 +264,12 @@ |
264 | 264 | err: |
265 | 265 | if (ret) |
266 | 266 | set_default_env(errmsg); |
267 | + | |
267 | 268 | #endif |
269 | + return ret; | |
268 | 270 | } |
269 | 271 | #else /* ! CONFIG_ENV_OFFSET_REDUND */ |
270 | -static void env_mmc_load(void) | |
272 | +static int env_mmc_load(void) | |
271 | 273 | { |
272 | 274 | #if !defined(ENV_IS_EMBEDDED) |
273 | 275 | ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE); |
274 | 276 | |
275 | 277 | |
... | ... | @@ -281,18 +283,18 @@ |
281 | 283 | |
282 | 284 | errmsg = init_mmc_for_env(mmc); |
283 | 285 | if (errmsg) { |
284 | - ret = 1; | |
286 | + ret = -EIO; | |
285 | 287 | goto err; |
286 | 288 | } |
287 | 289 | |
288 | 290 | if (mmc_get_env_addr(mmc, 0, &offset)) { |
289 | - ret = 1; | |
291 | + ret = -EIO; | |
290 | 292 | goto fini; |
291 | 293 | } |
292 | 294 | |
293 | 295 | if (read_env(mmc, CONFIG_ENV_SIZE, offset, buf)) { |
294 | 296 | errmsg = "!read failed"; |
295 | - ret = 1; | |
297 | + ret = -EIO; | |
296 | 298 | goto fini; |
297 | 299 | } |
298 | 300 | |
... | ... | @@ -305,6 +307,7 @@ |
305 | 307 | if (ret) |
306 | 308 | set_default_env(errmsg); |
307 | 309 | #endif |
310 | + return ret; | |
308 | 311 | } |
309 | 312 | #endif /* CONFIG_ENV_OFFSET_REDUND */ |
310 | 313 |
env/nand.c
... | ... | @@ -302,7 +302,7 @@ |
302 | 302 | } |
303 | 303 | |
304 | 304 | if (oob_buf[0] == ENV_OOB_MARKER) { |
305 | - *result = oob_buf[1] * mtd->erasesize; | |
305 | + *result = ovoid ob_buf[1] * mtd->erasesize; | |
306 | 306 | } else if (oob_buf[0] == ENV_OOB_MARKER_OLD) { |
307 | 307 | *result = oob_buf[1]; |
308 | 308 | } else { |
309 | 309 | |
310 | 310 | |
311 | 311 | |
... | ... | @@ -315,17 +315,21 @@ |
315 | 315 | #endif |
316 | 316 | |
317 | 317 | #ifdef CONFIG_ENV_OFFSET_REDUND |
318 | -static void env_nand_load(void) | |
318 | +static int env_nand_load(void) | |
319 | 319 | { |
320 | -#if !defined(ENV_IS_EMBEDDED) | |
320 | +#if defined(ENV_IS_EMBEDDED) | |
321 | + return 0; | |
322 | +#else | |
321 | 323 | int read1_fail = 0, read2_fail = 0; |
322 | 324 | env_t *tmp_env1, *tmp_env2; |
325 | + int ret = 0; | |
323 | 326 | |
324 | 327 | tmp_env1 = (env_t *)malloc(CONFIG_ENV_SIZE); |
325 | 328 | tmp_env2 = (env_t *)malloc(CONFIG_ENV_SIZE); |
326 | 329 | if (tmp_env1 == NULL || tmp_env2 == NULL) { |
327 | 330 | puts("Can't allocate buffers for environment\n"); |
328 | 331 | set_default_env("!malloc() failed"); |
332 | + ret = -EIO; | |
329 | 333 | goto done; |
330 | 334 | } |
331 | 335 | |
... | ... | @@ -355,6 +359,7 @@ |
355 | 359 | free(tmp_env1); |
356 | 360 | free(tmp_env2); |
357 | 361 | |
362 | + return ret; | |
358 | 363 | #endif /* ! ENV_IS_EMBEDDED */ |
359 | 364 | } |
360 | 365 | #else /* ! CONFIG_ENV_OFFSET_REDUND */ |
... | ... | @@ -363,7 +368,7 @@ |
363 | 368 | * device i.e., nand_dev_desc + 0. This is also the behaviour using |
364 | 369 | * the new NAND code. |
365 | 370 | */ |
366 | -static void env_nand_load(void) | |
371 | +static int env_nand_load(void) | |
367 | 372 | { |
368 | 373 | #if !defined(ENV_IS_EMBEDDED) |
369 | 374 | int ret; |
370 | 375 | |
... | ... | @@ -386,11 +391,13 @@ |
386 | 391 | ret = readenv(CONFIG_ENV_OFFSET, (u_char *)buf); |
387 | 392 | if (ret) { |
388 | 393 | set_default_env("!readenv() failed"); |
389 | - return; | |
394 | + return -EIO; | |
390 | 395 | } |
391 | 396 | |
392 | 397 | env_import(buf, 1); |
393 | 398 | #endif /* ! ENV_IS_EMBEDDED */ |
399 | + | |
400 | + return 0; | |
394 | 401 | } |
395 | 402 | #endif /* CONFIG_ENV_OFFSET_REDUND */ |
396 | 403 |
env/nvram.c
... | ... | @@ -51,7 +51,7 @@ |
51 | 51 | } |
52 | 52 | #endif |
53 | 53 | |
54 | -static void env_nvram_load(void) | |
54 | +static int env_nvram_load(void) | |
55 | 55 | { |
56 | 56 | char buf[CONFIG_ENV_SIZE]; |
57 | 57 | |
... | ... | @@ -61,6 +61,8 @@ |
61 | 61 | memcpy(buf, (void *)CONFIG_ENV_ADDR, CONFIG_ENV_SIZE); |
62 | 62 | #endif |
63 | 63 | env_import(buf, 1); |
64 | + | |
65 | + return 0; | |
64 | 66 | } |
65 | 67 | |
66 | 68 | static int env_nvram_save(void) |
env/onenand.c
... | ... | @@ -26,7 +26,7 @@ |
26 | 26 | |
27 | 27 | DECLARE_GLOBAL_DATA_PTR; |
28 | 28 | |
29 | -static void env_onenand_load(void) | |
29 | +static int env_onenand_load(void) | |
30 | 30 | { |
31 | 31 | struct mtd_info *mtd = &onenand_mtd; |
32 | 32 | #ifdef CONFIG_ENV_ADDR_FLEX |
... | ... | @@ -59,6 +59,8 @@ |
59 | 59 | rc = env_import(buf, 1); |
60 | 60 | if (rc) |
61 | 61 | gd->env_valid = ENV_VALID; |
62 | + | |
63 | + return rc ? 0 : -EIO; | |
62 | 64 | } |
63 | 65 | |
64 | 66 | static int env_onenand_save(void) |
env/remote.c
... | ... | @@ -46,11 +46,13 @@ |
46 | 46 | } |
47 | 47 | #endif /* CONFIG_CMD_SAVEENV */ |
48 | 48 | |
49 | -static void env_remote_load(void) | |
49 | +static int env_remote_load(void) | |
50 | 50 | { |
51 | 51 | #ifndef ENV_IS_EMBEDDED |
52 | 52 | env_import((char *)env_ptr, 1); |
53 | 53 | #endif |
54 | + | |
55 | + return 0; | |
54 | 56 | } |
55 | 57 | |
56 | 58 | U_BOOT_ENV_LOCATION(remote) = { |
env/sata.c
... | ... | @@ -98,21 +98,24 @@ |
98 | 98 | int env_sata; |
99 | 99 | |
100 | 100 | if (sata_initialize()) |
101 | - return; | |
101 | + return -EIO; | |
102 | 102 | |
103 | 103 | env_sata = sata_get_env_dev(); |
104 | 104 | |
105 | 105 | sata = sata_get_dev(env_sata); |
106 | 106 | if (sata == NULL) { |
107 | - printf("Unknown SATA(%d) device for environment!\n", | |
108 | - env_sata); | |
109 | - return; | |
107 | + printf("Unknown SATA(%d) device for environment!\n", env_sata); | |
108 | + return -EIO; | |
110 | 109 | } |
111 | 110 | |
112 | - if (read_env(sata, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, buf)) | |
113 | - return set_default_env(NULL); | |
111 | + if (read_env(sata, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, buf)) { | |
112 | + set_default_env(NULL); | |
113 | + return -EIO; | |
114 | + } | |
114 | 115 | |
115 | 116 | env_import(buf, 1); |
117 | + | |
118 | + return 0; | |
116 | 119 | } |
117 | 120 | |
118 | 121 | U_BOOT_ENV_LOCATION(sata) = { |
env/sf.c
... | ... | @@ -61,7 +61,7 @@ |
61 | 61 | 0, 0, &new); |
62 | 62 | if (ret) { |
63 | 63 | set_default_env("!spi_flash_probe_bus_cs() failed"); |
64 | - return 1; | |
64 | + return ret; | |
65 | 65 | } |
66 | 66 | |
67 | 67 | env_flash = dev_get_uclass_priv(new); |
... | ... | @@ -73,7 +73,7 @@ |
73 | 73 | CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE); |
74 | 74 | if (!env_flash) { |
75 | 75 | set_default_env("!spi_flash_probe() failed"); |
76 | - return 1; | |
76 | + return -EIO; | |
77 | 77 | } |
78 | 78 | } |
79 | 79 | #endif |
... | ... | @@ -95,7 +95,7 @@ |
95 | 95 | |
96 | 96 | ret = env_export(&env_new); |
97 | 97 | if (ret) |
98 | - return ret; | |
98 | + return -EIO; | |
99 | 99 | env_new.flags = ACTIVE_FLAG; |
100 | 100 | |
101 | 101 | if (gd->env_valid == ENV_VALID) { |
... | ... | @@ -112,7 +112,7 @@ |
112 | 112 | saved_offset = env_new_offset + CONFIG_ENV_SIZE; |
113 | 113 | saved_buffer = memalign(ARCH_DMA_MINALIGN, saved_size); |
114 | 114 | if (!saved_buffer) { |
115 | - ret = 1; | |
115 | + ret = -ENOMEM; | |
116 | 116 | goto done; |
117 | 117 | } |
118 | 118 | ret = spi_flash_read(env_flash, saved_offset, |
... | ... | @@ -162,7 +162,7 @@ |
162 | 162 | } |
163 | 163 | #endif /* CMD_SAVEENV */ |
164 | 164 | |
165 | -static void env_sf_load(void) | |
165 | +static int env_sf_load(void) | |
166 | 166 | { |
167 | 167 | int ret; |
168 | 168 | int crc1_ok = 0, crc2_ok = 0; |
... | ... | @@ -176,6 +176,7 @@ |
176 | 176 | CONFIG_ENV_SIZE); |
177 | 177 | if (!tmp_env1 || !tmp_env2) { |
178 | 178 | set_default_env("!malloc() failed"); |
179 | + ret = -EIO; | |
179 | 180 | goto out; |
180 | 181 | } |
181 | 182 | |
... | ... | @@ -202,6 +203,7 @@ |
202 | 203 | |
203 | 204 | if (!crc1_ok && !crc2_ok) { |
204 | 205 | set_default_env("!bad CRC"); |
206 | + ret = -EIO; | |
205 | 207 | goto err_read; |
206 | 208 | } else if (crc1_ok && !crc2_ok) { |
207 | 209 | gd->env_valid = ENV_VALID; |
... | ... | @@ -244,6 +246,8 @@ |
244 | 246 | out: |
245 | 247 | free(tmp_env1); |
246 | 248 | free(tmp_env2); |
249 | + | |
250 | + return ret; | |
247 | 251 | } |
248 | 252 | #else |
249 | 253 | #ifdef CMD_SAVEENV |
... | ... | @@ -308,7 +312,7 @@ |
308 | 312 | } |
309 | 313 | #endif /* CMD_SAVEENV */ |
310 | 314 | |
311 | -static void env_sf_load(void) | |
315 | +static int env_sf_load(void) | |
312 | 316 | { |
313 | 317 | int ret; |
314 | 318 | char *buf = NULL; |
... | ... | @@ -316,7 +320,7 @@ |
316 | 320 | buf = (char *)memalign(ARCH_DMA_MINALIGN, CONFIG_ENV_SIZE); |
317 | 321 | if (!buf) { |
318 | 322 | set_default_env("!malloc() failed"); |
319 | - return; | |
323 | + return -EIO; | |
320 | 324 | } |
321 | 325 | |
322 | 326 | ret = setup_flash_device(); |
... | ... | @@ -339,6 +343,8 @@ |
339 | 343 | env_flash = NULL; |
340 | 344 | out: |
341 | 345 | free(buf); |
346 | + | |
347 | + return ret; | |
342 | 348 | } |
343 | 349 | #endif |
344 | 350 |
env/ubi.c
... | ... | @@ -91,7 +91,7 @@ |
91 | 91 | #endif /* CONFIG_CMD_SAVEENV */ |
92 | 92 | |
93 | 93 | #ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT |
94 | -static void env_ubi_load(void) | |
94 | +static int env_ubi_load(void) | |
95 | 95 | { |
96 | 96 | ALLOC_CACHE_ALIGN_BUFFER(char, env1_buf, CONFIG_ENV_SIZE); |
97 | 97 | ALLOC_CACHE_ALIGN_BUFFER(char, env2_buf, CONFIG_ENV_SIZE); |
... | ... | @@ -115,7 +115,7 @@ |
115 | 115 | printf("\n** Cannot find mtd partition \"%s\"\n", |
116 | 116 | CONFIG_ENV_UBI_PART); |
117 | 117 | set_default_env(NULL); |
118 | - return; | |
118 | + return -EIO; | |
119 | 119 | } |
120 | 120 | |
121 | 121 | if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME, (void *)tmp_env1, |
122 | 122 | |
... | ... | @@ -131,9 +131,11 @@ |
131 | 131 | } |
132 | 132 | |
133 | 133 | env_import_redund((char *)tmp_env1, (char *)tmp_env2); |
134 | + | |
135 | + return 0; | |
134 | 136 | } |
135 | 137 | #else /* ! CONFIG_SYS_REDUNDAND_ENVIRONMENT */ |
136 | -static void env_ubi_load(void) | |
138 | +static int env_ubi_load(void) | |
137 | 139 | { |
138 | 140 | ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE); |
139 | 141 | |
140 | 142 | |
141 | 143 | |
... | ... | @@ -151,17 +153,19 @@ |
151 | 153 | printf("\n** Cannot find mtd partition \"%s\"\n", |
152 | 154 | CONFIG_ENV_UBI_PART); |
153 | 155 | set_default_env(NULL); |
154 | - return; | |
156 | + return -EIO; | |
155 | 157 | } |
156 | 158 | |
157 | 159 | if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME, buf, CONFIG_ENV_SIZE)) { |
158 | 160 | printf("\n** Unable to read env from %s:%s **\n", |
159 | 161 | CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME); |
160 | 162 | set_default_env(NULL); |
161 | - return; | |
163 | + return -EIO; | |
162 | 164 | } |
163 | 165 | |
164 | 166 | env_import(buf, 1); |
167 | + | |
168 | + return 0; | |
165 | 169 | } |
166 | 170 | #endif /* CONFIG_SYS_REDUNDAND_ENVIRONMENT */ |
167 | 171 |
include/environment.h
... | ... | @@ -236,8 +236,10 @@ |
236 | 236 | * |
237 | 237 | * This method is optional. If not provided, no environment will be |
238 | 238 | * loaded. |
239 | + * | |
240 | + * @return 0 if OK, -ve on error | |
239 | 241 | */ |
240 | - void (*load)(void); | |
242 | + int (*load)(void); | |
241 | 243 | |
242 | 244 | /** |
243 | 245 | * save() - Save the environment to storage |