diff options
-rw-r--r-- | arch/arm/Makefile | 2 | ||||
-rw-r--r-- | scripts/.gitignore | 2 | ||||
-rw-r--r-- | scripts/Makefile | 2 | ||||
-rw-r--r-- | scripts/mk-omap-image.c (renamed from scripts/mk-am3xxx-spi-image.c) | 76 |
4 files changed, 39 insertions, 43 deletions
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 337aef175b..cf81c9c083 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -163,7 +163,7 @@ KBUILD_IMAGE := barebox.ubl endif quiet_cmd_am35xx_spi_image = SPI-IMG $@ - cmd_am35xx_spi_image = scripts/mk-am3xxx-spi-image -s am35xx -a $(TEXT_BASE) $< > $@ + cmd_am35xx_spi_image = scripts/mk-omap-image -s -a $(TEXT_BASE) $< > $@ barebox.spi: $(KBUILD_BINARY) FORCE $(call if_changed,am35xx_spi_image) diff --git a/scripts/.gitignore b/scripts/.gitignore index 1df04ba5b1..dc794bc898 100644 --- a/scripts/.gitignore +++ b/scripts/.gitignore @@ -10,7 +10,7 @@ kwbimage kwboot gen_netx_image omap_signGP -mk-am3xxx-spi-image +mk-omap-image s5p_cksum mkublheader zynq_mkimage diff --git a/scripts/Makefile b/scripts/Makefile index 2050ec497d..5483a64245 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -14,7 +14,7 @@ hostprogs-$(CONFIG_IMD) += bareboximd hostprogs-$(CONFIG_KALLSYMS) += kallsyms hostprogs-$(CONFIG_ARCH_MVEBU) += kwbimage kwboot hostprogs-$(CONFIG_ARCH_NETX) += gen_netx_image -hostprogs-$(CONFIG_ARCH_OMAP) += omap_signGP mk-am3xxx-spi-image +hostprogs-$(CONFIG_ARCH_OMAP) += omap_signGP mk-omap-image hostprogs-$(CONFIG_ARCH_S5PCxx) += s5p_cksum hostprogs-$(CONFIG_ARCH_DAVINCI) += mkublheader hostprogs-$(CONFIG_ARCH_ZYNQ) += zynq_mkimage diff --git a/scripts/mk-am3xxx-spi-image.c b/scripts/mk-omap-image.c index dcb7060d21..d0335ad174 100644 --- a/scripts/mk-am3xxx-spi-image.c +++ b/scripts/mk-omap-image.c @@ -48,66 +48,38 @@ #include <getopt.h> #include <endian.h> -enum soc { - SOC_AM33XX, - SOC_AM35XX, - SOC_UNKNOWN, -}; - -static char *soc_names[] = { - [SOC_AM33XX] = "am33xx", - [SOC_AM35XX] = "am35xx", -}; - void usage(char *prgname) { printf("usage: %s [OPTION] FILE > IMAGE\n" "\n" "options:\n" " -a <address> memory address for the loaded image in SRAM\n" - " -s <soc> SoC to use (am33xx, am35xx)\n", + " -s Write big endian image needed for direct flashing to SPI\n", prgname); } int main(int argc, char *argv[]) { FILE *input; - int opt, i; + int opt; off_t pos; size_t size; uint32_t addr = 0x40200000; uint32_t temp; - enum soc soc = SOC_UNKNOWN; - char *socname = NULL; + int chsettings = 0; + int swap = 0; - while((opt = getopt(argc, argv, "a:s:")) != -1) { + while((opt = getopt(argc, argv, "a:s")) != -1) { switch (opt) { case 'a': addr = strtoul(optarg, NULL, 0); break; case 's': - socname = optarg; + swap = 1; break; } } - if (!socname) { - fprintf(stderr, "SoC not specified. Use -s <soc>\n"); - exit(EXIT_FAILURE); - } - - for (i = 0; i < 2; i++) { - if (!strcmp(socname, soc_names[i])) { - soc = i; - break; - } - } - - if (soc == SOC_UNKNOWN) { - fprintf(stderr, "SoC %s unknown\n", socname); - exit(EXIT_FAILURE); - } - if (optind >= argc) { usage(argv[0]); exit(1); @@ -134,20 +106,43 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } - if (fseeko(input, 0, SEEK_SET) == -1) { + if (fseeko(input, 0x14, SEEK_SET) == -1) { + perror("fseeko"); + exit(EXIT_FAILURE); + } + + size = fread(&temp, 1, sizeof(uint32_t), input); + if (!size) { + perror("fseeko"); + exit(EXIT_FAILURE); + } + + /* + * Test if this is an image generated with omap_signGP. These don't + * need size and load address prepended. + */ + if (le32toh(temp) == 0x45534843) + chsettings = 1; + + if (fseeko(input, 0x0, SEEK_SET) == -1) { perror("fseeko"); exit(EXIT_FAILURE); } pos = (pos + 3) & ~3; - /* image size */ - if (soc == SOC_AM35XX) { - temp = htobe32((uint32_t)pos); + if (!chsettings) { + /* image size */ + temp = pos; + if (swap) + temp = htobe32(temp); + fwrite(&temp, sizeof(uint32_t), 1, stdout); /* memory address */ - temp = htobe32(addr); + temp = addr; + if (swap) + temp = htobe32(temp); fwrite(&temp, sizeof(uint32_t), 1, stdout); } @@ -159,7 +154,8 @@ int main(int argc, char *argv[]) perror("fread"); exit(EXIT_FAILURE); } - temp = htobe32(le32toh(temp)); + if (swap) + temp = htobe32(le32toh(temp)); if (fwrite(&temp, 1, sizeof(uint32_t), stdout) != 4) { perror("fwrite"); exit(EXIT_FAILURE); |