imx: Check the PL310 version for applying errata
[oweals/u-boot.git] / tools / zynqmpbif.c
index 6c8f66055d56f55885d14afdd96dff72b7f04045..8c47107c7b9456aab5a369520a9aa6534215f883 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) {