|
@@ -91,33 +91,34 @@ void spl_set_header_raw_uboot(struct spl_image_info *spl_image)
|
|
spl_image->name = "U-Boot";
|
|
spl_image->name = "U-Boot";
|
|
}
|
|
}
|
|
|
|
|
|
-int spl_parse_image_header(const struct image_header *header)
|
|
|
|
|
|
+int spl_parse_image_header(struct spl_image_info *spl_image,
|
|
|
|
+ const struct image_header *header)
|
|
{
|
|
{
|
|
u32 header_size = sizeof(struct image_header);
|
|
u32 header_size = sizeof(struct image_header);
|
|
|
|
|
|
if (image_get_magic(header) == IH_MAGIC) {
|
|
if (image_get_magic(header) == IH_MAGIC) {
|
|
- if (spl_image.flags & SPL_COPY_PAYLOAD_ONLY) {
|
|
|
|
|
|
+ if (spl_image->flags & SPL_COPY_PAYLOAD_ONLY) {
|
|
/*
|
|
/*
|
|
* On some system (e.g. powerpc), the load-address and
|
|
* On some system (e.g. powerpc), the load-address and
|
|
* entry-point is located at address 0. We can't load
|
|
* entry-point is located at address 0. We can't load
|
|
* to 0-0x40. So skip header in this case.
|
|
* to 0-0x40. So skip header in this case.
|
|
*/
|
|
*/
|
|
- spl_image.load_addr = image_get_load(header);
|
|
|
|
- spl_image.entry_point = image_get_ep(header);
|
|
|
|
- spl_image.size = image_get_data_size(header);
|
|
|
|
|
|
+ spl_image->load_addr = image_get_load(header);
|
|
|
|
+ spl_image->entry_point = image_get_ep(header);
|
|
|
|
+ spl_image->size = image_get_data_size(header);
|
|
} else {
|
|
} else {
|
|
- spl_image.entry_point = image_get_load(header);
|
|
|
|
|
|
+ spl_image->entry_point = image_get_load(header);
|
|
/* Load including the header */
|
|
/* Load including the header */
|
|
- spl_image.load_addr = spl_image.entry_point -
|
|
|
|
|
|
+ spl_image->load_addr = spl_image->entry_point -
|
|
header_size;
|
|
header_size;
|
|
- spl_image.size = image_get_data_size(header) +
|
|
|
|
|
|
+ spl_image->size = image_get_data_size(header) +
|
|
header_size;
|
|
header_size;
|
|
}
|
|
}
|
|
- spl_image.os = image_get_os(header);
|
|
|
|
- spl_image.name = image_get_name(header);
|
|
|
|
|
|
+ spl_image->os = image_get_os(header);
|
|
|
|
+ spl_image->name = image_get_name(header);
|
|
debug("spl: payload image: %.*s load addr: 0x%x size: %d\n",
|
|
debug("spl: payload image: %.*s load addr: 0x%x size: %d\n",
|
|
- (int)sizeof(spl_image.name), spl_image.name,
|
|
|
|
- spl_image.load_addr, spl_image.size);
|
|
|
|
|
|
+ (int)sizeof(spl_image->name), spl_image->name,
|
|
|
|
+ spl_image->load_addr, spl_image->size);
|
|
} else {
|
|
} else {
|
|
#ifdef CONFIG_SPL_PANIC_ON_RAW_IMAGE
|
|
#ifdef CONFIG_SPL_PANIC_ON_RAW_IMAGE
|
|
/*
|
|
/*
|
|
@@ -135,13 +136,13 @@ int spl_parse_image_header(const struct image_header *header)
|
|
ulong start, end;
|
|
ulong start, end;
|
|
|
|
|
|
if (!bootz_setup((ulong)header, &start, &end)) {
|
|
if (!bootz_setup((ulong)header, &start, &end)) {
|
|
- spl_image.name = "Linux";
|
|
|
|
- spl_image.os = IH_OS_LINUX;
|
|
|
|
- spl_image.load_addr = CONFIG_SYS_LOAD_ADDR;
|
|
|
|
- spl_image.entry_point = CONFIG_SYS_LOAD_ADDR;
|
|
|
|
- spl_image.size = end - start;
|
|
|
|
|
|
+ spl_image->name = "Linux";
|
|
|
|
+ spl_image->os = IH_OS_LINUX;
|
|
|
|
+ spl_image->load_addr = CONFIG_SYS_LOAD_ADDR;
|
|
|
|
+ spl_image->entry_point = CONFIG_SYS_LOAD_ADDR;
|
|
|
|
+ spl_image->size = end - start;
|
|
debug("spl: payload zImage, load addr: 0x%x size: %d\n",
|
|
debug("spl: payload zImage, load addr: 0x%x size: %d\n",
|
|
- spl_image.load_addr, spl_image.size);
|
|
|
|
|
|
+ spl_image->load_addr, spl_image->size);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
@@ -153,7 +154,7 @@ int spl_parse_image_header(const struct image_header *header)
|
|
/* Signature not found - assume u-boot.bin */
|
|
/* Signature not found - assume u-boot.bin */
|
|
debug("mkimage signature not found - ih_magic = %x\n",
|
|
debug("mkimage signature not found - ih_magic = %x\n",
|
|
header->ih_magic);
|
|
header->ih_magic);
|
|
- spl_set_header_raw_uboot(&spl_image);
|
|
|
|
|
|
+ spl_set_header_raw_uboot(spl_image);
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
return 0;
|
|
return 0;
|
|
@@ -209,7 +210,7 @@ static int spl_ram_load_image(void)
|
|
header = (struct image_header *)
|
|
header = (struct image_header *)
|
|
(CONFIG_SYS_TEXT_BASE - sizeof(struct image_header));
|
|
(CONFIG_SYS_TEXT_BASE - sizeof(struct image_header));
|
|
|
|
|
|
- spl_parse_image_header(header);
|
|
|
|
|
|
+ spl_parse_image_header(&spl_image, header);
|
|
}
|
|
}
|
|
|
|
|
|
return 0;
|
|
return 0;
|