forked from pool/u-boot
1 OBS-URL: https://build.opensuse.org/request/show/425233 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/u-boot?expand=0&rev=80
63 lines
2.1 KiB
Diff
63 lines
2.1 KiB
Diff
From db288b9701692c38f6fd614b7c1011d22c1d6781 Mon Sep 17 00:00:00 2001
|
|
From: Tom Rini <trini@konsulko.com>
|
|
Date: Mon, 15 Aug 2016 13:02:15 -0400
|
|
Subject: [PATCH] common: env_nand: Ensure that we have nand_info[0] prior to
|
|
use
|
|
|
|
Now that nand_info[] is an array of pointers we need to ensure that it's
|
|
been populated prior to use. We may for example have ENV in NAND set in
|
|
configurations that run on boards with and without NAND (where default
|
|
env is fine enough, such as omap3_beagle and beagleboard (NAND) vs
|
|
beagle xM (no NAND)).
|
|
|
|
Fixes: b616d9b0a708 ("nand: Embed mtd_info in struct nand_chip")
|
|
Cc: Scott Wood <oss@buserror.net>
|
|
Signed-off-by: Tom Rini <trini@konsulko.com>
|
|
Acked-by: Scott Wood <oss@buserror.net>
|
|
---
|
|
common/env_nand.c | 11 +++++++----
|
|
1 file changed, 7 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/common/env_nand.c b/common/env_nand.c
|
|
index fc99a5e..2e28171 100644
|
|
--- a/common/env_nand.c
|
|
+++ b/common/env_nand.c
|
|
@@ -163,6 +163,9 @@ static int erase_and_write_env(const struct env_location *location,
|
|
{
|
|
int ret = 0;
|
|
|
|
+ if (!nand_info[0])
|
|
+ return 1;
|
|
+
|
|
printf("Erasing %s...\n", location->name);
|
|
if (nand_erase_opts(nand_info[0], &location->erase_opts))
|
|
return 1;
|
|
@@ -247,10 +250,10 @@ static int readenv(size_t offset, u_char *buf)
|
|
size_t blocksize, len;
|
|
u_char *char_ptr;
|
|
|
|
- blocksize = nand_info[0]->erasesize;
|
|
- if (!blocksize)
|
|
+ if (!nand_info[0])
|
|
return 1;
|
|
|
|
+ blocksize = nand_info[0]->erasesize;
|
|
len = min(blocksize, (size_t)CONFIG_ENV_SIZE);
|
|
|
|
while (amount_loaded < CONFIG_ENV_SIZE && offset < end) {
|
|
@@ -387,12 +390,12 @@ void env_relocate_spec(void)
|
|
ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE);
|
|
|
|
#if defined(CONFIG_ENV_OFFSET_OOB)
|
|
- ret = get_nand_env_oob(nand_info[0], &nand_env_oob_offset);
|
|
/*
|
|
* If unable to read environment offset from NAND OOB then fall through
|
|
* to the normal environment reading code below
|
|
*/
|
|
- if (!ret) {
|
|
+ if (nand_info[0] && !get_nand_env_oob(nand_info[0],
|
|
+ &nand_env_oob_offset)) {
|
|
printf("Found Environment offset in OOB..\n");
|
|
} else {
|
|
set_default_env("!no env offset in OOB");
|