1
0

fw_header.h 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. #ifndef __FW_HEADER_H__
  2. #define __FW_HEADER_H__
  3. #include "stdint.h"
  4. #include "stdio.h"
  5. struct __attribute__((packed, aligned(4))) spi_flash_cfg_t {
  6. uint8_t ioMode; /*!< Serail flash interface mode,bit0-3:IF mode,bit4:unwrap */
  7. uint8_t cReadSupport; /*!< Support continuous read mode,bit0:continuous read mode support,bit1:read mode cfg */
  8. uint8_t clkDelay; /*!< SPI clock delay,bit0-3:delay,bit4-6:pad delay */
  9. uint8_t clkInvert; /*!< SPI clock phase invert,bit0:clck invert,bit1:rx invert,bit2-4:pad delay,bit5-7:pad delay */
  10. uint8_t resetEnCmd; /*!< Flash enable reset command */
  11. uint8_t resetCmd; /*!< Flash reset command */
  12. uint8_t resetCreadCmd; /*!< Flash reset continuous read command */
  13. uint8_t resetCreadCmdSize; /*!< Flash reset continuous read command size */
  14. uint8_t jedecIdCmd; /*!< JEDEC ID command */
  15. uint8_t jedecIdCmdDmyClk; /*!< JEDEC ID command dummy clock */
  16. uint8_t enter32BitsAddrCmd; /*!< Enter 32-bits addr command */
  17. uint8_t exit32BitsAddrCmd; /*!< Exit 32-bits addr command */
  18. uint8_t sectorSize; /*!< *1024bytes */
  19. uint8_t mid; /*!< Manufacturer ID */
  20. uint16_t pageSize; /*!< Page size */
  21. uint8_t chipEraseCmd; /*!< Chip erase cmd */
  22. uint8_t sectorEraseCmd; /*!< Sector erase command */
  23. uint8_t blk32EraseCmd; /*!< Block 32K erase command,some Micron not support */
  24. uint8_t blk64EraseCmd; /*!< Block 64K erase command */
  25. uint8_t writeEnableCmd; /*!< Need before every erase or program */
  26. uint8_t pageProgramCmd; /*!< Page program cmd */
  27. uint8_t qpageProgramCmd; /*!< QIO page program cmd */
  28. uint8_t qppAddrMode; /*!< QIO page program address mode */
  29. uint8_t fastReadCmd; /*!< Fast read command */
  30. uint8_t frDmyClk; /*!< Fast read command dummy clock */
  31. uint8_t qpiFastReadCmd; /*!< QPI fast read command */
  32. uint8_t qpiFrDmyClk; /*!< QPI fast read command dummy clock */
  33. uint8_t fastReadDoCmd; /*!< Fast read dual output command */
  34. uint8_t frDoDmyClk; /*!< Fast read dual output command dummy clock */
  35. uint8_t fastReadDioCmd; /*!< Fast read dual io comamnd */
  36. uint8_t frDioDmyClk; /*!< Fast read dual io command dummy clock */
  37. uint8_t fastReadQoCmd; /*!< Fast read quad output comamnd */
  38. uint8_t frQoDmyClk; /*!< Fast read quad output comamnd dummy clock */
  39. uint8_t fastReadQioCmd; /*!< Fast read quad io comamnd */
  40. uint8_t frQioDmyClk; /*!< Fast read quad io comamnd dummy clock */
  41. uint8_t qpiFastReadQioCmd; /*!< QPI fast read quad io comamnd */
  42. uint8_t qpiFrQioDmyClk; /*!< QPI fast read QIO dummy clock */
  43. uint8_t qpiPageProgramCmd; /*!< QPI program command */
  44. uint8_t writeVregEnableCmd; /*!< Enable write reg */
  45. uint8_t wrEnableIndex; /*!< Write enable register index */
  46. uint8_t qeIndex; /*!< Quad mode enable register index */
  47. uint8_t busyIndex; /*!< Busy status register index */
  48. uint8_t wrEnableBit; /*!< Write enable bit pos */
  49. uint8_t qeBit; /*!< Quad enable bit pos */
  50. uint8_t busyBit; /*!< Busy status bit pos */
  51. uint8_t wrEnableWriteRegLen; /*!< Register length of write enable */
  52. uint8_t wrEnableReadRegLen; /*!< Register length of write enable status */
  53. uint8_t qeWriteRegLen; /*!< Register length of contain quad enable */
  54. uint8_t qeReadRegLen; /*!< Register length of contain quad enable status */
  55. uint8_t releasePowerDown; /*!< Release power down command */
  56. uint8_t busyReadRegLen; /*!< Register length of contain busy status */
  57. uint8_t readRegCmd[4]; /*!< Read register command buffer */
  58. uint8_t writeRegCmd[4]; /*!< Write register command buffer */
  59. uint8_t enterQpi; /*!< Enter qpi command */
  60. uint8_t exitQpi; /*!< Exit qpi command */
  61. uint8_t cReadMode; /*!< Config data for continuous read mode */
  62. uint8_t cRExit; /*!< Config data for exit continuous read mode */
  63. uint8_t burstWrapCmd; /*!< Enable burst wrap command */
  64. uint8_t burstWrapCmdDmyClk; /*!< Enable burst wrap command dummy clock */
  65. uint8_t burstWrapDataMode; /*!< Data and address mode for this command */
  66. uint8_t burstWrapData; /*!< Data to enable burst wrap */
  67. uint8_t deBurstWrapCmd; /*!< Disable burst wrap command */
  68. uint8_t deBurstWrapCmdDmyClk; /*!< Disable burst wrap command dummy clock */
  69. uint8_t deBurstWrapDataMode; /*!< Data and address mode for this command */
  70. uint8_t deBurstWrapData; /*!< Data to disable burst wrap */
  71. uint16_t timeEsector; /*!< 4K erase time */
  72. uint16_t timeE32k; /*!< 32K erase time */
  73. uint16_t timeE64k; /*!< 64K erase time */
  74. uint16_t timePagePgm; /*!< Page program time */
  75. uint16_t timeCe; /*!< Chip erase time in ms */
  76. uint8_t pdDelay; /*!< Release power down command delay time for wake up */
  77. uint8_t qeData; /*!< QE set data */
  78. };
  79. struct __attribute__((packed, aligned(4))) boot_flash_cfg_t {
  80. uint32_t magiccode;
  81. struct spi_flash_cfg_t cfg;
  82. uint32_t crc32;
  83. };
  84. struct __attribute__((packed, aligned(4))) sys_clk_cfg_t {
  85. uint8_t xtal_type;
  86. uint8_t mcu_clk;
  87. uint8_t mcu_clk_div;
  88. uint8_t mcu_bclk_div;
  89. uint8_t mcu_pbclk_div;
  90. uint8_t emi_clk;
  91. uint8_t emi_clk_div;
  92. uint8_t flash_clk_type;
  93. uint8_t flash_clk_div;
  94. uint8_t wifipll_pu;
  95. uint8_t aupll_pu;
  96. uint8_t rsvd0;
  97. };
  98. struct __attribute__((packed, aligned(4))) boot_clk_cfg_t {
  99. uint32_t magiccode;
  100. struct sys_clk_cfg_t cfg;
  101. uint32_t crc32;
  102. };
  103. struct __attribute__((packed, aligned(4))) boot_basic_cfg_t {
  104. uint32_t sign_type : 2; /* [1: 0] for sign */
  105. uint32_t encrypt_type : 2; /* [3: 2] for encrypt */
  106. uint32_t key_sel : 2; /* [5: 4] key slot */
  107. uint32_t xts_mode : 1; /* [6] for xts mode */
  108. uint32_t aes_region_lock : 1; /* [7] rsvd */
  109. uint32_t no_segment : 1; /* [8] no segment info */
  110. uint32_t rsvd_0 : 1; /* [9] boot2 enable(rsvd_0) */
  111. uint32_t rsvd_1 : 1; /* [10] boot2 rollback(rsvd_1) */
  112. uint32_t cpu_master_id : 4; /* [14: 11] master id */
  113. uint32_t notload_in_bootrom : 1; /* [15] notload in bootrom */
  114. uint32_t crc_ignore : 1; /* [16] ignore crc */
  115. uint32_t hash_ignore : 1; /* [17] hash ignore */
  116. uint32_t power_on_mm : 1; /* [18] power on mm */
  117. uint32_t em_sel : 3; /* [21: 19] em_sel */
  118. uint32_t cmds_en : 1; /* [22] command spliter enable */
  119. uint32_t cmds_wrap_mode : 2; /* [24: 23] cmds wrap mode */
  120. uint32_t cmds_wrap_len : 4; /* [28: 25] cmds wrap len */
  121. uint32_t icache_invalid : 1; /* [29] icache invalid */
  122. uint32_t dcache_invalid : 1; /* [30] dcache invalid */
  123. uint32_t rsvd_3 : 1; /* [31] rsvd_3 */
  124. uint32_t group_image_offset; /* flash controller offset */
  125. uint32_t aes_region_len; /* aes region length */
  126. uint32_t img_len_cnt; /* image length or segment count */
  127. uint32_t hash[32 / 4]; /* hash of the image */
  128. };
  129. struct __attribute__((packed, aligned(4))) boot_cpu_cfg_t {
  130. uint8_t config_enable; /* coinfig this cpu */
  131. uint8_t halt_cpu; /* halt this cpu */
  132. uint8_t cache_enable : 1; /* cache setting */
  133. uint8_t cache_wa : 1; /* cache setting */
  134. uint8_t cache_wb : 1; /* cache setting */
  135. uint8_t cache_wt : 1; /* cache setting */
  136. uint8_t cache_way_dis : 4; /* cache setting */
  137. uint8_t rsvd;
  138. uint32_t image_address_offset; /* image_address_offset */
  139. uint32_t rsvd1; /* rsvd */
  140. uint32_t msp_val; /* msp value */
  141. };
  142. struct __attribute__((packed, aligned(4))) aesiv_cfg_t {
  143. uint8_t aesiv[16];
  144. uint32_t crc32;
  145. };
  146. struct __attribute__((packed, aligned(4))) pkey_cfg_t {
  147. uint8_t eckeyx[32]; /* ec key in boot header */
  148. uint8_t eckeyy[32]; /* ec key in boot header */
  149. uint32_t crc32;
  150. };
  151. struct __attribute__((packed, aligned(4))) sign_cfg_t {
  152. uint32_t sig_len;
  153. uint8_t signature[32];
  154. uint32_t crc32;
  155. };
  156. struct __attribute__((packed, aligned(4))) bootheader_t {
  157. uint32_t magiccode; /* 4 */
  158. uint32_t rivison; /* 4 */
  159. struct boot_flash_cfg_t flash_cfg; /* 4 + 84 + 4 */
  160. struct boot_clk_cfg_t clk_cfg; /* 4 + 12 + 4 */
  161. struct boot_basic_cfg_t basic_cfg; /* 4 + 4 + 4 + 4 + 4*8 */
  162. struct boot_cpu_cfg_t cpu_cfg; /* 16 */
  163. uint32_t boot2_pt_table_0_rsvd; /* address of partition table 0 */ /* 4 */
  164. uint32_t boot2_pt_table_1_rsvd; /* address of partition table 1 */ /* 4 */
  165. uint32_t flash_cfg_table_addr; /* address of flashcfg table list */ /* 4 */
  166. uint32_t flash_cfg_table_len; /* flashcfg table list len */ /* 4 */
  167. uint32_t rsvd0[6]; /* rsvd */
  168. uint32_t rsvd1[6]; /* rsvd */
  169. uint32_t rsvd; /* 4 */
  170. uint32_t crc32; /* 4 */
  171. };
  172. #endif