From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Trimarchi Date: Wed, 4 Jul 2018 16:09:28 +0200 Subject: [U-Boot] [RFC PATCH 1/2] spl: Fix redundant image of uboot Message-ID: <1530713370-21301-1-git-send-email-michael@amarulasolutions.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 --- 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, -- 2.7.4