u-boot-brain/tools/gpimage-common.c
Guilherme Maciel Ferreira f41f5b7c05 dumpimage: add 'T' option to explicitly set the image type
Some image types, like "KeyStone GP", do not have magic numbers to
distinguish them from other image types. Thus, the automatic image
type discovery does not work correctly.

This patch also fix some integer type mismatches.

Signed-off-by: Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
2015-01-29 13:38:41 -05:00

82 lines
1.9 KiB
C

/*
* (C) Copyright 2014
* Texas Instruments Incorporated
* Refactored common functions in to gpimage-common.c.
*
* (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>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include "imagetool.h"
#include <compiler.h>
#include <image.h>
#include "gpheader.h"
/* Helper to convert size and load_addr to big endian */
void to_be32(uint32_t *gph_size, uint32_t *gph_load_addr)
{
*gph_size = cpu_to_be32(*gph_size);
*gph_load_addr = cpu_to_be32(*gph_load_addr);
}
int gph_verify_header(struct gp_header *gph, int be)
{
uint32_t gph_size = gph->size;
uint32_t gph_load_addr = gph->load_addr;
if (be)
to_be32(&gph_size, &gph_load_addr);
if (!gph_size || !gph_load_addr)
return -1;
return 0;
}
void gph_print_header(const struct gp_header *gph, int be)
{
uint32_t gph_size = gph->size, gph_load_addr = gph->load_addr;
if (be)
to_be32(&gph_size, &gph_load_addr);
if (!gph_size) {
fprintf(stderr, "Error: invalid image size %x\n", gph_size);
exit(EXIT_FAILURE);
}
if (!gph_load_addr) {
fprintf(stderr, "Error: invalid image load address %x\n",
gph_load_addr);
exit(EXIT_FAILURE);
}
printf("GP Header: Size %x LoadAddr %x\n", gph_size, gph_load_addr);
}
void gph_set_header(struct gp_header *gph, uint32_t size, uint32_t load_addr,
int be)
{
gph->size = size;
gph->load_addr = load_addr;
if (be)
to_be32(&gph->size, &gph->load_addr);
}
int gpimage_check_params(struct image_tool_params *params)
{
return (params->dflag && (params->fflag || params->lflag)) ||
(params->fflag && (params->dflag || params->lflag)) ||
(params->lflag && (params->dflag || params->fflag));
}