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

Lothar Waßmann LW at KARO-electronics.de
Wed Jul 4 14:19:18 UTC 2018


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
> 
> Change-Id: Id6fc221c5cc08934b7324dd5d319b93c56e2e678
> Signed-off-by: Michael Trimarchi <michael at 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) {
>
Why not simply:
	if (!image_check_hcrc(...) {
> +		debug("Header checksum failed\n");
> +		return -EINVAL;
> +	}
> +	err = image_check_dcrc((const image_header_t *)spl_image->load_addr);
> +	if (!err) {
>
dto.

> +		debug("Image checksum failed\n");
> +		return -EINVAL;
> +	}
> +
> +	return 0;
>  }
>  
>  static int spl_nand_load_image(struct spl_image_info *spl_image,


Lothar Waßmann


More information about the U-Boot mailing list