Blame view
tools/omapimage.c
4.07 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 |
#include "omapimage.h" |
c8e1ca3eb tools: omapimage:... |
21 |
#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) |
3decb14ab mkimage: Add OMAP... |
22 23 |
/* 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)); |
3a0e70f18 tools: omapimage:... |
144 |
gph_set_header(gph, sbuf->st_size - OMAP_CH_HDR_SIZE, |
bf411ea9f tools: mkimage: a... |
145 |
params->addr, 0); |
79b9ebb70 omapimage: Add su... |
146 147 148 149 150 |
if (strncmp(params->imagename, "byteswap", 8) == 0) { do_swap32 = 1; int swapped = 0; uint32_t *data = (uint32_t *)ptr; |
c8e1ca3eb tools: omapimage:... |
151 152 |
const off_t size_in_words = DIV_ROUND_UP(sbuf->st_size, sizeof(uint32_t)); |
79b9ebb70 omapimage: Add su... |
153 |
|
c8e1ca3eb tools: omapimage:... |
154 |
while (swapped < size_in_words) { |
bf411ea9f tools: mkimage: a... |
155 |
*data = cpu_to_be32(*data); |
79b9ebb70 omapimage: Add su... |
156 157 158 159 |
swapped++; data++; } } |
3decb14ab mkimage: Add OMAP... |
160 |
} |
3decb14ab mkimage: Add OMAP... |
161 162 163 |
/* * omapimage parameters */ |
a93648d19 imagetool: replac... |
164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
U_BOOT_IMAGE_TYPE( omapimage, "TI OMAP CH/GP Boot Image support", OMAP_FILE_HDR_SIZE, (void *)&omapimage_header, gpimage_check_params, omapimage_verify_header, omapimage_print_header, omapimage_set_header, NULL, omapimage_check_image_types, NULL, NULL ); |