mtk_image.h 3.9 KB

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