diff options
Diffstat (limited to 'tools/mksunxiboot.c')
-rw-r--r-- | tools/mksunxiboot.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/tools/mksunxiboot.c b/tools/mksunxiboot.c index 3361251c8e..9c1c5b7cee 100644 --- a/tools/mksunxiboot.c +++ b/tools/mksunxiboot.c @@ -15,23 +15,8 @@ #include <errno.h> #include <sys/types.h> #include <sys/stat.h> +#include "asm/arch/spl.h" -/* boot head definition from sun4i boot code */ -struct boot_file_head { - uint32_t b_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 we - * would need to implement the proper fields here instead of - * padding. - */ - uint8_t pad[12]; /* align to 32 bytes */ -}; - -#define BOOT0_MAGIC "eGON.BT0" #define STAMP_VALUE 0x5F0A6C39 /* check sum functon from sun4i boot code */ @@ -99,7 +84,7 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } - memset(img.pad, 0, BLOCK_SIZE); + memset(&img, 0, sizeof(img)); /* get input file size */ file_size = lseek(fd_in, 0, SEEK_END); @@ -133,6 +118,10 @@ int main(int argc, char *argv[]) ALIGN(file_size + sizeof(struct boot_file_head), BLOCK_SIZE); img.header.b_instruction = cpu_to_le32(img.header.b_instruction); img.header.length = cpu_to_le32(img.header.length); + + memcpy(img.header.spl_signature, SPL_SIGNATURE, 3); /* "sunxi" marker */ + img.header.spl_signature[3] = SPL_HEADER_VERSION; + gen_check_sum(&img.header); count = write(fd_out, &img, le32_to_cpu(img.header.length)); |