spl: Fix redundant image of uboot
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 <[email protected]>
--- common/spl/spl_nand.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-)
common/spl/spl_nand.c +25 -9
@@ -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,
Signature · 1 line
2.7.4
RFC PATCH 2/2 spl: Make the spl_nand_load_image static
Signed-off-by Michael Trimarchi <[email protected]>
--- common/spl/spl_nand.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
common/spl/spl_nand.c +1 -1
@@ -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 ();
Signature · 1 line
2.7.4