12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /*
- * Copyright (c) 2021 HPMicro
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
- #ifndef HPM_BOOT_HEADER_H
- #define HPM_BOOT_HEADER_H
- #include "hpm_common.h"
- #define HPM_BOOTHEADER_TAG (0xBFU)
- #define HPM_BOOTHEADER_MAX_FW_COUNT (2U)
- #ifndef HPM_BOOT_FW_COUNT
- #define HPM_BOOT_FW_COUNT 1
- #endif
- #if HPM_BOOT_FW_COUNT < 1
- #error "HPM_BOOT_FW_COUNT can't be less than 1"
- #endif
- typedef struct {
- uint32_t offset; /* 0x0: offset to boot_header start */
- uint32_t size; /* 0x4: size in bytes */
- uint32_t flags; /* 0x8: [3:0] fw type: */
- /* 0 - executable */
- /* 1 - cmd container */
- /* [11:8] - hash type */
- /* 0 - none */
- /* 1 - sha256 */
- /* 2 - sm3 */
- uint32_t reserved0; /* 0xC */
- uint32_t load_addr; /* 0x10: load address */
- uint32_t reserved1; /* 0x14 */
- uint32_t entry_point; /* 0x18: application entry */
- uint32_t reserved2; /* 0x1C */
- uint8_t hash[64]; /* 0x20: hash value */
- uint8_t iv[32]; /* 0x60: initial vector */
- } fw_info_table_t;
- typedef struct {
- uint8_t tag; /* 0x0: must be '0xbf' */
- uint8_t version; /* 0x1: header version */
- uint16_t length; /* 0x2: header length, max 8KB */
- uint32_t flags; /* 0x4: [3:0] SRK set */
- /* [7:4] SRK index */
- /* [15:8] SRK_REVOKE_MASK */
- /* [19:16] Signature Type */
- /* 1: ECDSA */
- /* 2: SM2 */
- uint16_t sw_version; /* 0x8: software version */
- uint8_t fuse_version; /* 0xA: fuse version */
- uint8_t fw_count; /* 0xB: number of fw */
- uint16_t dc_block_offset; /* 0xC: device config block offset*/
- uint16_t sig_block_offset; /* 0xE: signature block offset */
- /*
- * fw_info_table_t fw_info[HPM_BOOT_FW_COUNT]; [> 0x10: fw table <]
- * uint32_t dc_info[]; [> <]
- */
- } boot_header_t;
- #endif /* HPM_BOOT_HEADER_H */
|