mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
tools: kwbimage: Fix calculating size of kwbimage v0 header
Extended and binary headers are optional and are part of the image header. Fixes kwboot to determinate correct length of Dove images. Signed-off-by: Pali Rohár <pali@kernel.org> Tested-by: Tony Dinh <mibodhi@gmail.com> Reviewed-by: Stefan Roese <sr@denx.de>
This commit is contained in:
parent
3917ec57f7
commit
9a9a2c1acf
1 changed files with 13 additions and 1 deletions
|
@ -240,8 +240,20 @@ static inline size_t kwbheader_size(const void *header)
|
||||||
if (kwbimage_version(header) == 0) {
|
if (kwbimage_version(header) == 0) {
|
||||||
const struct main_hdr_v0 *hdr = header;
|
const struct main_hdr_v0 *hdr = header;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* First extension header starts immediately after the main
|
||||||
|
* header without any padding. Between extension headers is
|
||||||
|
* 0x20 byte padding. There is no padding after the last
|
||||||
|
* extension header. First binary code header starts immediately
|
||||||
|
* after the last extension header (or immediately after the
|
||||||
|
* main header if there is no extension header) without any
|
||||||
|
* padding. There is no padding between binary code headers and
|
||||||
|
* neither after the last binary code header.
|
||||||
|
*/
|
||||||
return sizeof(*hdr) +
|
return sizeof(*hdr) +
|
||||||
hdr->ext ? sizeof(struct ext_hdr_v0) : 0;
|
hdr->ext * sizeof(struct ext_hdr_v0) +
|
||||||
|
((hdr->ext > 1) ? ((hdr->ext - 1) * 0x20) : 0) +
|
||||||
|
hdr->bin * sizeof(struct bin_hdr_v0);
|
||||||
} else {
|
} else {
|
||||||
const struct main_hdr_v1 *hdr = header;
|
const struct main_hdr_v1 *hdr = header;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue