Blame view

include/imximage.h 5.21 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  /* SPDX-License-Identifier: GPL-2.0+ */
8edcde5e4   Stefano Babic   mkimage: Add Free...
2
3
4
  /*
   * (C) Copyright 2009
   * Stefano Babic, DENX Software Engineering, sbabic@denx.de.
8edcde5e4   Stefano Babic   mkimage: Add Free...
5
6
7
8
   */
  
  #ifndef _IMXIMAGE_H_
  #define _IMXIMAGE_H_
021e79c85   Fabio Estevam   tools: imximage: ...
9
  #define MAX_HW_CFG_SIZE_V2 220 /* Max number of registers imx can set for v2 */
b55e4f48d   Peng Fan   tools: imximage: ...
10
  #define MAX_PLUGIN_CODE_SIZE (64 * 1024)
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
11
  #define MAX_HW_CFG_SIZE_V1 60  /* Max number of registers imx can set for v1 */
8edcde5e4   Stefano Babic   mkimage: Add Free...
12
13
  #define APP_CODE_BARKER	0xB1
  #define DCD_BARKER	0xB17219E9
8edcde5e4   Stefano Babic   mkimage: Add Free...
14

69f069506   Bryan O'Donoghue   imximage: Specify...
15
16
  /* Specify the offset of the IVT in the IMX header as expected by BootROM */
  #define BOOTROM_IVT_HDR_OFFSET	0xC00
6cb83829a   Marek Vasut   tools: arm: imx: ...
17
18
  /*
   * NOTE: This file must be kept in sync with arch/arm/include/asm/\
552a848e4   Stefano Babic   imx: reorganize I...
19
   *       mach-imx/imximage.cfg because tools/imximage.c can not
6cb83829a   Marek Vasut   tools: arm: imx: ...
20
21
   *       cross-include headers from arch/arm/ and vice-versa.
   */
8edcde5e4   Stefano Babic   mkimage: Add Free...
22
  #define CMD_DATA_STR	"DATA"
377e367a8   Stefano Babic   tools: dynamicall...
23
24
  
  /* Initial Vector Table Offset */
49d3e2721   Dirk Behme   imximage: Remove ...
25
  #define FLASH_OFFSET_UNDEFINED	0xFFFFFFFF
8edcde5e4   Stefano Babic   mkimage: Add Free...
26
27
28
29
30
  #define FLASH_OFFSET_STANDARD	0x400
  #define FLASH_OFFSET_NAND	FLASH_OFFSET_STANDARD
  #define FLASH_OFFSET_SD		FLASH_OFFSET_STANDARD
  #define FLASH_OFFSET_SPI	FLASH_OFFSET_STANDARD
  #define FLASH_OFFSET_ONENAND	0x100
19b409c00   Dirk Behme   imximage: Add sup...
31
32
  #define FLASH_OFFSET_NOR	0x1000
  #define FLASH_OFFSET_SATA	FLASH_OFFSET_STANDARD
9598f8c30   Ye.Li   imx: imximage: Ad...
33
  #define FLASH_OFFSET_QSPI	0x1000
6609c2663   Peng Fan   tools: add i.MX8M...
34
  #define FLASH_OFFSET_FLEXSPI	0x1000
8edcde5e4   Stefano Babic   mkimage: Add Free...
35

377e367a8   Stefano Babic   tools: dynamicall...
36
37
38
39
40
41
42
43
44
  /* Initial Load Region Size */
  #define FLASH_LOADSIZE_UNDEFINED	0xFFFFFFFF
  #define FLASH_LOADSIZE_STANDARD		0x1000
  #define FLASH_LOADSIZE_NAND		FLASH_LOADSIZE_STANDARD
  #define FLASH_LOADSIZE_SD		FLASH_LOADSIZE_STANDARD
  #define FLASH_LOADSIZE_SPI		FLASH_LOADSIZE_STANDARD
  #define FLASH_LOADSIZE_ONENAND		0x400
  #define FLASH_LOADSIZE_NOR		0x0 /* entire image */
  #define FLASH_LOADSIZE_SATA		FLASH_LOADSIZE_STANDARD
9598f8c30   Ye.Li   imx: imximage: Ad...
45
  #define FLASH_LOADSIZE_QSPI		0x0 /* entire image */
377e367a8   Stefano Babic   tools: dynamicall...
46

0b7f7c339   Adrian Alonso   imx: imximage: ad...
47
48
49
  /* Command tags and parameters */
  #define IVT_HEADER_TAG			0xD1
  #define IVT_VERSION			0x40
6609c2663   Peng Fan   tools: add i.MX8M...
50
  #define IVT_VERSION_V3			0x41
0b7f7c339   Adrian Alonso   imx: imximage: ad...
51
52
53
54
  #define DCD_HEADER_TAG			0xD2
  #define DCD_VERSION			0x40
  #define DCD_WRITE_DATA_COMMAND_TAG	0xCC
  #define DCD_WRITE_DATA_PARAM		0x4
3e0a71c15   Peng Fan   tools: imximage: ...
55
56
  #define DCD_WRITE_CLR_BIT_PARAM		0xC
  #define DCD_WRITE_SET_BIT_PARAM		0x1C
0b7f7c339   Adrian Alonso   imx: imximage: ad...
57
58
59
  #define DCD_CHECK_DATA_COMMAND_TAG	0xCF
  #define DCD_CHECK_BITS_SET_PARAM	0x14
  #define DCD_CHECK_BITS_CLR_PARAM	0x04
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
60

f4d8fccd3   Bryan O'Donoghue   imximage: Encase ...
61
  #ifndef __ASSEMBLY__
8edcde5e4   Stefano Babic   mkimage: Add Free...
62
63
  enum imximage_cmd {
  	CMD_INVALID,
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
64
  	CMD_IMAGE_VERSION,
8edcde5e4   Stefano Babic   mkimage: Add Free...
65
  	CMD_BOOT_FROM,
6cb83829a   Marek Vasut   tools: arm: imx: ...
66
  	CMD_BOOT_OFFSET,
0b7f7c339   Adrian Alonso   imx: imximage: ad...
67
68
  	CMD_WRITE_DATA,
  	CMD_WRITE_CLR_BIT,
3e0a71c15   Peng Fan   tools: imximage: ...
69
  	CMD_WRITE_SET_BIT,
0b7f7c339   Adrian Alonso   imx: imximage: ad...
70
71
  	CMD_CHECK_BITS_SET,
  	CMD_CHECK_BITS_CLR,
0187c985a   Stefano Babic   tools: add suppor...
72
  	CMD_CSF,
b55e4f48d   Peng Fan   tools: imximage: ...
73
  	CMD_PLUGIN,
6609c2663   Peng Fan   tools: add i.MX8M...
74
75
76
77
78
79
  	/* Follwoing on i.MX8MQ/MM */
  	CMD_FIT,
  	CMD_SIGNED_HDMI,
  	CMD_LOADER,
  	CMD_SECOND_LOADER,
  	CMD_DDR_FW,
8edcde5e4   Stefano Babic   mkimage: Add Free...
80
81
82
83
84
85
86
87
88
  };
  
  enum imximage_fld_types {
  	CFG_INVALID = -1,
  	CFG_COMMAND,
  	CFG_REG_SIZE,
  	CFG_REG_ADDRESS,
  	CFG_REG_VALUE
  };
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
89
90
91
  enum imximage_version {
  	IMXIMAGE_VER_INVALID = -1,
  	IMXIMAGE_V1 = 1,
6609c2663   Peng Fan   tools: add i.MX8M...
92
93
  	IMXIMAGE_V2,
  	IMXIMAGE_V3
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
94
  };
8edcde5e4   Stefano Babic   mkimage: Add Free...
95
96
97
98
99
100
101
102
103
104
105
106
107
108
  
  typedef struct {
  	uint32_t type; /* Type of pointer (byte, halfword, word, wait/read) */
  	uint32_t addr; /* Address to write to */
  	uint32_t value; /* Data to write */
  } dcd_type_addr_data_t;
  
  typedef struct {
  	uint32_t barker; /* Barker for sanity check */
  	uint32_t length; /* Device configuration length (without preamble) */
  } dcd_preamble_t;
  
  typedef struct {
  	dcd_preamble_t preamble;
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
109
110
  	dcd_type_addr_data_t addr_data[MAX_HW_CFG_SIZE_V1];
  } dcd_v1_t;
8edcde5e4   Stefano Babic   mkimage: Add Free...
111
112
113
114
115
116
  
  typedef struct {
  	uint32_t app_code_jump_vector;
  	uint32_t app_code_barker;
  	uint32_t app_code_csf;
  	uint32_t dcd_ptr_ptr;
5b28e913f   Stefano Babic   mkimage: SEGFAULT...
117
  	uint32_t super_root_key;
8edcde5e4   Stefano Babic   mkimage: Add Free...
118
119
  	uint32_t dcd_ptr;
  	uint32_t app_dest_ptr;
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
120
  } flash_header_v1_t;
8edcde5e4   Stefano Babic   mkimage: Add Free...
121
122
123
124
  
  typedef struct {
  	uint32_t length; 	/* Length of data to be read from flash */
  } flash_cfg_parms_t;
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
125
126
127
  typedef struct {
  	flash_header_v1_t fhdr;
  	dcd_v1_t dcd_table;
8edcde5e4   Stefano Babic   mkimage: Add Free...
128
  	flash_cfg_parms_t ext_header;
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
  } imx_header_v1_t;
  
  typedef struct {
  	uint32_t addr;
  	uint32_t value;
  } dcd_addr_data_t;
  
  typedef struct {
  	uint8_t tag;
  	uint16_t length;
  	uint8_t version;
  } __attribute__((packed)) ivt_header_t;
  
  typedef struct {
  	uint8_t tag;
  	uint16_t length;
  	uint8_t param;
  } __attribute__((packed)) write_dcd_command_t;
61903b759   Troy Kisky   imximage: fix com...
147
  struct dcd_v2_cmd {
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
148
149
  	write_dcd_command_t write_dcd_command;
  	dcd_addr_data_t addr_data[MAX_HW_CFG_SIZE_V2];
61903b759   Troy Kisky   imximage: fix com...
150
151
152
153
154
  };
  
  typedef struct {
  	ivt_header_t header;
  	struct dcd_v2_cmd dcd_cmd;
699279cac   Albert ARIBAUD \(3ADEV\)   tools: mkimage: f...
155
  	uint32_t padding[1]; /* end up on an 8-byte boundary */
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
  } dcd_v2_t;
  
  typedef struct {
  	uint32_t start;
  	uint32_t size;
  	uint32_t plugin;
  } boot_data_t;
  
  typedef struct {
  	ivt_header_t header;
  	uint32_t entry;
  	uint32_t reserved1;
  	uint32_t dcd_ptr;
  	uint32_t boot_data_ptr;
  	uint32_t self;
  	uint32_t csf;
  	uint32_t reserved2;
  } flash_header_v2_t;
  
  typedef struct {
  	flash_header_v2_t fhdr;
  	boot_data_t boot_data;
b55e4f48d   Peng Fan   tools: imximage: ...
178
179
180
181
  	union {
  		dcd_v2_t dcd_table;
  		char plugin_code[MAX_PLUGIN_CODE_SIZE];
  	} data;
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
182
  } imx_header_v2_t;
6609c2663   Peng Fan   tools: add i.MX8M...
183
184
185
186
187
  typedef struct {
  	flash_header_v2_t fhdr;
  	boot_data_t boot_data;
  	uint32_t padding[5];
  } imx_header_v3_t;
895d99667   Marek Vasut   imx: Align the im...
188
  /* The header must be aligned to 4k on MX53 for NAND boot */
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
189
190
191
192
193
  struct imx_header {
  	union {
  		imx_header_v1_t hdr_v1;
  		imx_header_v2_t hdr_v2;
  	} header;
377e367a8   Stefano Babic   tools: dynamicall...
194
  };
8edcde5e4   Stefano Babic   mkimage: Add Free...
195

8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
196
197
198
199
  typedef void (*set_dcd_val_t)(struct imx_header *imxhdr,
  					char *name, int lineno,
  					int fld, uint32_t value,
  					uint32_t off);
0b7f7c339   Adrian Alonso   imx: imximage: ad...
200
201
  typedef void (*set_dcd_param_t)(struct imx_header *imxhdr, uint32_t dcd_len,
  					int32_t cmd);
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
202
203
204
  typedef void (*set_dcd_rst_t)(struct imx_header *imxhdr,
  					uint32_t dcd_len,
  					char *name, int lineno);
ad0826dcd   Troy Kisky   imximage: change ...
205
206
  typedef void (*set_imx_hdr_t)(struct imx_header *imxhdr, uint32_t dcd_len,
  		uint32_t entry_point, uint32_t flash_offset);
8edcde5e4   Stefano Babic   mkimage: Add Free...
207

f4d8fccd3   Bryan O'Donoghue   imximage: Encase ...
208
  #endif /* __ASSEMBLY__ */
8edcde5e4   Stefano Babic   mkimage: Add Free...
209
  #endif /* _IMXIMAGE_H_ */