Hi John, On Tuesday, December 28, 2010 6:17 AM, John Rigby wrote: > Signed-off-by: John Rigby <john.ri...@linaro.org> > --- > common/image.c | 1 + > include/image.h | 1 + > tools/Makefile | 2 + > tools/mkimage.c | 2 + > tools/omapimage.c | 226 > +++++++++++++++++++++++++++++++++++++++++++++++++++++ > tools/omapimage.h | 50 ++++++++++++ 6 files changed, 282 > insertions(+), 0 deletions(-) create mode 100644 tools/omapimage.c > create mode 100644 tools/omapimage.h > > diff --git a/common/image.c b/common/image.c index f63a2ff..4198d76 > 100644 --- a/common/image.c > +++ b/common/image.c > @@ -141,6 +141,7 @@ static const table_entry_t uimage_type[] = { > { IH_TYPE_FLATDT, "flat_dt", "Flat Device Tree", }, > { IH_TYPE_KWBIMAGE, "kwbimage", "Kirkwood Boot Image",}, > { IH_TYPE_IMXIMAGE, "imximage", "Freescale i.MX Boot Image",}, > + { IH_TYPE_OMAPIMAGE, "omapimage", "TI OMAP CH/GP Boot Image",}, > { -1, "", "", }, > }; > [...]
We are working on patch sets to add support for TI816X and TI814X processor series from Texas Instruments. This series includes DM8168/8148, C6A816x and AM389x devices. We were also in the process of extending mkimage to attach a header to the u-boot binary for TI816X and TI814X. We could build upon the mkimage extension that you proposed, so please consider making it more generic. > diff --git a/include/image.h b/include/image.h index > 005e0d2..f74e2b9 100644 --- a/include/image.h > +++ b/include/image.h > @@ -157,6 +157,7 @@ > #define IH_TYPE_FLATDT 8 /* Binary Flat Device Tree Blob > */ > #define IH_TYPE_KWBIMAGE 9 /* Kirkwood Boot Image */ > #define IH_TYPE_IMXIMAGE 10 /* Freescale IMXBoot Image */ > +#define IH_TYPE_OMAPIMAGE 11 /* TI OMAP Config Header Image */ > [...] TIIMAGE instead of OMAPIMAGE sounds more generic. [...] > $(obj)image.o \ > $(obj)imximage.o \ > + $(obj)omapimage.o \ Same here. This change could be done globally in the patch. > $(obj)kwbimage.o \ > $(obj)md5.o \ > $(obj)mkimage.o \ [...] > +/* Header size is CH header rounded up to 512 bytes plus GP header */ > +#define OMAP_CH_HDR_SIZE 512 #define OMAP_GP_HDR_SIZE > (sizeof(struct +gp_header)) #define OMAP_FILE_HDR_SIZE > +(OMAP_CH_HDR_SIZE+OMAP_GP_HDR_SIZE) > + > +static uint8_t omapimage_header[OMAP_FILE_HDR_SIZE]; > + TI816X and TI814X only have GP_HDR. How about adding a config option like CONFIG_OMAP_TIIMAGE to decide upon the final size of the header over here? That config option can also help in conditional compilation of the code which deals with the configuration header. [...] > +static int omapimage_verify_header(unsigned char *ptr, int > image_size, + struct mkimage_params *params) > +{ > + struct ch_toc *toc = (struct ch_toc *)ptr; > + struct gp_header *gph = (struct gp_header > *)(ptr+OMAP_CH_HDR_SIZE); + uint32_t offset, size; > + > + while (toc->section_offset != 0xffffffff > + && toc->section_size != 0xffffffff) { > + offset = toc->section_offset; > + size = toc->section_size; > + if (!offset || !size) > + return -1; > + if (offset >= OMAP_CH_HDR_SIZE || offset+size >= > OMAP_CH_HDR_SIZE) + return -1; > + toc++; > + } > + if (!valid_gph_size(gph->size)) > + return -1; > + if (!valid_gph_load_addr(gph->load_addr)) > + return -1; > + > + return 0; > +} Please consider splitting the various functions/adding checks for CH_HDR and GP_HDR. [...] > + > +/* > + * omapimage parameters > + */ > +static struct image_type_params omapimage_params = { > + .name = "TI OMAP CH/GP Boot Image support", > + .header_size = OMAP_FILE_HDR_SIZE, > + .hdr = (void *)&omapimage_header, > + .check_image_type = omapimage_check_image_types, > + .verify_header = omapimage_verify_header, > + .print_header = omapimage_print_header, > + .set_header = omapimage_set_header, > + .check_params = omapimage_check_params, > +}; > + The set_header and print_header implementations will vary for TI816X and TI814X so protecting them with a macro like CONFIG_OMAP_TIIMAGE will be needed. I think you'll need to add dummy functions also to avoid compilation errors. Adding dummy function also has one more advantage in case 2 different binaries are built from the same tree. Without dummy functions for the spl stage and the full-fledged u-boot binary there will be different commands. Eg: "make u-boot.ti" for the spl stage and just "make" in the second stage. But with dummy functions in place the user can invoke "make u-boot.ti" and not get confused about which command is to be used. [...] > + > +struct ch_toc { > + uint32_t section_offset; > + uint32_t section_size; > + uint8_t unused[12]; > + uint8_t section_name[12]; > +} __attribute__ ((__packed__)); > + > +struct ch_settings { > + uint32_t section_key; > + uint8_t valid; > + uint8_t version; > + uint16_t reserved; > + uint32_t flags; > +} __attribute__ ((__packed__)); > + > +struct gp_header { > + uint32_t size; > + uint32_t load_addr; > +} __attribute__ ((__packed__)); > + [...] TI8168 and TI8148 will require only the gp_header struct. So please consider protecting ch_toc and ch_settings structures with a macro. If it helps, I can share the current code we have for the mkimage extension for TI816X and TI814X. Regards, Vaibhav _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot