[U-Boot] [RFC PATCH 1/2] spl: Fix redundant image of uboot

We need to address the redundat image case and undestand if the image is corrupted or not and fallback to the copy. The function used before was always return 0 without any evaluation of the error. We try to make it work properly
Signed-off-by: Michael Trimarchi michael@amarulasolutions.com --- common/spl/spl_nand.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-)
diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c index 9a52500..b96fce2 100644 --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c @@ -44,9 +44,7 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, { int err;
- err = nand_spl_load_image(offset, sizeof(*header), (void *)header); - if (err) - return err; + nand_spl_load_image(offset, sizeof(*header), (void *)header);
if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && image_get_magic(header) == FDT_MAGIC) { @@ -59,13 +57,31 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, load.bl_len = 1; load.read = spl_nand_fit_read; return spl_load_simple_fit(spl_image, &load, offset, header); - } else { - err = spl_parse_image_header(spl_image, header); - if (err) - return err; - return nand_spl_load_image(offset, spl_image->size, - (void *)(ulong)spl_image->load_addr); } + err = spl_parse_image_header(spl_image, header); + if (err) + return err; + + nand_spl_load_image(offset, spl_image->size, + (void *)(ulong)spl_image->load_addr); + + /* + * Logic of the error is inverted for image_check* functions. + * We want to verify that header is correct and the data are correct + * for LEGACY image type + */ + err = image_check_hcrc((const image_header_t *)spl_image->load_addr); + if (!err) { + debug("Header checksum failed\n"); + return -EINVAL; + } + err = image_check_dcrc((const image_header_t *)spl_image->load_addr); + if (!err) { + debug("Image checksum failed\n"); + return -EINVAL; + } + + return 0; }
static int spl_nand_load_image(struct spl_image_info *spl_image,

Signed-off-by: Michael Trimarchi michael@amarulasolutions.com --- common/spl/spl_nand.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c index b96fce2..527cfc0 100644 --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c @@ -12,7 +12,7 @@ #include <fdt.h>
#if defined(CONFIG_SPL_NAND_RAW_ONLY) -int spl_nand_load_image(struct spl_image_info *spl_image, +static int spl_nand_load_image(struct spl_image_info *spl_image, struct spl_boot_device *bootdev) { nand_init();
participants (1)
-
Michael Trimarchi