Add padding at the end of the last entry

This patch adds padding bytes at the end of the last image in the
fip to be able to transfer by DMA the last image.

Change-Id: I8c6f07dee389cb3d1dc919936d9d52841d7e5723
Signed-off-by: Roberto Vargas <roberto.vargas@arm.com>
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
Signed-off-by: David Cunado <david.cunado@arm.com>
This commit is contained in:
Roberto Vargas 2017-12-19 11:56:57 +00:00 committed by David Cunado
parent 34c2b9c2f1
commit 880b9e8b4c
1 changed files with 14 additions and 3 deletions

View File

@ -492,7 +492,7 @@ static int pack_images(const char *filename, uint64_t toc_flags, unsigned long a
fip_toc_header_t *toc_header;
fip_toc_entry_t *toc_entry;
char *buf;
uint64_t entry_offset, buf_size, payload_size = 0;
uint64_t entry_offset, buf_size, payload_size = 0, pad_size;
size_t nr_images = 0;
for (desc = image_desc_head; desc != NULL; desc = desc->next)
@ -526,9 +526,13 @@ static int pack_images(const char *filename, uint64_t toc_flags, unsigned long a
entry_offset += image->toc_e.size;
}
/* Append a null uuid entry to mark the end of ToC entries. */
/*
* Append a null uuid entry to mark the end of ToC entries.
* NOTE the offset address for the last toc_entry must match the fip
* size.
*/
memset(toc_entry, 0, sizeof(*toc_entry));
toc_entry->offset_address = entry_offset;
toc_entry->offset_address = (entry_offset + align - 1) & ~(align - 1);
/* Generate the FIP file. */
fp = fopen(filename, "wb");
@ -555,6 +559,13 @@ static int pack_images(const char *filename, uint64_t toc_flags, unsigned long a
xfwrite(image->buffer, image->toc_e.size, fp, filename);
}
if (fseek(fp, entry_offset, SEEK_SET))
log_errx("Failed to set file position");
pad_size = toc_entry->offset_address - entry_offset;
while (pad_size--)
fputc(0x0, fp);
fclose(fp);
return 0;
}