summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorArthur Heymans <arthur@aheymans.xyz>2019-08-03 23:34:15 +0200
committerPatrick Georgi <pgeorgi@google.com>2019-08-05 08:27:40 +0000
commit3071c8114a8ea29b66916b9207d8ac07aad3b676 (patch)
tree80693ba5d06dbce111c4b3425b48121ecc13acbf /util
parentcc7495c4e0289802170a95dcfd95c3014868f476 (diff)
downloadcoreboot-3071c8114a8ea29b66916b9207d8ac07aad3b676.tar.xz
util/arm_boot_tools/mksunxiboot: Remove tool
Support for allwinner sunxi was dropped. Change-Id: I0d4cbcac3e96e381185338455a773bcccc3401ad Signed-off-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-on: https://review.coreboot.org/c/coreboot/+/34688 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'util')
-rw-r--r--util/arm_boot_tools/mksunxiboot/description.md1
-rw-r--r--util/arm_boot_tools/mksunxiboot/mksunxiboot.c202
2 files changed, 0 insertions, 203 deletions
diff --git a/util/arm_boot_tools/mksunxiboot/description.md b/util/arm_boot_tools/mksunxiboot/description.md
deleted file mode 100644
index cd90b75325..0000000000
--- a/util/arm_boot_tools/mksunxiboot/description.md
+++ /dev/null
@@ -1 +0,0 @@
-A simple tool to generate bootable image for sunxi platform. `C`
diff --git a/util/arm_boot_tools/mksunxiboot/mksunxiboot.c b/util/arm_boot_tools/mksunxiboot/mksunxiboot.c
deleted file mode 100644
index 493f476731..0000000000
--- a/util/arm_boot_tools/mksunxiboot/mksunxiboot.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * A simple tool to generate bootable image for sunxi platform.
- *
- * Copyright (C) 2007-2011 Allwinner Technology Co., Ltd.
- * Tom Cubie <tangliang@allwinnertech.com>
- * Copyright (C) 2014 Alexandru Gagniuc <mr.nuke.me@gmail.com>
- * Subject to the GNU GPL v2, or (at your option) any later version.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <errno.h>
-
-/* boot head definition from sun4i boot code */
-struct boot_file_head {
- uint32_t jump_instruction; /* one intruction jumping to real code */
- uint8_t magic[8]; /* ="eGON.BT0" or "eGON.BT1", not C-style str */
- uint32_t check_sum; /* generated by PC */
- uint32_t length; /* generated by PC */
- /* We use a simplified header, only filling in what is needed by the
- * boot ROM. To be compatible with Allwinner tools the larger header
- * below should be used, followed by a custom header if desired. */
- uint8_t pad[12]; /* align to 32 bytes */
-};
-
-static const char *BOOT0_MAGIC = "eGON.BT0";
-static const uint32_t STAMP_VALUE = 0x5F0A6C39;
-static const int HEADER_SIZE = 32;
-/* Checksum at most 24 KiB */
-#define SRAM_LOAD_MAX_SIZE ((24 << 10) - sizeof(struct boot_file_head))
-static const int BLOCK_SIZE = 512;
-
-inline static uint32_t le32_to_h(const void *src)
-{
- const uint8_t *b = src;
- return ((b[3] << 24) | (b[2] << 16) | (b[1] << 8) | (b[0] << 0));
-}
-
-inline static void h_to_le32(uint32_t val32, void *dest)
-{
- uint8_t *b = dest;
- b[0] = (val32 >> 0) & 0xff;
- b[1] = (val32 >> 8) & 0xff;
- b[2] = (val32 >> 16) & 0xff;
- b[3] = (val32 >> 24) & 0xff;
-};
-
-static void serialize_header(void *dest, const struct boot_file_head *hdr)
-{
- /* Unused fields are zero */
- memset(dest, 0, HEADER_SIZE);
-
- h_to_le32(hdr->jump_instruction, dest + 0);
- memcpy(dest + 4, BOOT0_MAGIC, 8);
- h_to_le32(hdr->check_sum, dest + 12);
- h_to_le32(hdr->length, dest + 16);
-}
-
-/* Check sum function from sun4i boot code */
-static int fill_check_sum(struct boot_file_head *hdr, const void *boot_code)
-{
- size_t i;
- uint8_t raw_hdr[HEADER_SIZE];
- uint32_t chksum;
-
- if ((hdr->length & 0x3) != 0) {
- fprintf(stderr, "BUG! Load size is not 4-byte aligned\n");
- return EXIT_FAILURE;
- }
-
- /* Fill in checksum seed */
- hdr->check_sum = STAMP_VALUE;
-
- chksum = 0;
- /* Checksum the header */
- serialize_header(raw_hdr, hdr);
- for (i = 0; i < HEADER_SIZE; i += 4)
- chksum += le32_to_h(raw_hdr + i);
-
- /* Checksum the boot code */
- for (i = 0; i < hdr->length - HEADER_SIZE; i += 4)
- chksum += le32_to_h(boot_code + i);
-
- /* write back check sum */
- hdr->check_sum = chksum;
-
- return EXIT_SUCCESS;
-}
-
-static uint32_t align(uint32_t size, uint32_t alignment)
-{
- return ((size + alignment - 1) / alignment) * alignment;
-}
-
-static void fill_header(struct boot_file_head *hdr, size_t load_size)
-{
- /* B instruction */
- hdr->jump_instruction = 0xEA000000;
- /* Jump to the first instr after the header */
- hdr->jump_instruction |= (sizeof(*hdr) / sizeof(uint32_t) - 2);
- /* No '0' termination in magic string */
- memcpy(&hdr->magic, BOOT0_MAGIC, 8);
-
- hdr->length = align(load_size + sizeof(hdr), BLOCK_SIZE);
-}
-
-static long int fsize(FILE *file)
-{
- struct stat s;
- int fd = fileno(file);
- if (fd == -1) return -1;
- if (fstat(fd, &s) == -1) return -1;
- return s.st_size;
-}
-
-int main(int argc, char *argv[])
-{
- FILE *fd_in, *fd_out;
- struct boot_file_head hdr;
- long int file_size, load_size;
- void *file_data;
- uint8_t raw_hdr[HEADER_SIZE];
- int count;
-
- /*
- * TODO: We could take an additional argument to see how much of the
- * file to checksum. This way, the build system can tell us how large
- * the bootblock is, so we can tell the BROM to load only the bootblock.
- */
- if (argc < 2) {
- printf("\tThis program makes an input bin file to sun4i "
- "bootable image.\n"
- "\tUsage: %s input_file out_putfile\n", argv[0]);
- return EXIT_FAILURE;
- }
-
- fd_in = fopen(argv[1], "rb");
- if (!fd_in) {
- fprintf(stderr, "Cannot open input %s", argv[1]);
- return EXIT_FAILURE;
- }
-
- /* Get input file size */
- file_size = fsize(fd_in);
- if (file_size == -1) {
- fprintf(stderr, "can't determine file size\n");
- return EXIT_FAILURE;
- }
- if ((file_data = malloc(file_size)) == NULL) {
- fprintf(stderr, "Cannot allocate memory\n");
- return EXIT_FAILURE;
- }
-
- printf("File size: 0x%lx\n", file_size);
- if (fread(file_data, file_size, 1, fd_in) != 1) {
- fprintf(stderr, "Cannot read %s: %s\n", argv[1],
- strerror(errno));
- return EXIT_FAILURE;
- }
-
- load_size = align(file_size, sizeof(uint32_t));
-
- if (load_size > SRAM_LOAD_MAX_SIZE)
- load_size = SRAM_LOAD_MAX_SIZE;
-
- printf("Load size: 0x%lx\n", load_size);
-
- fd_out = fopen(argv[2], "w");
- if (!fd_out) {
- fprintf(stderr, "Cannot open output %s\n", argv[2]);
- return EXIT_FAILURE;
- }
-
- /* Fill the header */
- fill_header(&hdr, load_size);
- fill_check_sum(&hdr, file_data);
-
- /* Now write the header */
- serialize_header(raw_hdr, &hdr);
- if (fwrite(raw_hdr, HEADER_SIZE, 1, fd_out) != 1) {
- fprintf(stderr, "Cannot write header to %s: %s\n", argv[1],
- strerror(errno));
- return EXIT_FAILURE;
- }
-
- /* And finally, the boot code */
- if (fwrite(file_data, file_size, 1, fd_out) != 1) {
- fprintf(stderr, "Cannot write to %s: %s\n", argv[1],
- strerror(errno));
- return EXIT_FAILURE;
- }
-
- fclose(fd_in);
- fclose(fd_out);
-
- return EXIT_SUCCESS;
-}