]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - tools/mksunxiboot.c
tools: mksunxiboot: Fix problems on big endian systems
[karo-tx-uboot.git] / tools / mksunxiboot.c
index da7c9f0ddc004adf9f7402a876a400ecc16cdf93..0035f6ea265d926837ed576418dc81fbed3970c9 100644 (file)
@@ -43,19 +43,19 @@ int gen_check_sum(struct boot_file_head *head_p)
        uint32_t i;
        uint32_t sum;
 
-       length = head_p->length;
+       length = le32_to_cpu(head_p->length);
        if ((length & 0x3) != 0)        /* must 4-byte-aligned */
                return -1;
        buf = (uint32_t *)head_p;
-       head_p->check_sum = STAMP_VALUE;        /* fill stamp */
+       head_p->check_sum = cpu_to_le32(STAMP_VALUE);   /* fill stamp */
        loop = length >> 2;
 
        /* calculate the sum */
        for (i = 0, sum = 0; i < loop; i++)
-               sum += buf[i];
+               sum += le32_to_cpu(buf[i]);
 
        /* write back check sum */
-       head_p->check_sum = sum;
+       head_p->check_sum = cpu_to_le32(sum);
 
        return 0;
 }
@@ -77,7 +77,7 @@ int main(int argc, char *argv[])
 {
        int fd_in, fd_out;
        struct boot_img img;
-       unsigned file_size, load_size;
+       unsigned file_size;
        int count;
 
        if (argc < 2) {
@@ -101,8 +101,6 @@ int main(int argc, char *argv[])
        if (file_size > SRAM_LOAD_MAX_SIZE) {
                fprintf(stderr, "ERROR: File too large!\n");
                return EXIT_FAILURE;
-       } else {
-               load_size = ALIGN(file_size, sizeof(int));
        }
 
        fd_out = open(argv[2], O_WRONLY | O_CREAT, 0666);
@@ -113,8 +111,8 @@ int main(int argc, char *argv[])
 
        /* read file to buffer to calculate checksum */
        lseek(fd_in, 0, SEEK_SET);
-       count = read(fd_in, img.code, load_size);
-       if (count != load_size) {
+       count = read(fd_in, img.code, file_size);
+       if (count != file_size) {
                perror("Reading input image");
                return EXIT_FAILURE;
        }
@@ -126,11 +124,13 @@ int main(int argc, char *argv[])
                 & 0x00FFFFFF);
        memcpy(img.header.magic, BOOT0_MAGIC, 8);       /* no '0' termination */
        img.header.length =
-               ALIGN(load_size + sizeof(struct boot_file_head), BLOCK_SIZE);
+               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);
        gen_check_sum(&img.header);
 
-       count = write(fd_out, &img, img.header.length);
-       if (count != img.header.length) {
+       count = write(fd_out, &img, le32_to_cpu(img.header.length));
+       if (count != le32_to_cpu(img.header.length)) {
                perror("Writing output");
                return EXIT_FAILURE;
        }