tools: mkimage: use common ALIGN to do the size align
[oweals/u-boot.git] / tools / zynqmpbif.c
index 6c8f66055d56f55885d14afdd96dff72b7f04045..82ce0ac1a5200b17ad8c21fbe64ac5816b62b950 100644 (file)
@@ -319,16 +319,25 @@ static int bif_add_pmufw(struct bif_entry *bf, const char *data, size_t len)
 static int bif_add_part(struct bif_entry *bf, const char *data, size_t len)
 {
        size_t parthdr_offset = 0;
+       size_t len_padded = ROUND(len, 4);
+
        struct partition_header parthdr = {
-               .len_enc = cpu_to_le32(len / 4),
-               .len_unenc = cpu_to_le32(len / 4),
-               .len = cpu_to_le32(len / 4),
+               .len_enc = cpu_to_le32(len_padded / 4),
+               .len_unenc = cpu_to_le32(len_padded / 4),
+               .len = cpu_to_le32(len_padded / 4),
                .entry_point = cpu_to_le64(bf->entry),
                .load_address = cpu_to_le64(bf->load),
        };
        int r;
        uint32_t csum;
 
+       if (len < len_padded) {
+               char *newdata = malloc(len_padded);
+               memcpy(newdata, data, len);
+               memset(newdata + len, 0, len_padded - len);
+               data = newdata;
+       }
+
        if (bf->flags & (1ULL << BIF_FLAG_PMUFW_IMAGE))
                return bif_add_pmufw(bf, data, len);
 
@@ -416,8 +425,8 @@ static int bif_add_part(struct bif_entry *bf, const char *data, size_t len)
                if (!bif_output.header->image_offset)
                        bif_output.header->image_offset =
                                cpu_to_le32(bf->offset);
-               bif_output.header->image_size = cpu_to_le32(len);
-               bif_output.header->image_stored_size = cpu_to_le32(len);
+               bif_output.header->image_size = cpu_to_le32(len_padded);
+               bif_output.header->image_stored_size = cpu_to_le32(len_padded);
 
                bif_output.header->image_attributes &= ~HEADER_CPU_SELECT_MASK;
                switch (bf->dest_cpu) {
@@ -508,7 +517,7 @@ static int bif_add_bit(struct bif_entry *bf)
        debug("Bitstream Length: 0x%x\n", bitlen);
        for (i = 0; i < bitlen; i += sizeof(uint32_t)) {
                uint32_t *bitbin32 = (uint32_t *)&bitbin[i];
-               *bitbin32 = __swab32(*bitbin32);
+               *bitbin32 = __builtin_bswap32(*bitbin32);
        }
 
        if (!bf->dest_dev)