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