diff options
author | Pali Rohár | 2021-07-23 11:14:14 +0200 |
---|---|---|
committer | Stefan Roese | 2021-07-31 09:49:31 +0200 |
commit | a107c61b4180fb5bfe7d0044a25d6db829b8b00f (patch) | |
tree | fdc688f515b5f29cbc6d2c42b3b48c54d3533e61 /tools/kwbimage.h | |
parent | b4f3cc2c42d97967a3a3c8796c340f6b07ecccac (diff) |
tools: kwbimage: Mark all BootROM structures __packed
These structures must have specific size without padding, so mark them as
packed via the de-facto standard macro __packed. Also replace PACKED
macro.
Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Diffstat (limited to 'tools/kwbimage.h')
-rw-r--r-- | tools/kwbimage.h | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/tools/kwbimage.h b/tools/kwbimage.h index 9f86da46e88..e063e3e41eb 100644 --- a/tools/kwbimage.h +++ b/tools/kwbimage.h @@ -11,6 +11,12 @@ #include <compiler.h> #include <stdint.h> +#ifdef __GNUC__ +#define __packed __attribute((packed)) +#else +#define __packed +#endif + #define KWBIMAGE_MAX_CONFIG ((0x1dc - 0x20)/sizeof(struct reg_config)) #define MAX_TEMPBUF_LEN 32 @@ -46,12 +52,12 @@ struct main_hdr_v0 { uint16_t rsvd2; /* 0x1C-0x1D */ uint8_t ext; /* 0x1E */ uint8_t checksum; /* 0x1F */ -}; +} __packed; struct ext_hdr_v0_reg { uint32_t raddr; uint32_t rdata; -}; +} __packed; #define EXT_HDR_V0_REG_COUNT ((0x1dc - 0x20) / sizeof(struct ext_hdr_v0_reg)) @@ -61,12 +67,12 @@ struct ext_hdr_v0 { struct ext_hdr_v0_reg rcfg[EXT_HDR_V0_REG_COUNT]; uint8_t reserved2[7]; uint8_t checksum; -}; +} __packed; struct kwb_header { struct main_hdr_v0 kwb_hdr; struct ext_hdr_v0 kwb_exthdr; -}; +} __packed; /* Structure of the main header, version 1 (Armada 370/38x/XP) */ struct main_hdr_v1 { @@ -87,7 +93,7 @@ struct main_hdr_v1 { uint16_t reserved5; /* 0x1C-0x1D */ uint8_t ext; /* 0x1E */ uint8_t checksum; /* 0x1F */ -}; +} __packed; /* * Main header options @@ -109,21 +115,21 @@ struct opt_hdr_v1 { uint8_t headersz_msb; uint16_t headersz_lsb; char data[0]; -}; +} __packed; /* * Public Key data in DER format */ struct pubkey_der_v1 { uint8_t key[524]; -}; +} __packed; /* * Signature (RSA 2048) */ struct sig_v1 { uint8_t sig[256]; -}; +} __packed; /* * Structure of secure header (Armada 38x) @@ -146,7 +152,7 @@ struct secure_hdr_v1 { uint8_t next; /* 0x25E0 */ uint8_t reserved4; /* 0x25E1 */ uint16_t reserved5; /* 0x25E2 - 0x25E3 */ -}; +} __packed; /* * Structure of register set @@ -159,14 +165,14 @@ struct register_set_hdr_v1 { struct { uint32_t address; /* 0x4+8*N - 0x7+8*N */ uint32_t value; /* 0x8+8*N - 0xB+8*N */ - } entry; + } __packed entry; struct { uint8_t next; /* 0xC+8*N */ uint8_t delay; /* 0xD+8*N */ uint16_t reserved; /* 0xE+8*N - 0xF+8*N */ - } last_entry; + } __packed last_entry; } data[]; -}; +} __packed; /* * Value 0 in register_set_hdr_v1 delay field is special. |