• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_BOOT_HEADER_H
9 #define HPM_BOOT_HEADER_H
10 
11 #include "hpm_common.h"
12 
13 #define HPM_BOOTHEADER_TAG (0xBFU)
14 #define HPM_BOOTHEADER_MAX_FW_COUNT (2U)
15 
16 #ifndef HPM_BOOT_FW_COUNT
17 #define HPM_BOOT_FW_COUNT 1
18 #endif
19 
20 #if HPM_BOOT_FW_COUNT < 1
21 #error "HPM_BOOT_FW_COUNT can't be less than 1"
22 #endif
23 
24 typedef struct {
25     uint32_t offset;            /* 0x0: offset to boot_header start */
26     uint32_t size;              /* 0x4: size in bytes */
27     uint32_t flags;             /* 0x8: [3:0] fw type: */
28                                 /*         0 - executable */
29                                 /*         1 - cmd container */
30                                 /*      [11:8] - hash type */
31                                 /*         0 - none */
32                                 /*         1 - sha256 */
33                                 /*         2 - sm3 */
34     uint32_t reserved0;         /* 0xC */
35     uint32_t load_addr;         /* 0x10: load address */
36     uint32_t reserved1;         /* 0x14 */
37     uint32_t entry_point;       /* 0x18: application entry */
38     uint32_t reserved2;         /* 0x1C */
39     uint8_t hash[64];           /* 0x20: hash value */
40     uint8_t iv[32];             /* 0x60: initial vector */
41 } fw_info_table_t;
42 
43 typedef struct {
44     uint8_t tag;                /* 0x0: must be '0xbf' */
45     uint8_t version;            /* 0x1: header version */
46     uint16_t length;            /* 0x2: header length, max 8KB */
47     uint32_t flags;             /* 0x4: [3:0] SRK set */
48                                 /*      [7:4] SRK index */
49                                 /*      [15:8] SRK_REVOKE_MASK */
50                                 /*      [19:16] Signature Type */
51                                 /*        1: ECDSA */
52                                 /*        2: SM2 */
53     uint16_t sw_version;        /* 0x8: software version */
54     uint8_t fuse_version;       /* 0xA: fuse version */
55     uint8_t fw_count;           /* 0xB: number of fw */
56     uint16_t dc_block_offset;   /* 0xC: device config block offset*/
57     uint16_t sig_block_offset;  /* 0xE: signature block offset */
58     /*
59      * fw_info_table_t fw_info[HPM_BOOT_FW_COUNT]; [> 0x10: fw table <]
60      * uint32_t dc_info[];         [> <]
61      */
62 } boot_header_t;
63 
64 #endif /* HPM_BOOT_HEADER_H */
65