Blame view
tools/omapimage.c
4.15 KB
3decb14ab mkimage: Add OMAP... |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* * (C) Copyright 2010 * Linaro LTD, www.linaro.org * Author: John Rigby <john.rigby@linaro.org> * Based on TI's signGP.c * * (C) Copyright 2009 * Stefano Babic, DENX Software Engineering, sbabic@denx.de. * * (C) Copyright 2008 * Marvell Semiconductor <www.marvell.com> * Written-by: Prafulla Wadaskar <prafulla@marvell.com> * |
3765b3e7b Coding Style clea... |
14 |
* SPDX-License-Identifier: GPL-2.0+ |
3decb14ab mkimage: Add OMAP... |
15 |
*/ |
f86ed6a8d tools: moved code... |
16 |
#include "imagetool.h" |
bf411ea9f tools: mkimage: a... |
17 |
#include <compiler.h> |
3decb14ab mkimage: Add OMAP... |
18 |
#include <image.h> |
bf411ea9f tools: mkimage: a... |
19 |
#include "gpheader.h" |
3decb14ab mkimage: Add OMAP... |
20 21 22 23 |
#include "omapimage.h" /* Header size is CH header rounded up to 512 bytes plus GP header */ #define OMAP_CH_HDR_SIZE 512 |
bf411ea9f tools: mkimage: a... |
24 |
#define OMAP_FILE_HDR_SIZE (OMAP_CH_HDR_SIZE + GPIMAGE_HDR_SIZE) |
3decb14ab mkimage: Add OMAP... |
25 |
|
79b9ebb70 omapimage: Add su... |
26 |
static int do_swap32 = 0; |
3decb14ab mkimage: Add OMAP... |
27 28 29 30 31 32 |
static uint8_t omapimage_header[OMAP_FILE_HDR_SIZE]; static int omapimage_check_image_types(uint8_t type) { if (type == IH_TYPE_OMAPIMAGE) return EXIT_SUCCESS; |
bf411ea9f tools: mkimage: a... |
33 |
return EXIT_FAILURE; |
3decb14ab mkimage: Add OMAP... |
34 35 36 |
} static int omapimage_verify_header(unsigned char *ptr, int image_size, |
f86ed6a8d tools: moved code... |
37 |
struct image_tool_params *params) |
3decb14ab mkimage: Add OMAP... |
38 39 40 |
{ struct ch_toc *toc = (struct ch_toc *)ptr; struct gp_header *gph = (struct gp_header *)(ptr+OMAP_CH_HDR_SIZE); |
bf411ea9f tools: mkimage: a... |
41 |
uint32_t offset, size; |
3decb14ab mkimage: Add OMAP... |
42 43 44 |
while (toc->section_offset != 0xffffffff && toc->section_size != 0xffffffff) { |
79b9ebb70 omapimage: Add su... |
45 |
if (do_swap32) { |
bf411ea9f tools: mkimage: a... |
46 47 |
offset = cpu_to_be32(toc->section_offset); size = cpu_to_be32(toc->section_size); |
79b9ebb70 omapimage: Add su... |
48 49 50 51 |
} else { offset = toc->section_offset; size = toc->section_size; } |
3decb14ab mkimage: Add OMAP... |
52 53 54 55 56 57 58 |
if (!offset || !size) return -1; if (offset >= OMAP_CH_HDR_SIZE || offset+size >= OMAP_CH_HDR_SIZE) return -1; toc++; } |
79b9ebb70 omapimage: Add su... |
59 |
|
bf411ea9f tools: mkimage: a... |
60 |
return gph_verify_header(gph, do_swap32); |
3decb14ab mkimage: Add OMAP... |
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
} static void omapimage_print_section(struct ch_settings *chs) { const char *section_name; if (chs->section_key) section_name = "CHSETTINGS"; else section_name = "UNKNOWNKEY"; printf("%s (%x) " "valid:%x " "version:%x " "reserved:%x " "flags:%x ", section_name, chs->section_key, chs->valid, chs->version, chs->reserved, chs->flags); } static void omapimage_print_header(const void *ptr) { const struct ch_toc *toc = (struct ch_toc *)ptr; const struct gp_header *gph = (struct gp_header *)(ptr+OMAP_CH_HDR_SIZE); |
bf411ea9f tools: mkimage: a... |
91 |
uint32_t offset, size; |
3decb14ab mkimage: Add OMAP... |
92 93 94 |
while (toc->section_offset != 0xffffffff && toc->section_size != 0xffffffff) { |
79b9ebb70 omapimage: Add su... |
95 |
if (do_swap32) { |
bf411ea9f tools: mkimage: a... |
96 97 |
offset = cpu_to_be32(toc->section_offset); size = cpu_to_be32(toc->section_size); |
79b9ebb70 omapimage: Add su... |
98 99 100 101 |
} else { offset = toc->section_offset; size = toc->section_size; } |
3decb14ab mkimage: Add OMAP... |
102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
if (offset >= OMAP_CH_HDR_SIZE || offset+size >= OMAP_CH_HDR_SIZE) exit(EXIT_FAILURE); printf("Section %s offset %x length %x ", toc->section_name, toc->section_offset, toc->section_size); omapimage_print_section((struct ch_settings *)(ptr+offset)); toc++; } |
bf411ea9f tools: mkimage: a... |
116 |
gph_print_header(gph, do_swap32); |
3decb14ab mkimage: Add OMAP... |
117 118 119 120 121 122 123 124 |
} static int toc_offset(void *hdr, void *member) { return member - hdr; } static void omapimage_set_header(void *ptr, struct stat *sbuf, int ifd, |
f86ed6a8d tools: moved code... |
125 |
struct image_tool_params *params) |
3decb14ab mkimage: Add OMAP... |
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
{ struct ch_toc *toc = (struct ch_toc *)ptr; struct ch_settings *chs = (struct ch_settings *) (ptr + 2 * sizeof(*toc)); struct gp_header *gph = (struct gp_header *)(ptr + OMAP_CH_HDR_SIZE); toc->section_offset = toc_offset(ptr, chs); toc->section_size = sizeof(struct ch_settings); strcpy((char *)toc->section_name, "CHSETTINGS"); chs->section_key = KEY_CHSETTINGS; chs->valid = 0; chs->version = 1; chs->reserved = 0; chs->flags = 0; toc++; memset(toc, 0xff, sizeof(*toc)); |
bf411ea9f tools: mkimage: a... |
144 145 |
gph_set_header(gph, sbuf->st_size - OMAP_FILE_HDR_SIZE, params->addr, 0); |
79b9ebb70 omapimage: Add su... |
146 147 148 149 150 151 152 |
if (strncmp(params->imagename, "byteswap", 8) == 0) { do_swap32 = 1; int swapped = 0; uint32_t *data = (uint32_t *)ptr; while (swapped <= (sbuf->st_size / sizeof(uint32_t))) { |
bf411ea9f tools: mkimage: a... |
153 |
*data = cpu_to_be32(*data); |
79b9ebb70 omapimage: Add su... |
154 155 156 157 |
swapped++; data++; } } |
3decb14ab mkimage: Add OMAP... |
158 |
} |
3decb14ab mkimage: Add OMAP... |
159 160 161 162 163 164 165 166 167 168 169 |
/* * 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, |
bf411ea9f tools: mkimage: a... |
170 |
.check_params = gpimage_check_params, |
3decb14ab mkimage: Add OMAP... |
171 172 173 174 |
}; void init_omap_image_type(void) { |
f86ed6a8d tools: moved code... |
175 |
register_image_type(&omapimage_params); |
3decb14ab mkimage: Add OMAP... |
176 |
} |