From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lothar =?UTF-8?B?V2HDn21hbm4=?= Date: Wed, 4 Jul 2018 16:19:18 +0200 Subject: [U-Boot] [PATCH 1/2] spl: Fix redundant image of uboot In-Reply-To: <1530712418-20583-1-git-send-email-michael@amarulasolutions.com> References: <1530712418-20583-1-git-send-email-michael@amarulasolutions.com> Message-ID: <20180704161918.601e8f93@karo-electronics.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable To: u-boot@lists.denx.de Hi, On Wed, 4 Jul 2018 15:53:36 +0200 Michael Trimarchi wrote: > 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 >=20 > Change-Id: Id6fc221c5cc08934b7324dd5d319b93c56e2e678 > Signed-off-by: Michael Trimarchi > --- > common/spl/spl_nand.c | 34 +++++++++++++++++++++++++--------- > 1 file changed, 25 insertions(+), 9 deletions(-) >=20 > 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; > =20 > - err =3D nand_spl_load_image(offset, sizeof(*header), (void *)header); > - if (err) > - return err; > + nand_spl_load_image(offset, sizeof(*header), (void *)header); > =20 > if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && > image_get_magic(header) =3D=3D FDT_MAGIC) { > @@ -59,13 +57,31 @@ static int spl_nand_load_element(struct spl_image_inf= o *spl_image, > load.bl_len =3D 1; > load.read =3D spl_nand_fit_read; > return spl_load_simple_fit(spl_image, &load, offset, header); > - } else { > - err =3D 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 =3D 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 =3D image_check_hcrc((const image_header_t *)spl_image->load_addr); > + if (!err) { > Why not simply: if (!image_check_hcrc(...) { > + debug("Header checksum failed\n"); > + return -EINVAL; > + } > + err =3D image_check_dcrc((const image_header_t *)spl_image->load_addr); > + if (!err) { > dto. > + debug("Image checksum failed\n"); > + return -EINVAL; > + } > + > + return 0; > } > =20 > static int spl_nand_load_image(struct spl_image_info *spl_image, Lothar Wa=C3=9Fmann