1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
/* SPDX-License-Identifier: GPL-2.0+ */ /* * MediaTek BootROM header definitions * * Copyright (C) 2018 MediaTek Inc. * Author: Weijie Gao <weijie.gao@mediatek.com> */ #ifndef _MTK_IMAGE_H #define _MTK_IMAGE_H /* Device header definitions, all fields are little-endian */ /* Header for NOR/SD/eMMC */ union gen_boot_header { struct { char name[12]; uint32_t version; uint32_t size; }; uint8_t pad[0x200]; }; #define EMMC_BOOT_NAME "EMMC_BOOT" #define SF_BOOT_NAME "SF_BOOT" #define SDMMC_BOOT_NAME "SDMMC_BOOT" /* BootROM layout header */ struct brom_layout_header { char name[8]; uint32_t version; uint32_t header_size; uint32_t total_size; uint32_t magic; uint32_t type; uint32_t header_size_2; uint32_t total_size_2; uint32_t unused; }; #define BRLYT_NAME "BRLYT" #define BRLYT_MAGIC 0x42424242 enum brlyt_img_type { BRLYT_TYPE_INVALID = 0, BRLYT_TYPE_NAND = 0x10002, BRLYT_TYPE_EMMC = 0x10005, BRLYT_TYPE_NOR = 0x10007, BRLYT_TYPE_SDMMC = 0x10008, BRLYT_TYPE_SNAND = 0x10009 }; /* Combined device header for NOR/SD/eMMC */ struct gen_device_header { union gen_boot_header boot; union { struct brom_layout_header brlyt; uint8_t brlyt_pad[0x400]; }; }; /* BootROM header definitions */ struct gfh_common_header { uint32_t magic_version; uint16_t size; uint16_t type; }; #define GFH_HEADER_MAGIC 0x4D4D4D #define GFH_HEADER_VERSION_SHIFT 24 #define GFH_TYPE_FILE_INFO 0 #define GFH_TYPE_BL_INFO 1 #define GFH_TYPE_BROM_CFG 7 #define GFH_TYPE_BL_SEC_KEY 3 #define GFH_TYPE_ANTI_CLONE 2 #define GFH_TYPE_BROM_SEC_CFG 8 struct gfh_file_info { struct gfh_common_header gfh; char name[12]; uint32_t unused; uint16_t file_type; uint8_t flash_type; uint8_t sig_type; uint32_t load_addr; uint32_t total_size; uint32_t max_size; uint32_t hdr_size; uint32_t sig_size; uint32_t jump_offset; uint32_t processed; }; #define GFH_FILE_INFO_NAME "FILE_INFO" #define GFH_FLASH_TYPE_GEN 5 #define GFH_FLASH_TYPE_NAND 2 #define GFH_SIG_TYPE_NONE 0 #define GFH_SIG_TYPE_SHA256 1 struct gfh_bl_info { struct gfh_common_header gfh; uint32_t attr; }; struct gfh_brom_cfg { struct gfh_common_header gfh; uint32_t cfg_bits; uint32_t usbdl_by_auto_detect_timeout_ms; uint8_t unused[0x45]; uint8_t jump_bl_arm64; uint8_t unused2[2]; uint32_t usbdl_by_kcol0_timeout_ms; uint32_t usbdl_by_flag_timeout_ms; uint32_t pad; }; #define GFH_BROM_CFG_USBDL_BY_AUTO_DETECT_TIMEOUT_EN 0x02 #define GFH_BROM_CFG_USBDL_AUTO_DETECT_DIS 0x10 #define GFH_BROM_CFG_USBDL_BY_KCOL0_TIMEOUT_EN 0x80 #define GFH_BROM_CFG_USBDL_BY_FLAG_TIMEOUT_EN 0x100 #define GFH_BROM_CFG_JUMP_BL_ARM64_EN 0x1000 #define GFH_BROM_CFG_JUMP_BL_ARM64 0x64 struct gfh_bl_sec_key { struct gfh_common_header gfh; uint8_t pad[0x20c]; }; struct gfh_anti_clone { struct gfh_common_header gfh; uint8_t ac_b2k; uint8_t ac_b2c; uint16_t pad; uint32_t ac_offset; uint32_t ac_len; }; struct gfh_brom_sec_cfg { struct gfh_common_header gfh; uint32_t cfg_bits; char customer_name[0x20]; uint32_t pad; }; #define BROM_SEC_CFG_JTAG_EN 1 #define BROM_SEC_CFG_UART_EN 2 struct gfh_header { struct gfh_file_info file_info; struct gfh_bl_info bl_info; struct gfh_brom_cfg brom_cfg; struct gfh_bl_sec_key bl_sec_key; struct gfh_anti_clone anti_clone; struct gfh_brom_sec_cfg brom_sec_cfg; }; /* LK image header */ union lk_hdr { struct { uint32_t magic; uint32_t size; char name[32]; uint32_t loadaddr; uint32_t mode; }; uint8_t data[512]; }; #define LK_PART_MAGIC 0x58881688 /* MT7621 NAND SPL image header */ #define MT7621_IH_NMLEN 12 #define MT7621_IH_CRC_POLYNOMIAL 0x04c11db7 struct mt7621_nand_header { char ih_name[MT7621_IH_NMLEN]; uint32_t nand_ac_timing; uint32_t ih_stage_offset; uint32_t ih_bootloader_offset; uint32_t nand_info_1_data; uint32_t crc; }; struct mt7621_stage1_header { uint32_t jump_insn[2]; uint32_t ep; uint32_t stage_size; uint32_t has_stage2; uint32_t next_ep; uint32_t next_size; uint32_t next_offset; }; #endif /* _MTK_IMAGE_H */