From: Stefan Roese Date: Mon, 27 Aug 2012 10:50:58 +0000 (+0200) Subject: SPL: Add option to skip copying of the mkimage header X-Git-Url: http://git.dujemihanovic.xyz/?a=commitdiff_plain;h=022b4975c8dd304fa9f949594784f78601ae07c2;p=u-boot.git SPL: Add option to skip copying of the mkimage header On some system (e.g. powerpc), the load-address and entry-point is located at address 0. So the current approach to load the image (payload) including the header to the address "load-address - 64" can't work here. This patch adds an flag to skip this copying including header to the SPL framework. By setting SPL_COPY_PAYLOAD_ONLY, only the playload will be copied. This will be used by the SPL NOR flash driver on powerpc. Signed-off-by: Stefan Roese Signed-off-by: Tom Rini --- diff --git a/common/spl/spl.c b/common/spl/spl.c index 3156401fd5..95dd9d50cc 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -76,10 +76,23 @@ void spl_parse_image_header(const struct image_header *header) u32 header_size = sizeof(struct image_header); if (image_get_magic(header) == IH_MAGIC) { - spl_image.size = image_get_data_size(header) + header_size; - spl_image.entry_point = image_get_load(header); - /* Load including the header */ - spl_image.load_addr = spl_image.entry_point - header_size; + if (spl_image.flags & SPL_COPY_PAYLOAD_ONLY) { + /* + * On some system (e.g. powerpc), the load-address and + * entry-point is located at address 0. We can't load + * 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); + } else { + spl_image.entry_point = image_get_load(header); + /* Load including the header */ + spl_image.load_addr = spl_image.entry_point - + header_size; + spl_image.size = image_get_data_size(header) + + header_size; + } 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", diff --git a/include/spl.h b/include/spl.h index e40538600e..cf441a16b5 100644 --- a/include/spl.h +++ b/include/spl.h @@ -38,8 +38,11 @@ struct spl_image_info { u32 load_addr; u32 entry_point; u32 size; + u32 flags; }; +#define SPL_COPY_PAYLOAD_ONLY 1 + extern struct spl_image_info spl_image; extern u32 *boot_params_ptr;