static int spl_ram_load_image(void) { struct image_header *header; header = (struct image_header *)CONFIG_SPL_LOAD_FIT_ADDRESS; if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && image_get_magic(header) == FDT_MAGIC) { struct spl_load_info load; debug("Found FIT\n"); load.bl_len = 1; load.read = spl_ram_load_read; spl_load_simple_fit(&load, 0, header); } else { debug("Legacy image\n"); /* * Get the header. It will point to an address defined by * handoff which will tell where the image located inside * the flash. For now, it will temporary fixed to address * pointed by U-Boot. */ header = (struct image_header *) (CONFIG_SYS_TEXT_BASE - sizeof(struct image_header)); spl_parse_image_header(header); } return 0; }
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; if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && image_get_magic(header) == FDT_MAGIC) { struct spl_load_info load; debug("Found FIT\n"); load.dev = NULL; load.priv = NULL; load.filename = NULL; load.bl_len = 1; load.read = spl_nand_fit_read; return spl_load_simple_fit(&load, offset, header); } else { err = spl_parse_image_header(header); if (err) return err; return nand_spl_load_image(offset, spl_image.size, (void *)(ulong)spl_image.load_addr); } }
int spl_load_image_fat(struct spl_image_info *spl_image, struct blk_desc *block_dev, int partition, const char *filename) { int err; struct image_header *header; err = spl_register_fat_device(block_dev, partition); if (err) goto end; header = (struct image_header *)(CONFIG_SYS_TEXT_BASE - sizeof(struct image_header)); err = file_fat_read(filename, header, sizeof(struct image_header)); if (err <= 0) goto end; if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && image_get_magic(header) == FDT_MAGIC) { struct spl_load_info load; debug("Found FIT\n"); load.read = spl_fit_read; load.bl_len = 1; load.filename = (void *)filename; load.priv = NULL; return spl_load_simple_fit(spl_image, &load, 0, header); } else { err = spl_parse_image_header(spl_image, header); if (err) goto end; err = file_fat_read(filename, (u8 *)(uintptr_t)spl_image->load_addr, 0); } end: #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT if (err <= 0) printf("%s: error reading image %s, err - %d\n", __func__, filename, err); #endif return (err <= 0); }
static int spl_ram_load_image(struct spl_image_info *spl_image, struct spl_boot_device *bootdev) { struct image_header *header; header = (struct image_header *)CONFIG_SPL_LOAD_FIT_ADDRESS; #if CONFIG_IS_ENABLED(DFU_SUPPORT) if (bootdev->boot_device == BOOT_DEVICE_DFU) spl_dfu_cmd(0, "dfu_alt_info_ram", "ram", "0"); #endif if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && image_get_magic(header) == FDT_MAGIC) { struct spl_load_info load; debug("Found FIT\n"); load.bl_len = 1; load.read = spl_ram_load_read; spl_load_simple_fit(spl_image, &load, 0, header); } else { ulong u_boot_pos = binman_sym(ulong, u_boot_any, pos); debug("Legacy image\n"); /* * Get the header. It will point to an address defined by * handoff which will tell where the image located inside * the flash. */ debug("u_boot_pos = %lx\n", u_boot_pos); if (u_boot_pos == BINMAN_SYM_MISSING) { /* * No binman support or no information. For now, fix it * to the address pointed to by U-Boot. */ u_boot_pos = CONFIG_SYS_TEXT_BASE - sizeof(struct image_header); } header = (struct image_header *)map_sysmem(u_boot_pos, 0); spl_parse_image_header(spl_image, header); } return 0; }
int spl_net_load_image(const char *device) { struct image_header *header; int rv; env_init(); env_relocate(); setenv("autoload", "yes"); if (IS_ENABLED(CONFIG_SPL_LOAD_FIT)) load_addr = CONFIG_SPL_LOAD_FIT_ADDRESS; else load_addr = CONFIG_SYS_TEXT_BASE - sizeof(struct image_header); rv = eth_initialize(); if (rv == 0) { printf("No Ethernet devices found\n"); return -ENODEV; } if (device) setenv("ethact", device); rv = net_loop(BOOTP); if (rv < 0) { printf("Problem booting with BOOTP\n"); return rv; } header = (struct image_header *)load_addr; if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && image_get_magic(header) == FDT_MAGIC) { struct spl_load_info load; debug("Found FIT\n"); load.bl_len = 1; load.read = spl_net_load_read; spl_load_simple_fit(&load, 0, header); } else { spl_parse_image_header((struct image_header *)load_addr); } return 0; }
static int spl_net_load_image(struct spl_image_info *spl_image, struct spl_boot_device *bootdev) { struct image_header *header = (struct image_header *)load_addr; int rv; env_init(); env_relocate(); env_set("autoload", "yes"); rv = eth_initialize(); if (rv == 0) { printf("No Ethernet devices found\n"); return -ENODEV; } if (bootdev->boot_device_name) env_set("ethact", bootdev->boot_device_name); rv = net_loop(BOOTP); if (rv < 0) { printf("Problem booting with BOOTP\n"); return rv; } if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && image_get_magic(header) == FDT_MAGIC) { struct spl_load_info load; debug("Found FIT\n"); load.bl_len = 1; load.read = spl_net_load_read; rv = spl_load_simple_fit(spl_image, &load, 0, header); } else { debug("Legacy image\n"); rv = spl_parse_image_header(spl_image, header); if (rv) return rv; memcpy((void *)spl_image->load_addr, header, spl_image->size); } return rv; }
static int spl_spi_load_image(struct spl_image_info *spl_image, struct spl_boot_device *bootdev) { int ret = 0; struct image_header *header; header = (struct image_header *)(CONFIG_SYS_TEXT_BASE); spi0_init(); spi0_read_data((void *)header, CONFIG_SYS_SPI_U_BOOT_OFFS, 0x40); if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && image_get_magic(header) == FDT_MAGIC) { struct spl_load_info load; debug("Found FIT image\n"); load.dev = NULL; load.priv = NULL; load.filename = NULL; load.bl_len = 1; load.read = spi_load_read; ret = spl_load_simple_fit(spl_image, &load, CONFIG_SYS_SPI_U_BOOT_OFFS, header); } else { ret = spl_parse_image_header(spl_image, header); if (ret) return ret; spi0_read_data((void *)spl_image->load_addr, CONFIG_SYS_SPI_U_BOOT_OFFS, spl_image->size); } spi0_deinit(); return ret; }