tools: kwbimage: Mark all BootROM structures __packed
authorPali Rohár <pali@kernel.org>
Fri, 23 Jul 2021 09:14:14 +0000 (11:14 +0200)
committerStefan Roese <sr@denx.de>
Sat, 31 Jul 2021 07:49:31 +0000 (09:49 +0200)
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>
tools/kwbimage.h
tools/kwboot.c

index 9f86da4..e063e3e 100644 (file)
 #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.
index 4be094c..2683e53 100644 (file)
 #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 */