hpm_bootheader.h 2.3 KB

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