From patchwork Tue Apr 21 07:28:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roese X-Patchwork-Id: 238183 List-Id: U-Boot discussion From: sr at denx.de (Stefan Roese) Date: Tue, 21 Apr 2020 09:28:43 +0200 Subject: [PATCH 19/26 v7] spl: spl_nor: Move legacy image loading into spl_legacy.c In-Reply-To: <20200421072850.4970-1-sr@denx.de> References: <20200421072850.4970-1-sr@denx.de> Message-ID: <20200421072850.4970-20-sr@denx.de> Move the legacy image loading into spl_legacy.c. This makes it easier to extend the legacy image handling with new features that other SPL loaders might use (e.g. spl_spi.c etc). No functional change intended. Signed-off-by: Stefan Roese Cc: Weijie Gao Cc: Daniel Schwierzeck Cc: Simon Goldschmidt Reviewed-by: Daniel Schwierzeck --- Changes in v7: - Don't include "ret" usage cleanup in this patch Changes in v6: - New patch common/spl/spl_legacy.c | 20 ++++++++++++++++++++ common/spl/spl_nor.c | 15 +++++++-------- include/spl.h | 13 +++++++++++++ 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/common/spl/spl_legacy.c b/common/spl/spl_legacy.c index 772135193e..7f00fc8885 100644 --- a/common/spl/spl_legacy.c +++ b/common/spl/spl_legacy.c @@ -51,3 +51,23 @@ int spl_parse_legacy_header(struct spl_image_info *spl_image, return 0; } + +int spl_load_legacy_img(struct spl_image_info *spl_image, + struct spl_load_info *load, ulong header) +{ + struct image_header hdr; + int ret; + + /* Read header into local struct */ + load->read(load, header, sizeof(hdr), &hdr); + + ret = spl_parse_image_header(spl_image, &hdr); + if (ret) + return ret; + + /* Read image */ + load->read(load, header + sizeof(hdr), spl_image->size, + (void *)(unsigned long)spl_image->load_addr); + + return 0; +} diff --git a/common/spl/spl_nor.c b/common/spl/spl_nor.c index b1e79b9ded..217ae71c35 100644 --- a/common/spl/spl_nor.c +++ b/common/spl/spl_nor.c @@ -107,14 +107,13 @@ static int spl_nor_load_image(struct spl_image_info *spl_image, spl_nor_get_uboot_base()); } - ret = spl_parse_image_header(spl_image, - (const struct image_header *)spl_nor_get_uboot_base()); - if (ret) - return ret; - - memcpy((void *)(unsigned long)spl_image->load_addr, - (void *)(spl_nor_get_uboot_base() + sizeof(struct image_header)), - spl_image->size); + /* Legacy image handling */ + if (IS_ENABLED(CONFIG_SPL_LEGACY_IMAGE_SUPPORT)) { + load.bl_len = 1; + load.read = spl_nor_load_read; + return spl_load_legacy_img(spl_image, &load, + spl_nor_get_uboot_base()); + } return 0; } diff --git a/include/spl.h b/include/spl.h index 5d8d14dbf5..a6bb9ba755 100644 --- a/include/spl.h +++ b/include/spl.h @@ -223,6 +223,19 @@ int spl_load_simple_fit(struct spl_image_info *spl_image, #define SPL_COPY_PAYLOAD_ONLY 1 #define SPL_FIT_FOUND 2 +/** + * spl_load_legacy_img() - Loads a legacy image from a device. + * @spl_image: Image description to set up + * @load: Structure containing the information required to load data. + * @header: Pointer to image header (including appended image) + * + * Reads an legacy image from the device. Loads u-boot image to + * specified load address. + * Returns 0 on success. + */ +int spl_load_legacy_img(struct spl_image_info *spl_image, + struct spl_load_info *load, ulong header); + /** * spl_load_imx_container() - Loads a imx container image from a device. * @spl_image: Image description to set up