spl: spl_nor: Move legacy image loading into spl_legacy.c
authorStefan Roese <sr@denx.de>
Tue, 21 Apr 2020 07:28:43 +0000 (09:28 +0200)
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Mon, 27 Apr 2020 18:29:33 +0000 (20:29 +0200)
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 <sr@denx.de>
Cc: Weijie Gao <weijie.gao@mediatek.com>
Cc: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
Cc: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
common/spl/spl_legacy.c
common/spl/spl_nor.c
include/spl.h

index 772135193e33b1ef765d2488babfd5b32898be24..7f00fc88850998ead78b91e8b82e87d1906ef8c9 100644 (file)
@@ -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;
+}
index b1e79b9ded6258f44070e4e4d64bcddd8ba184a3..217ae71c35af82b178ead95d6024f911a7ef1c39 100644 (file)
@@ -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;
 }
index 8b15cd4914ce4a4c32299ebb9d6e6a61d72171cc..6bf9fd8bebb6de440909c785cf3ba4cc4865308b 100644 (file)
@@ -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