Blame view

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

6cb83829a   Marek Vasut   tools: arm: imx: ...
16
17
  /*
   * NOTE: This file must be kept in sync with arch/arm/include/asm/\
552a848e4   Stefano Babic   imx: reorganize I...
18
   *       mach-imx/imximage.cfg because tools/imximage.c can not
6cb83829a   Marek Vasut   tools: arm: imx: ...
19
20
   *       cross-include headers from arch/arm/ and vice-versa.
   */
8edcde5e4   Stefano Babic   mkimage: Add Free...
21
  #define CMD_DATA_STR	"DATA"
377e367a8   Stefano Babic   tools: dynamicall...
22
23
  
  /* Initial Vector Table Offset */
49d3e2721   Dirk Behme   imximage: Remove ...
24
  #define FLASH_OFFSET_UNDEFINED	0xFFFFFFFF
8edcde5e4   Stefano Babic   mkimage: Add Free...
25
26
27
28
29
  #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...
30
31
  #define FLASH_OFFSET_NOR	0x1000
  #define FLASH_OFFSET_SATA	FLASH_OFFSET_STANDARD
9598f8c30   Ye.Li   imx: imximage: Ad...
32
  #define FLASH_OFFSET_QSPI	0x1000
8edcde5e4   Stefano Babic   mkimage: Add Free...
33

377e367a8   Stefano Babic   tools: dynamicall...
34
35
36
37
38
39
40
41
42
  /* 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...
43
  #define FLASH_LOADSIZE_QSPI		0x0 /* entire image */
377e367a8   Stefano Babic   tools: dynamicall...
44

0b7f7c339   Adrian Alonso   imx: imximage: ad...
45
46
47
48
49
50
51
  /* Command tags and parameters */
  #define IVT_HEADER_TAG			0xD1
  #define IVT_VERSION			0x40
  #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: ...
52
53
  #define DCD_WRITE_CLR_BIT_PARAM		0xC
  #define DCD_WRITE_SET_BIT_PARAM		0x1C
0b7f7c339   Adrian Alonso   imx: imximage: ad...
54
55
56
  #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...
57

8edcde5e4   Stefano Babic   mkimage: Add Free...
58
59
  enum imximage_cmd {
  	CMD_INVALID,
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
60
  	CMD_IMAGE_VERSION,
8edcde5e4   Stefano Babic   mkimage: Add Free...
61
  	CMD_BOOT_FROM,
6cb83829a   Marek Vasut   tools: arm: imx: ...
62
  	CMD_BOOT_OFFSET,
0b7f7c339   Adrian Alonso   imx: imximage: ad...
63
64
  	CMD_WRITE_DATA,
  	CMD_WRITE_CLR_BIT,
3e0a71c15   Peng Fan   tools: imximage: ...
65
  	CMD_WRITE_SET_BIT,
0b7f7c339   Adrian Alonso   imx: imximage: ad...
66
67
  	CMD_CHECK_BITS_SET,
  	CMD_CHECK_BITS_CLR,
0187c985a   Stefano Babic   tools: add suppor...
68
  	CMD_CSF,
b55e4f48d   Peng Fan   tools: imximage: ...
69
  	CMD_PLUGIN,
8edcde5e4   Stefano Babic   mkimage: Add Free...
70
71
72
73
74
75
76
77
78
  };
  
  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...
79
80
81
82
83
  enum imximage_version {
  	IMXIMAGE_VER_INVALID = -1,
  	IMXIMAGE_V1 = 1,
  	IMXIMAGE_V2
  };
8edcde5e4   Stefano Babic   mkimage: Add Free...
84
85
86
87
88
89
90
91
92
93
94
95
96
97
  
  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...
98
99
  	dcd_type_addr_data_t addr_data[MAX_HW_CFG_SIZE_V1];
  } dcd_v1_t;
8edcde5e4   Stefano Babic   mkimage: Add Free...
100
101
102
103
104
105
  
  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...
106
  	uint32_t super_root_key;
8edcde5e4   Stefano Babic   mkimage: Add Free...
107
108
  	uint32_t dcd_ptr;
  	uint32_t app_dest_ptr;
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
109
  } flash_header_v1_t;
8edcde5e4   Stefano Babic   mkimage: Add Free...
110
111
112
113
  
  typedef struct {
  	uint32_t length; 	/* Length of data to be read from flash */
  } flash_cfg_parms_t;
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
114
115
116
  typedef struct {
  	flash_header_v1_t fhdr;
  	dcd_v1_t dcd_table;
8edcde5e4   Stefano Babic   mkimage: Add Free...
117
  	flash_cfg_parms_t ext_header;
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
  } 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...
136
  struct dcd_v2_cmd {
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
137
138
  	write_dcd_command_t write_dcd_command;
  	dcd_addr_data_t addr_data[MAX_HW_CFG_SIZE_V2];
61903b759   Troy Kisky   imximage: fix com...
139
140
141
142
143
  };
  
  typedef struct {
  	ivt_header_t header;
  	struct dcd_v2_cmd dcd_cmd;
699279cac   Albert ARIBAUD \(3ADEV\)   tools: mkimage: f...
144
  	uint32_t padding[1]; /* end up on an 8-byte boundary */
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
  } 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: ...
167
168
169
170
  	union {
  		dcd_v2_t dcd_table;
  		char plugin_code[MAX_PLUGIN_CODE_SIZE];
  	} data;
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
171
  } imx_header_v2_t;
895d99667   Marek Vasut   imx: Align the im...
172
  /* The header must be aligned to 4k on MX53 for NAND boot */
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
173
174
175
176
177
  struct imx_header {
  	union {
  		imx_header_v1_t hdr_v1;
  		imx_header_v2_t hdr_v2;
  	} header;
377e367a8   Stefano Babic   tools: dynamicall...
178
  };
8edcde5e4   Stefano Babic   mkimage: Add Free...
179

8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
180
181
182
183
  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...
184
185
  typedef void (*set_dcd_param_t)(struct imx_header *imxhdr, uint32_t dcd_len,
  					int32_t cmd);
8a1edd7d5   Liu Hui-R64343   imximage: Add MX5...
186
187
188
  typedef void (*set_dcd_rst_t)(struct imx_header *imxhdr,
  					uint32_t dcd_len,
  					char *name, int lineno);
ad0826dcd   Troy Kisky   imximage: change ...
189
190
  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...
191
192
  
  #endif /* _IMXIMAGE_H_ */