aboutsummaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorSean Anderson2023-10-14 16:47:45 -0400
committerTom Rini2023-10-17 20:50:52 -0400
commit12b3339070bcab746355647a6aae7498f28c4add (patch)
tree52d5be93e9e388e681164ff7a928caea9fa1d574 /arch
parentab12179b3e9fa8a9c54f9cd5ad6b2c0c185a2191 (diff)
Move i.MX8 container image loading support to common/spl
To facilitate testing loading i.MX8 container images, move the parse-container code to common/spl. Signed-off-by: Sean Anderson <seanga2@gmail.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-imx/Kconfig13
-rw-r--r--arch/arm/mach-imx/Makefile2
-rw-r--r--arch/arm/mach-imx/parse-container.c158
3 files changed, 1 insertions, 172 deletions
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index 266bb20df9d..08ab7069187 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -194,19 +194,6 @@ config IMX_DCD_ADDR
This information is shared with the user via mkimage -l just so the
image can be signed.
-config SPL_LOAD_IMX_CONTAINER
- bool "Enable SPL loading U-Boot as a i.MX Container image"
- depends on SPL
- help
- This is to let SPL could load i.MX Container image
-
-config IMX_CONTAINER_CFG
- string "i.MX Container config file"
- depends on SPL
- help
- This is to specific the cfg file for generating container
- image which will be loaded by SPL.
-
config IOMUX_LPSR
bool
diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
index 6904cf38802..a3b44c93e3d 100644
--- a/arch/arm/mach-imx/Makefile
+++ b/arch/arm/mach-imx/Makefile
@@ -79,7 +79,7 @@ obj-$(CONFIG_CMD_NANDBCB) += cmd_nandbcb.o
endif
ifeq ($(CONFIG_SPL_BUILD),y)
-obj-$(CONFIG_SPL_LOAD_IMX_CONTAINER) += image-container.o parse-container.o
+obj-$(CONFIG_SPL_LOAD_IMX_CONTAINER) += image-container.o
endif
ifeq ($(SOC),$(filter $(SOC),imx8ulp imx9))
diff --git a/arch/arm/mach-imx/parse-container.c b/arch/arm/mach-imx/parse-container.c
deleted file mode 100644
index c29cb15f55e..00000000000
--- a/arch/arm/mach-imx/parse-container.c
+++ /dev/null
@@ -1,158 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright 2018-2021 NXP
- */
-
-#define LOG_CATEGORY LOGC_ARCH
-#include <common.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <imx_container.h>
-#include <log.h>
-#include <spl.h>
-#ifdef CONFIG_AHAB_BOOT
-#include <asm/mach-imx/ahab.h>
-#endif
-
-static struct boot_img_t *read_auth_image(struct spl_image_info *spl_image,
- struct spl_load_info *info,
- struct container_hdr *container,
- int image_index,
- u32 container_sector)
-{
- struct boot_img_t *images;
- ulong sector;
- u32 sectors;
-
- if (image_index > container->num_images) {
- debug("Invalid image number\n");
- return NULL;
- }
-
- images = (struct boot_img_t *)((u8 *)container +
- sizeof(struct container_hdr));
-
- if (images[image_index].offset % info->bl_len) {
- printf("%s: image%d offset not aligned to %u\n",
- __func__, image_index, info->bl_len);
- return NULL;
- }
-
- sectors = roundup(images[image_index].size, info->bl_len) /
- info->bl_len;
- sector = images[image_index].offset / info->bl_len +
- container_sector;
-
- debug("%s: container: %p sector: %lu sectors: %u\n", __func__,
- container, sector, sectors);
- if (info->read(info, sector, sectors,
- (void *)images[image_index].dst) != sectors) {
- printf("%s wrong\n", __func__);
- return NULL;
- }
-
-#ifdef CONFIG_AHAB_BOOT
- if (ahab_verify_cntr_image(&images[image_index], image_index))
- return NULL;
-#endif
-
- return &images[image_index];
-}
-
-static int read_auth_container(struct spl_image_info *spl_image,
- struct spl_load_info *info, ulong sector)
-{
- struct container_hdr *container = NULL;
- u16 length;
- u32 sectors;
- int i, size, ret = 0;
-
- size = roundup(CONTAINER_HDR_ALIGNMENT, info->bl_len);
- sectors = size / info->bl_len;
-
- /*
- * It will not override the ATF code, so safe to use it here,
- * no need malloc
- */
- container = malloc(size);
- if (!container)
- return -ENOMEM;
-
- debug("%s: container: %p sector: %lu sectors: %u\n", __func__,
- container, sector, sectors);
- if (info->read(info, sector, sectors, container) != sectors) {
- ret = -EIO;
- goto end;
- }
-
- if (!valid_container_hdr(container)) {
- log_err("Wrong container header\n");
- ret = -ENOENT;
- goto end;
- }
-
- if (!container->num_images) {
- log_err("Wrong container, no image found\n");
- ret = -ENOENT;
- goto end;
- }
-
- length = container->length_lsb + (container->length_msb << 8);
- debug("Container length %u\n", length);
-
- if (length > CONTAINER_HDR_ALIGNMENT) {
- size = roundup(length, info->bl_len);
- sectors = size / info->bl_len;
-
- free(container);
- container = malloc(size);
- if (!container)
- return -ENOMEM;
-
- debug("%s: container: %p sector: %lu sectors: %u\n",
- __func__, container, sector, sectors);
- if (info->read(info, sector, sectors, container) !=
- sectors) {
- ret = -EIO;
- goto end;
- }
- }
-
-#ifdef CONFIG_AHAB_BOOT
- ret = ahab_auth_cntr_hdr(container, length);
- if (ret)
- goto end_auth;
-#endif
-
- for (i = 0; i < container->num_images; i++) {
- struct boot_img_t *image = read_auth_image(spl_image, info,
- container, i,
- sector);
-
- if (!image) {
- ret = -EINVAL;
- goto end_auth;
- }
-
- if (i == 0) {
- spl_image->load_addr = image->dst;
- spl_image->entry_point = image->entry;
- }
- }
-
-end_auth:
-#ifdef CONFIG_AHAB_BOOT
- ahab_auth_release();
-#endif
-
-end:
- free(container);
-
- return ret;
-}
-
-int spl_load_imx_container(struct spl_image_info *spl_image,
- struct spl_load_info *info, ulong sector)
-{
- return read_auth_container(spl_image, info, sector);
-}