X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=tools%2Fimximage.c;h=3d3759188692b91323e88603d5a2503714f3b39b;hb=a0573d19885236ba03d412f7788104f75f0dea64;hp=32e4efe423d55e3dc9029042eced877807508762;hpb=f04c53762962280365005c9db12ab561a18f2692;p=karo-tx-uboot.git diff --git a/tools/imximage.c b/tools/imximage.c index 32e4efe423..3d37591886 100644 --- a/tools/imximage.c +++ b/tools/imximage.c @@ -6,10 +6,10 @@ * Marvell Semiconductor * Written-by: Prafulla Wadaskar * - * SPDX-License-Identifier: GPL-2.0+ + * SPDX-License-Identifier: GPL-2.0+ */ -#include "mkimage.h" +#include "imagetool.h" #include #include "imximage.h" @@ -520,7 +520,7 @@ static int imximage_check_image_types(uint8_t type) } static int imximage_verify_header(unsigned char *ptr, int image_size, - struct mkimage_params *params) + struct image_tool_params *params) { struct imx_header *imx_hdr = (struct imx_header *) ptr; @@ -549,7 +549,7 @@ static void imximage_print_header(const void *ptr) } static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd, - struct mkimage_params *params) + struct image_tool_params *params) { struct imx_header *imxhdr = (struct imx_header *)ptr; uint32_t dcd_len; @@ -568,6 +568,13 @@ static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd, /* Parse dcd configuration file */ dcd_len = parse_cfg_file(imxhdr, params->imagename); + if (imximage_version == IMXIMAGE_V2) { + if (imximage_init_loadsize < imximage_ivt_offset + + sizeof(imx_header_v2_t)) + imximage_init_loadsize = imximage_ivt_offset + + sizeof(imx_header_v2_t); + } + /* Set the imx header */ (*set_imx_hdr)(imxhdr, dcd_len, params->ep, imximage_ivt_offset); @@ -580,7 +587,7 @@ static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd, * * The remaining fraction of a block bytes would not be loaded! */ - *header_size_ptr = ROUND(sbuf->st_size, 4096); + *header_size_ptr = ROUND((sbuf->st_size + imximage_ivt_offset), 4096); if (csf_ptr && imximage_csf_size) { *csf_ptr = params->ep - imximage_init_loadsize + @@ -589,7 +596,7 @@ static void imximage_set_header(void *ptr, struct stat *sbuf, int ifd, } } -int imximage_check_params(struct mkimage_params *params) +int imximage_check_params(struct image_tool_params *params) { if (!params) return CFG_INVALID; @@ -611,7 +618,7 @@ int imximage_check_params(struct mkimage_params *params) (params->xflag) || !(strlen(params->imagename)); } -static int imximage_generate(struct mkimage_params *params, +static int imximage_generate(struct image_tool_params *params, struct image_type_params *tparams) { struct imx_header *imxhdr; @@ -687,19 +694,17 @@ static int imximage_generate(struct mkimage_params *params, /* * imximage parameters */ -static struct image_type_params imximage_params = { - .name = "Freescale i.MX Boot Image support", - .header_size = 0, - .hdr = NULL, - .check_image_type = imximage_check_image_types, - .verify_header = imximage_verify_header, - .print_header = imximage_print_header, - .set_header = imximage_set_header, - .check_params = imximage_check_params, - .vrec_header = imximage_generate, -}; - -void init_imx_image_type(void) -{ - mkimage_register(&imximage_params); -} +U_BOOT_IMAGE_TYPE( + imximage, + "Freescale i.MX Boot Image support", + 0, + NULL, + imximage_check_params, + imximage_verify_header, + imximage_print_header, + imximage_set_header, + NULL, + imximage_check_image_types, + NULL, + imximage_generate +);