summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-imx/imx8/parser.c16
-rw-r--r--common/spl/spl_spi.c15
2 files changed, 31 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/imx8/parser.c b/arch/arm/mach-imx/imx8/parser.c
index 5186b1c83c..7ddb1702bf 100644
--- a/arch/arm/mach-imx/imx8/parser.c
+++ b/arch/arm/mach-imx/imx8/parser.c
@@ -230,3 +230,19 @@ int mmc_load_image_parse_container(struct spl_image_info *spl_image,
return ret;
}
+
+int spi_load_image_parse_container(struct spl_image_info *spl_image,
+ struct spi_flash *flash,
+ unsigned long offset)
+{
+ int ret = 0;
+
+ current_dev_type = QSPI_DEV;
+ device = flash;
+
+ start_offset = offset;
+
+ ret = read_auth_container(spl_image);
+
+ return ret;
+}
diff --git a/common/spl/spl_spi.c b/common/spl/spl_spi.c
index c26896ed65..5551397e95 100644
--- a/common/spl/spl_spi.c
+++ b/common/spl/spl_spi.c
@@ -58,6 +58,15 @@ unsigned long __weak spl_spi_get_uboot_raw_sector(struct spi_flash *flash)
}
#endif
+#ifdef CONFIG_PARSE_CONTAINER
+int __weak spi_load_image_parse_container(struct spl_image_info *spl_image,
+ struct spi_flash *flash,
+ unsigned long offset)
+{
+ return -EINVAL;
+}
+#endif
+
static ulong spl_spi_fit_read(struct spl_load_info *load, ulong sector,
ulong count, void *buf)
{
@@ -134,12 +143,18 @@ static int spl_spi_load_image(struct spl_image_info *spl_image,
payload_offs,
header);
} else {
+#ifdef CONFIG_PARSE_CONTAINER
+ err = spi_load_image_parse_container(spl_image,
+ flash,
+ payload_offs);
+#else
err = spl_parse_image_header(spl_image, header);
if (err)
return err;
err = spi_flash_read(flash, payload_offs,
spl_image->size,
(void *)spl_image->load_addr);
+#endif
}
}