Merge branch '2019-10-11-ti-imports'
[oweals/u-boot.git] / common / spl / spl_nand.c
index 2722fd3860e55a149ffa1c1aee123db0244a4389..5f8a111a2f064808dadead4d2e30e1ae0edd354a 100644 (file)
 #include <linux/libfdt_env.h>
 #include <fdt.h>
 
+uint32_t __weak spl_nand_get_uboot_raw_page(void)
+{
+       return CONFIG_SYS_NAND_U_BOOT_OFFS;
+}
+
 #if defined(CONFIG_SPL_NAND_RAW_ONLY)
 static int spl_nand_load_image(struct spl_image_info *spl_image,
                        struct spl_boot_device *bootdev)
 {
        nand_init();
 
-       nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS,
+       printf("Loading U-Boot from 0x%08x (size 0x%08x) to 0x%08x\n",
+              CONFIG_SYS_NAND_U_BOOT_OFFS, CONFIG_SYS_NAND_U_BOOT_SIZE,
+              CONFIG_SYS_NAND_U_BOOT_DST);
+
+       nand_spl_load_image(spl_nand_get_uboot_raw_page(),
                            CONFIG_SYS_NAND_U_BOOT_SIZE,
                            (void *)CONFIG_SYS_NAND_U_BOOT_DST);
        spl_set_header_raw_uboot(spl_image);
@@ -59,6 +68,15 @@ 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 if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER)) {
+               struct spl_load_info load;
+
+               load.dev = NULL;
+               load.priv = NULL;
+               load.filename = NULL;
+               load.bl_len = 1;
+               load.read = spl_nand_fit_read;
+               return spl_load_imx_container(spl_image, &load, offset);
        } else {
                err = spl_parse_image_header(spl_image, header);
                if (err)
@@ -83,8 +101,8 @@ static int spl_nand_load_image(struct spl_image_info *spl_image,
 #endif
        nand_init();
 
-       /*use CONFIG_SYS_TEXT_BASE as temporary storage area */
-       header = (struct image_header *)(CONFIG_SYS_TEXT_BASE);
+       header = spl_get_load_buffer(0, sizeof(*header));
+
 #ifdef CONFIG_SPL_OS_BOOT
        if (!spl_start_uboot()) {
                /*
@@ -135,7 +153,7 @@ static int spl_nand_load_image(struct spl_image_info *spl_image,
 #endif
 #endif
        /* Load u-boot */
-       err = spl_nand_load_element(spl_image, CONFIG_SYS_NAND_U_BOOT_OFFS,
+       err = spl_nand_load_element(spl_image, spl_nand_get_uboot_raw_page(),
                                    header);
 #ifdef CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND
 #if CONFIG_SYS_NAND_U_BOOT_OFFS != CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND