[PATCH u-boot-mvebu v2 20/41] tools: kwbimage: Mark all BootROM structures __packed
Stefan Roese
sr at denx.de
Wed Jul 21 11:38:14 CEST 2021
On 19.07.21 14:20, Marek Behún wrote:
> From: Pali Rohár <pali at kernel.org>
>
> 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 at kernel.org>
> Reviewed-by: Marek Behún <marek.behun at nic.cz>
Reviewed-by: Stefan Roese <sr at denx.de>
Thanks,
Stefan
> ---
> tools/kwbimage.h | 30 ++++++++++++++++++------------
> tools/kwboot.c | 8 +-------
> 2 files changed, 19 insertions(+), 19 deletions(-)
>
> diff --git a/tools/kwbimage.h b/tools/kwbimage.h
> index 9f86da46e8..e063e3e41e 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.
> diff --git a/tools/kwboot.c b/tools/kwboot.c
> index 4be094c9c8..2683e5360c 100644
> --- a/tools/kwboot.c
> +++ b/tools/kwboot.c
> @@ -26,12 +26,6 @@
> #include <sys/mman.h>
> #include <sys/stat.h>
>
> -#ifdef __GNUC__
> -#define PACKED __attribute((packed))
> -#else
> -#define PACKED
> -#endif
> -
> /*
> * Marvell BootROM UART Sensing
> */
> @@ -68,7 +62,7 @@ struct kwboot_block {
> uint8_t _pnum;
> uint8_t data[128];
> uint8_t csum;
> -} PACKED;
> +} __packed;
>
> #define KWBOOT_BLK_RSP_TIMEO 1000 /* ms */
>
>
Viele Grüße,
Stefan
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de
More information about the U-Boot
mailing list