summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2018-08-13 16:56:05 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2018-08-13 16:56:05 +0200
commit1ec421f533610f7af4544748300296fe7728ed70 (patch)
treed70b6e63ff3d087ac30ed68a87c5199b1f568715 /scripts
parent64842a68070318c4c78e99bd69de2401e65de7a5 (diff)
parent2b8466c26a911bed1ac5aa25c463f67b3bdbf1eb (diff)
downloadbarebox-1ec421f533610f7af4544748300296fe7728ed70.tar.gz
barebox-1ec421f533610f7af4544748300296fe7728ed70.tar.xz
Merge branch 'for-next/socfpga'
Diffstat (limited to 'scripts')
-rw-r--r--scripts/socfpga_mkimage.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/scripts/socfpga_mkimage.c b/scripts/socfpga_mkimage.c
index d7fe1b1b69..fedcfb5b6f 100644
--- a/scripts/socfpga_mkimage.c
+++ b/scripts/socfpga_mkimage.c
@@ -256,7 +256,7 @@ static int add_socfpga_header(void *buf, size_t size, unsigned start_addr, unsig
static void usage(const char *prgname)
{
- fprintf(stderr, "usage: %s [-hb] [-v version] <infile> -o <outfile>\n", prgname);
+ fprintf(stderr, "usage: %s [-hbs] [-v version] <infile> -o <outfile>\n", prgname);
}
int main(int argc, char *argv[])
@@ -268,9 +268,11 @@ int main(int argc, char *argv[])
int fd;
int max_image_size, min_image_size = 80;
int addsize = 0, pad;
+ int fixup_size = 0;
unsigned int version = 0;
+ int fixed_size = 0;
- while ((opt = getopt(argc, argv, "o:hbv:")) != -1) {
+ while ((opt = getopt(argc, argv, "o:hbsv:")) != -1) {
switch (opt) {
case 'v':
version = atoi(optarg);
@@ -285,6 +287,9 @@ int main(int argc, char *argv[])
min_image_size = 0;
addsize = 512;
break;
+ case 's':
+ fixup_size = 1;
+ break;
case 'h':
usage(argv[0]);
exit(0);
@@ -349,10 +354,26 @@ int main(int argc, char *argv[])
exit(1);
}
+ fixed_size = s.st_size;
+
close(fd);
if (add_barebox_header) {
+ int barebox_size = 0;
+ int *image_size = buf + 0x2c;
+
memcpy(buf, bb_header, sizeof(bb_header));
+
+ if (fixup_size) {
+ fixed_size = htole32(fixed_size);
+
+ barebox_size = *((uint32_t *)buf + (fixed_size + addsize + pad) / 4 - 1);
+
+ /* size of barebox+pbl, header, size */
+ fixed_size += (barebox_size + addsize + 4);
+
+ *image_size = fixed_size;
+ }
}
ret = add_socfpga_header(buf, s.st_size + 4 + addsize + pad, addsize,