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