Message ID | 20220215185925.16060-3-pali@kernel.org |
---|---|
State | Superseded |
Delegated to: | Stefan Roese |
Headers | show |
Series | tools: kwbimage: Support for parsing extended v0 format | expand |
On 2/15/22 19:59, Pali Rohár wrote: > 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> Reviewed-by: Stefan Roese <sr@denx.de> Thanks, Stefan > --- > tools/kwbimage.h | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/tools/kwbimage.h b/tools/kwbimage.h > index 706bebddf4fa..502b6d503305 100644 > --- a/tools/kwbimage.h > +++ b/tools/kwbimage.h > @@ -240,8 +240,20 @@ static inline size_t kwbheader_size(const void *header) > if (kwbimage_version(header) == 0) { > 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) + > - 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 { > const struct main_hdr_v1 *hdr = header; > Viele Grüße, Stefan Roese
diff --git a/tools/kwbimage.h b/tools/kwbimage.h index 706bebddf4fa..502b6d503305 100644 --- a/tools/kwbimage.h +++ b/tools/kwbimage.h @@ -240,8 +240,20 @@ static inline size_t kwbheader_size(const void *header) if (kwbimage_version(header) == 0) { 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) + - 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 { const struct main_hdr_v1 *hdr = 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> --- tools/kwbimage.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)