static void print_hdr_v1(struct imx_header *imx_hdr) { imx_header_v1_t *hdr_v1 = &imx_hdr->header.hdr_v1; flash_header_v1_t *fhdr_v1 = &hdr_v1->fhdr; dcd_v1_t *dcd_v1 = &hdr_v1->dcd_table; uint32_t size, length, ver; size = dcd_v1->preamble.length; if (size > (MAX_HW_CFG_SIZE_V1 * sizeof(dcd_type_addr_data_t))) { fprintf(stderr, "Error: Image corrupt DCD size %d exceed maximum %d\n", (uint32_t)(size / sizeof(dcd_type_addr_data_t)), MAX_HW_CFG_SIZE_V1); exit(EXIT_FAILURE); } length = dcd_v1->preamble.length / sizeof(dcd_type_addr_data_t); ver = detect_imximage_version(imx_hdr); printf("Image Type: Freescale IMX Boot Image\n"); printf("Image Ver: %x", ver); printf("%s\n", get_table_entry_name(imximage_versions, NULL, ver)); printf("Data Size: "); genimg_print_size(dcd_v1->addr_data[length].type); printf("Load Address: %08x\n", (uint32_t)fhdr_v1->app_dest_ptr); printf("Entry Point: %08x\n", (uint32_t)fhdr_v1->app_code_jump_vector); }
static void print_hdr_v2(struct imx_header *imx_hdr) { imx_header_v2_t *hdr_v2 = &imx_hdr->header.hdr_v2; flash_header_v2_t *fhdr_v2 = &hdr_v2->fhdr; dcd_v2_t *dcd_v2 = &hdr_v2->dcd_table; uint32_t size, version; size = be16_to_cpu(dcd_v2->header.length) - 8; if (size > (MAX_HW_CFG_SIZE_V2 * sizeof(dcd_addr_data_t))) { fprintf(stderr, "Error: Image corrupt DCD size %d exceed maximum %d\n", (uint32_t)(size / sizeof(dcd_addr_data_t)), MAX_HW_CFG_SIZE_V2); exit(EXIT_FAILURE); } version = detect_imximage_version(imx_hdr); printf("Image Type: Freescale IMX Boot Image\n"); printf("Image Ver: %x", version); printf("%s\n", get_table_entry_name(imximage_versions, NULL, version)); printf("Data Size: "); genimg_print_size(hdr_v2->boot_data.size); printf("Load Address: %08x\n", (uint32_t)fhdr_v2->boot_data_ptr); printf("Entry Point: %08x\n", (uint32_t)fhdr_v2->entry); if (fhdr_v2->csf && (imximage_ivt_offset != UNDEFINED) && (imximage_csf_size != UNDEFINED)) { printf("HAB Blocks: %08x %08x %08x\n", (uint32_t)fhdr_v2->self, 0, hdr_v2->boot_data.size - imximage_ivt_offset - imximage_csf_size); } }
static void kwbimage_print_header (const void *ptr) { struct kwb_header *hdr = (struct kwb_header *) ptr; bhr_t *mhdr = &hdr->kwb_hdr; char *name = get_table_entry_name (kwbimage_bootops, "Kwbimage boot option", (int) mhdr->blockid); printf ("Image Type: Kirkwood Boot from %s Image\n", name); printf ("Data Size: "); genimg_print_size (mhdr->blocksize - sizeof(uint32_t)); printf ("Load Address: %08x\n", mhdr->destaddr); printf ("Entry Point: %08x\n", mhdr->execaddr); }
const char *image_get_comp_name(uint8_t comp) { return get_table_entry_name(comp_name, "Unknown Compression", comp); }
const char *image_get_type_name(uint8_t type) { return get_table_entry_name(type_name, "Unknown Image", type); }
const char *image_get_arch_name(uint8_t arch) { return get_table_entry_name(arch_name, "Unknown Architecture", arch); }
const char *image_get_os_name(uint8_t os) { return get_table_entry_name(os_name, "Unknown OS", os); }
const char *genimg_get_comp_name(uint8_t comp) { return (get_table_entry_name(uimage_comp, "Unknown Compression", comp)); }
const char *genimg_get_type_name(uint8_t type) { return (get_table_entry_name(uimage_type, "Unknown Image", type)); }
const char *genimg_get_arch_name(uint8_t arch) { return (get_table_entry_name(uimage_arch, "Unknown Architecture", arch)); }
const char *genimg_get_os_name(uint8_t os) { return (get_table_entry_name(uimage_os, "Unknown OS", os)); }
static void print_hdr_v2(struct imx_header *imx_hdr) { imx_header_v2_t *hdr_v2 = &imx_hdr->header.hdr_v2; flash_header_v2_t *fhdr_v2 = &hdr_v2->fhdr; dcd_v2_t *dcd_v2 = &hdr_v2->data.dcd_table; uint32_t size, version, plugin; plugin = hdr_v2->boot_data.plugin; if (!plugin) { size = be16_to_cpu(dcd_v2->header.length); if (size > (MAX_HW_CFG_SIZE_V2 * sizeof(dcd_addr_data_t))) { fprintf(stderr, "Error: Image corrupt DCD size %d exceed maximum %d\n", (uint32_t)(size / sizeof(dcd_addr_data_t)), MAX_HW_CFG_SIZE_V2); exit(EXIT_FAILURE); } } version = detect_imximage_version(imx_hdr); printf("Image Type: Freescale IMX Boot Image\n"); printf("Image Ver: %x", version); printf("%s\n", get_table_entry_name(imximage_versions, NULL, version)); printf("Mode: %s\n", plugin ? "PLUGIN" : "DCD"); if (!plugin) { printf("Data Size: "); genimg_print_size(hdr_v2->boot_data.size); printf("Load Address: %08x\n", (uint32_t)fhdr_v2->boot_data_ptr); printf("Entry Point: %08x\n", (uint32_t)fhdr_v2->entry); if (fhdr_v2->csf) { uint16_t dcdlen; int offs; dcdlen = hdr_v2->data.dcd_table.header.length; offs = (char *)&hdr_v2->data.dcd_table - (char *)hdr_v2; /* * The HAB block is the first part of the image, from * start of IVT header (fhdr_v2->self) to the start of * the CSF block (fhdr_v2->csf). So HAB size is * calculated as: * HAB_size = fhdr_v2->csf - fhdr_v2->self */ printf("HAB Blocks: 0x%08x 0x%08x 0x%08x\n", (uint32_t)fhdr_v2->self, 0, (uint32_t)(fhdr_v2->csf - fhdr_v2->self)); printf("DCD Blocks: 0x00910000 0x%08x 0x%08x\n", offs, be16_to_cpu(dcdlen)); } } else { imx_header_v2_t *next_hdr_v2; flash_header_v2_t *next_fhdr_v2; /*First Header*/ printf("Plugin Data Size: "); genimg_print_size(hdr_v2->boot_data.size); printf("Plugin Code Size: "); genimg_print_size(imximage_plugin_size); printf("Plugin Load Address: %08x\n", hdr_v2->boot_data.start); printf("Plugin Entry Point: %08x\n", (uint32_t)fhdr_v2->entry); /*Second Header*/ next_hdr_v2 = (imx_header_v2_t *)((char *)hdr_v2 + imximage_plugin_size); next_fhdr_v2 = &next_hdr_v2->fhdr; printf("U-Boot Data Size: "); genimg_print_size(next_hdr_v2->boot_data.size); printf("U-Boot Load Address: %08x\n", next_hdr_v2->boot_data.start); printf("U-Boot Entry Point: %08x\n", (uint32_t)next_fhdr_v2->entry); } }
static void print_hdr_v2(struct imx_header *imx_hdr) { imx_header_v2_t *hdr_v2 = &imx_hdr->header.hdr_v2; flash_header_v2_t *fhdr_v2 = &hdr_v2->fhdr; dcd_v2_t *dcd_v2 = &hdr_v2->data.dcd_table; uint32_t size, version, plugin; plugin = hdr_v2->boot_data.plugin; if (!plugin) { size = be16_to_cpu(dcd_v2->header.length); if (size > (MAX_HW_CFG_SIZE_V2 * sizeof(dcd_addr_data_t))) { fprintf(stderr, "Error: Image corrupt DCD size %d exceed maximum %d\n", (uint32_t)(size / sizeof(dcd_addr_data_t)), MAX_HW_CFG_SIZE_V2); exit(EXIT_FAILURE); } } version = detect_imximage_version(imx_hdr); printf("Image Type: Freescale IMX Boot Image\n"); printf("Image Ver: %x", version); printf("%s\n", get_table_entry_name(imximage_versions, NULL, version)); printf("Mode: %s\n", plugin ? "PLUGIN" : "DCD"); if (!plugin) { printf("Data Size: "); genimg_print_size(hdr_v2->boot_data.size); printf("Load Address: %08x\n", (uint32_t)fhdr_v2->boot_data_ptr); printf("Entry Point: %08x\n", (uint32_t)fhdr_v2->entry); if (fhdr_v2->csf && (imximage_ivt_offset != UNDEFINED) && (imximage_csf_size != UNDEFINED)) { printf("HAB Blocks: %08x %08x %08x\n", (uint32_t)fhdr_v2->self, 0, hdr_v2->boot_data.size - imximage_ivt_offset - imximage_csf_size); } } else { imx_header_v2_t *next_hdr_v2; flash_header_v2_t *next_fhdr_v2; /*First Header*/ printf("Plugin Data Size: "); genimg_print_size(hdr_v2->boot_data.size); printf("Plugin Code Size: "); genimg_print_size(imximage_plugin_size); printf("Plugin Load Address: %08x\n", hdr_v2->boot_data.start); printf("Plugin Entry Point: %08x\n", (uint32_t)fhdr_v2->entry); /*Second Header*/ next_hdr_v2 = (imx_header_v2_t *)((char *)hdr_v2 + imximage_plugin_size); next_fhdr_v2 = &next_hdr_v2->fhdr; printf("U-Boot Data Size: "); genimg_print_size(next_hdr_v2->boot_data.size); printf("U-Boot Load Address: %08x\n", next_hdr_v2->boot_data.start); printf("U-Boot Entry Point: %08x\n", (uint32_t)next_fhdr_v2->entry); } }