X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=inline;f=common%2Fspl%2Fspl_nand.c;h=5f8a111a2f064808dadead4d2e30e1ae0edd354a;hb=b40745e5c29a45ebe7efce53a1e3ba751d0ef351;hp=cd39f9be9d3caa0fea49f5e6ece7255f1ddbbd69;hpb=ebc4ef61d76fc182773fe225151adc9b913c62eb;p=oweals%2Fu-boot.git diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c index cd39f9be9d..5f8a111a2f 100644 --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c @@ -1,24 +1,32 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2011 * Corscience GmbH & Co. KG - Simon Schwarz - * - * SPDX-License-Identifier: GPL-2.0+ */ #include #include #include #include #include -#include +#include #include +uint32_t __weak spl_nand_get_uboot_raw_page(void) +{ + return CONFIG_SYS_NAND_U_BOOT_OFFS; +} + #if defined(CONFIG_SPL_NAND_RAW_ONLY) -int spl_nand_load_image(struct spl_image_info *spl_image, +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); @@ -60,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) @@ -84,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()) { /* @@ -136,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