X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=common%2Fspl%2Fspl_nand.c;h=3e2c07405003931c2bc30817f28bcf000140e917;hb=9cddb4fe0266484aab9babdd2ebe650021644ea9;hp=9da021862eaf9c67c4e680564222b9aae1f319bd;hpb=8b485ba12b0defa0c4ed3559789250238f8331a8;p=oweals%2Fu-boot.git diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c index 9da021862e..3e2c074050 100644 --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c @@ -10,8 +10,36 @@ #include #include -void spl_nand_load_image(void) +#if defined(CONFIG_SPL_NAND_RAW_ONLY) +int spl_nand_load_image(void) { + nand_init(); + + nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS, + CONFIG_SYS_NAND_U_BOOT_SIZE, + (void *)CONFIG_SYS_NAND_U_BOOT_DST); + spl_set_header_raw_uboot(); + nand_deselect(); + + return 0; +} +#else +static int spl_nand_load_element(int offset, struct image_header *header) +{ + int err; + + err = nand_spl_load_image(offset, sizeof(*header), (void *)header); + if (err) + return err; + + spl_parse_image_header(header); + return nand_spl_load_image(offset, spl_image.size, + (void *)(unsigned long)spl_image.load_addr); +} + +int spl_nand_load_image(void) +{ + int err; struct image_header *header; int *src __attribute__((unused)); int *dst __attribute__((unused)); @@ -44,14 +72,16 @@ void spl_nand_load_image(void) /* load linux */ nand_spl_load_image(CONFIG_SYS_NAND_SPL_KERNEL_OFFS, - CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); + sizeof(*header), (void *)header); spl_parse_image_header(header); if (header->ih_os == IH_OS_LINUX) { /* happy - was a linux */ - nand_spl_load_image(CONFIG_SYS_NAND_SPL_KERNEL_OFFS, - spl_image.size, (void *)spl_image.load_addr); + err = nand_spl_load_image( + CONFIG_SYS_NAND_SPL_KERNEL_OFFS, + spl_image.size, + (void *)spl_image.load_addr); nand_deselect(); - return; + return err; } else { puts("The Expected Linux image was not " "found. Please check your NAND " @@ -61,24 +91,14 @@ void spl_nand_load_image(void) } #endif #ifdef CONFIG_NAND_ENV_DST - nand_spl_load_image(CONFIG_ENV_OFFSET, - CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); - spl_parse_image_header(header); - nand_spl_load_image(CONFIG_ENV_OFFSET, spl_image.size, - (void *)spl_image.load_addr); + spl_nand_load_element(CONFIG_ENV_OFFSET, header); #ifdef CONFIG_ENV_OFFSET_REDUND - nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, - CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); - spl_parse_image_header(header); - nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, spl_image.size, - (void *)spl_image.load_addr); + spl_nand_load_element(CONFIG_ENV_OFFSET_REDUND, header); #endif #endif /* Load u-boot */ - nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS, - CONFIG_SYS_NAND_PAGE_SIZE, (void *)header); - spl_parse_image_header(header); - nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS, - spl_image.size, (void *)spl_image.load_addr); + err = spl_nand_load_element(CONFIG_SYS_NAND_U_BOOT_OFFS, header); nand_deselect(); + return err; } +#endif