Blame view

common/cmd_fpga.c 8.91 KB
4a9cbbe83   wdenk   Initial revision
1
2
3
4
  /*
   * (C) Copyright 2000, 2001
   * Rich Ireland, Enterasys Networks, rireland@enterasys.com.
   *
1a4596601   Wolfgang Denk   Add GPL-2.0+ SPDX...
5
   * SPDX-License-Identifier:	GPL-2.0+
4a9cbbe83   wdenk   Initial revision
6
7
8
9
10
11
12
   */
  
  /*
   *  FPGA support
   */
  #include <common.h>
  #include <command.h>
8bde7f776   wdenk   * Code cleanup:
13
  #include <fpga.h>
1a897668a   Siva Durga Prasad Paladugu   fpga: Added suppo...
14
  #include <fs.h>
c3d2b4b48   wdenk   Code cleanup.
15
  #include <malloc.h>
4a9cbbe83   wdenk   Initial revision
16

4a9cbbe83   wdenk   Initial revision
17
  /* Local functions */
fc598412c   Michal Simek   cmd: fpga: Clean ...
18
  static int fpga_get_op(char *opstr);
4a9cbbe83   wdenk   Initial revision
19
20
21
22
23
  
  /* Local defines */
  #define FPGA_NONE   -1
  #define FPGA_INFO   0
  #define FPGA_LOAD   1
30ce5ab04   wdenk   * Patch by Gleb N...
24
  #define FPGA_LOADB  2
4a9cbbe83   wdenk   Initial revision
25
  #define FPGA_DUMP   3
f0ff4692f   Stefan Roese   Add FPGA Altera C...
26
  #define FPGA_LOADMK 4
67193864b   Michal Simek   fpga: Add support...
27
28
  #define FPGA_LOADP  5
  #define FPGA_LOADBP 6
1a897668a   Siva Durga Prasad Paladugu   fpga: Added suppo...
29
  #define FPGA_LOADFS 7
4a9cbbe83   wdenk   Initial revision
30
31
32
33
34
35
36
37
38
  
  /* ------------------------------------------------------------------------- */
  /* command form:
   *   fpga <op> <device number> <data addr> <datasize>
   * where op is 'load', 'dump', or 'info'
   * If there is no device number field, the fpga environment variable is used.
   * If there is no data addr field, the fpgadata environment variable is used.
   * The info command requires no data address field.
   */
fc598412c   Michal Simek   cmd: fpga: Clean ...
39
  int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
4a9cbbe83   wdenk   Initial revision
40
  {
d4ca31c40   wdenk   * Cleanup lowboot...
41
42
43
  	int op, dev = FPGA_INVALID_DEVICE;
  	size_t data_size = 0;
  	void *fpga_data = NULL;
fc598412c   Michal Simek   cmd: fpga: Clean ...
44
45
  	char *devstr = getenv("fpga");
  	char *datastr = getenv("fpgadata");
d4ca31c40   wdenk   * Cleanup lowboot...
46
  	int rc = FPGA_FAIL;
a790b5b23   Stefano Babic   cmd_fpga: cleanup...
47
  	int wrong_parms = 0;
fc598412c   Michal Simek   cmd: fpga: Clean ...
48
  #if defined(CONFIG_FIT)
c28c4d193   Marian Balakowicz   [new uImage] Add ...
49
50
51
  	const char *fit_uname = NULL;
  	ulong fit_addr;
  #endif
1a897668a   Siva Durga Prasad Paladugu   fpga: Added suppo...
52
53
54
55
  #if defined(CONFIG_CMD_FPGA_LOADFS)
  	fpga_fs_info fpga_fsinfo;
  	fpga_fsinfo.fstype = FS_TYPE_ANY;
  #endif
d4ca31c40   wdenk   * Cleanup lowboot...
56
57
  
  	if (devstr)
fc598412c   Michal Simek   cmd: fpga: Clean ...
58
  		dev = (int) simple_strtoul(devstr, NULL, 16);
d4ca31c40   wdenk   * Cleanup lowboot...
59
  	if (datastr)
fc598412c   Michal Simek   cmd: fpga: Clean ...
60
  		fpga_data = (void *)simple_strtoul(datastr, NULL, 16);
d4ca31c40   wdenk   * Cleanup lowboot...
61
62
  
  	switch (argc) {
1a897668a   Siva Durga Prasad Paladugu   fpga: Added suppo...
63
64
65
66
67
68
69
70
  #if defined(CONFIG_CMD_FPGA_LOADFS)
  	case 9:
  		fpga_fsinfo.blocksize = (unsigned int)
  					     simple_strtoul(argv[5], NULL, 16);
  		fpga_fsinfo.interface = argv[6];
  		fpga_fsinfo.dev_part = argv[7];
  		fpga_fsinfo.filename = argv[8];
  #endif
d4ca31c40   wdenk   * Cleanup lowboot...
71
  	case 5:		/* fpga <op> <dev> <data> <datasize> */
fc598412c   Michal Simek   cmd: fpga: Clean ...
72
  		data_size = simple_strtoul(argv[4], NULL, 16);
c28c4d193   Marian Balakowicz   [new uImage] Add ...
73

d4ca31c40   wdenk   * Cleanup lowboot...
74
  	case 4:		/* fpga <op> <dev> <data> */
c28c4d193   Marian Balakowicz   [new uImage] Add ...
75
  #if defined(CONFIG_FIT)
fc598412c   Michal Simek   cmd: fpga: Clean ...
76
77
  		if (fit_parse_subimage(argv[3], (ulong)fpga_data,
  				       &fit_addr, &fit_uname)) {
c28c4d193   Marian Balakowicz   [new uImage] Add ...
78
  			fpga_data = (void *)fit_addr;
fc598412c   Michal Simek   cmd: fpga: Clean ...
79
80
81
82
  			debug("*  fpga: subimage '%s' from FIT image ",
  			      fit_uname);
  			debug("at 0x%08lx
  ", fit_addr);
c28c4d193   Marian Balakowicz   [new uImage] Add ...
83
84
85
  		} else
  #endif
  		{
fc598412c   Michal Simek   cmd: fpga: Clean ...
86
  			fpga_data = (void *)simple_strtoul(argv[3], NULL, 16);
06297db06   Stefano Babic   FPGA: use debug()...
87
88
  			debug("*  fpga: cmdline image address = 0x%08lx
  ",
fc598412c   Michal Simek   cmd: fpga: Clean ...
89
  			      (ulong)fpga_data);
c28c4d193   Marian Balakowicz   [new uImage] Add ...
90
  		}
fc598412c   Michal Simek   cmd: fpga: Clean ...
91
92
  		debug("%s: fpga_data = 0x%x
  ", __func__, (uint)fpga_data);
c28c4d193   Marian Balakowicz   [new uImage] Add ...
93

d4ca31c40   wdenk   * Cleanup lowboot...
94
  	case 3:		/* fpga <op> <dev | data addr> */
fc598412c   Michal Simek   cmd: fpga: Clean ...
95
  		dev = (int)simple_strtoul(argv[2], NULL, 16);
06297db06   Stefano Babic   FPGA: use debug()...
96
97
  		debug("%s: device = %d
  ", __func__, dev);
d4ca31c40   wdenk   * Cleanup lowboot...
98
  		/* FIXME - this is a really weak test */
fc598412c   Michal Simek   cmd: fpga: Clean ...
99
100
  		if ((argc == 3) && (dev > fpga_count())) {
  			/* must be buffer ptr */
06297db06   Stefano Babic   FPGA: use debug()...
101
102
  			debug("%s: Assuming buffer pointer in arg 3
  ",
fc598412c   Michal Simek   cmd: fpga: Clean ...
103
  			      __func__);
c28c4d193   Marian Balakowicz   [new uImage] Add ...
104
105
  
  #if defined(CONFIG_FIT)
fc598412c   Michal Simek   cmd: fpga: Clean ...
106
107
  			if (fit_parse_subimage(argv[2], (ulong)fpga_data,
  					       &fit_addr, &fit_uname)) {
c28c4d193   Marian Balakowicz   [new uImage] Add ...
108
  				fpga_data = (void *)fit_addr;
fc598412c   Michal Simek   cmd: fpga: Clean ...
109
110
111
112
  				debug("*  fpga: subimage '%s' from FIT image ",
  				      fit_uname);
  				debug("at 0x%08lx
  ", fit_addr);
c28c4d193   Marian Balakowicz   [new uImage] Add ...
113
114
115
  			} else
  #endif
  			{
fc598412c   Michal Simek   cmd: fpga: Clean ...
116
117
118
119
  				fpga_data = (void *)dev;
  				debug("*  fpga: cmdline image addr = 0x%08lx
  ",
  				      (ulong)fpga_data);
c28c4d193   Marian Balakowicz   [new uImage] Add ...
120
  			}
06297db06   Stefano Babic   FPGA: use debug()...
121
122
  			debug("%s: fpga_data = 0x%x
  ",
fc598412c   Michal Simek   cmd: fpga: Clean ...
123
  			      __func__, (uint)fpga_data);
d4ca31c40   wdenk   * Cleanup lowboot...
124
125
  			dev = FPGA_INVALID_DEVICE;	/* reset device num */
  		}
c28c4d193   Marian Balakowicz   [new uImage] Add ...
126

d4ca31c40   wdenk   * Cleanup lowboot...
127
  	case 2:		/* fpga <op> */
fc598412c   Michal Simek   cmd: fpga: Clean ...
128
  		op = (int)fpga_get_op(argv[1]);
d4ca31c40   wdenk   * Cleanup lowboot...
129
  		break;
c28c4d193   Marian Balakowicz   [new uImage] Add ...
130

d4ca31c40   wdenk   * Cleanup lowboot...
131
  	default:
fc598412c   Michal Simek   cmd: fpga: Clean ...
132
133
  		debug("%s: Too many or too few args (%d)
  ", __func__, argc);
d4ca31c40   wdenk   * Cleanup lowboot...
134
135
136
  		op = FPGA_NONE;	/* force usage display */
  		break;
  	}
a790b5b23   Stefano Babic   cmd_fpga: cleanup...
137
138
139
140
141
142
143
144
145
146
  	if (dev == FPGA_INVALID_DEVICE) {
  		puts("FPGA device not specified
  ");
  		op = FPGA_NONE;
  	}
  
  	switch (op) {
  	case FPGA_NONE:
  	case FPGA_INFO:
  		break;
1a897668a   Siva Durga Prasad Paladugu   fpga: Added suppo...
147
148
149
150
151
152
153
  #if defined(CONFIG_CMD_FPGA_LOADFS)
  	case FPGA_LOADFS:
  		/* Blocksize can be zero */
  		if (!fpga_fsinfo.interface || !fpga_fsinfo.dev_part ||
  		    !fpga_fsinfo.filename)
  			wrong_parms = 1;
  #endif
a790b5b23   Stefano Babic   cmd_fpga: cleanup...
154
  	case FPGA_LOAD:
67193864b   Michal Simek   fpga: Add support...
155
  	case FPGA_LOADP:
a790b5b23   Stefano Babic   cmd_fpga: cleanup...
156
  	case FPGA_LOADB:
67193864b   Michal Simek   fpga: Add support...
157
  	case FPGA_LOADBP:
a790b5b23   Stefano Babic   cmd_fpga: cleanup...
158
159
160
161
  	case FPGA_DUMP:
  		if (!fpga_data || !data_size)
  			wrong_parms = 1;
  		break;
64e809afe   Siva Durga Prasad Paladugu   fpga: Guard the L...
162
  #if defined(CONFIG_CMD_FPGA_LOADMK)
a790b5b23   Stefano Babic   cmd_fpga: cleanup...
163
164
165
166
  	case FPGA_LOADMK:
  		if (!fpga_data)
  			wrong_parms = 1;
  		break;
64e809afe   Siva Durga Prasad Paladugu   fpga: Guard the L...
167
  #endif
a790b5b23   Stefano Babic   cmd_fpga: cleanup...
168
169
170
171
172
173
174
  	}
  
  	if (wrong_parms) {
  		puts("Wrong parameters for FPGA request
  ");
  		op = FPGA_NONE;
  	}
d4ca31c40   wdenk   * Cleanup lowboot...
175
176
  	switch (op) {
  	case FPGA_NONE:
4c12eeb8b   Simon Glass   Convert cmd_usage...
177
  		return CMD_RET_USAGE;
d4ca31c40   wdenk   * Cleanup lowboot...
178
179
  
  	case FPGA_INFO:
fc598412c   Michal Simek   cmd: fpga: Clean ...
180
  		rc = fpga_info(dev);
d4ca31c40   wdenk   * Cleanup lowboot...
181
182
183
  		break;
  
  	case FPGA_LOAD:
7a78bd267   Michal Simek   fpga: Define bits...
184
  		rc = fpga_load(dev, fpga_data, data_size, BIT_FULL);
d4ca31c40   wdenk   * Cleanup lowboot...
185
  		break;
67193864b   Michal Simek   fpga: Add support...
186
187
188
189
190
  #if defined(CONFIG_CMD_FPGA_LOADP)
  	case FPGA_LOADP:
  		rc = fpga_load(dev, fpga_data, data_size, BIT_PARTIAL);
  		break;
  #endif
30ce5ab04   wdenk   * Patch by Gleb N...
191
  	case FPGA_LOADB:
7a78bd267   Michal Simek   fpga: Define bits...
192
  		rc = fpga_loadbitstream(dev, fpga_data, data_size, BIT_FULL);
30ce5ab04   wdenk   * Patch by Gleb N...
193
  		break;
67193864b   Michal Simek   fpga: Add support...
194
195
196
197
198
  #if defined(CONFIG_CMD_FPGA_LOADBP)
  	case FPGA_LOADBP:
  		rc = fpga_loadbitstream(dev, fpga_data, data_size, BIT_PARTIAL);
  		break;
  #endif
1a897668a   Siva Durga Prasad Paladugu   fpga: Added suppo...
199
200
201
202
203
  #if defined(CONFIG_CMD_FPGA_LOADFS)
  	case FPGA_LOADFS:
  		rc = fpga_fsload(dev, fpga_data, data_size, &fpga_fsinfo);
  		break;
  #endif
64e809afe   Siva Durga Prasad Paladugu   fpga: Guard the L...
204
  #if defined(CONFIG_CMD_FPGA_LOADMK)
f0ff4692f   Stefan Roese   Add FPGA Altera C...
205
  	case FPGA_LOADMK:
fc598412c   Michal Simek   cmd: fpga: Clean ...
206
  		switch (genimg_get_format(fpga_data)) {
21d29f7f9   Heiko Schocher   bootm: make use o...
207
  #if defined(CONFIG_IMAGE_FORMAT_LEGACY)
d5934ad77   Marian Balakowicz   [new uImage] Add ...
208
209
  		case IMAGE_FORMAT_LEGACY:
  			{
fc598412c   Michal Simek   cmd: fpga: Clean ...
210
211
212
  				image_header_t *hdr =
  						(image_header_t *)fpga_data;
  				ulong data;
32d7cdd36   Michal Simek   fpga: Add support...
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
  				uint8_t comp;
  
  				comp = image_get_comp(hdr);
  				if (comp == IH_COMP_GZIP) {
  					ulong image_buf = image_get_data(hdr);
  					data = image_get_load(hdr);
  					ulong image_size = ~0UL;
  
  					if (gunzip((void *)data, ~0UL,
  						   (void *)image_buf,
  						   &image_size) != 0) {
  						puts("GUNZIP: error
  ");
  						return 1;
  					}
  					data_size = image_size;
  				} else {
  					data = (ulong)image_get_data(hdr);
  					data_size = image_get_data_size(hdr);
  				}
7a78bd267   Michal Simek   fpga: Define bits...
233
234
  				rc = fpga_load(dev, (void *)data, data_size,
  					       BIT_FULL);
f0ff4692f   Stefan Roese   Add FPGA Altera C...
235
  			}
d5934ad77   Marian Balakowicz   [new uImage] Add ...
236
  			break;
21d29f7f9   Heiko Schocher   bootm: make use o...
237
  #endif
d5934ad77   Marian Balakowicz   [new uImage] Add ...
238
239
  #if defined(CONFIG_FIT)
  		case IMAGE_FORMAT_FIT:
c28c4d193   Marian Balakowicz   [new uImage] Add ...
240
241
242
  			{
  				const void *fit_hdr = (const void *)fpga_data;
  				int noffset;
e6a857da7   Wolfgang Denk   fpga: constify to...
243
  				const void *fit_data;
c28c4d193   Marian Balakowicz   [new uImage] Add ...
244
245
  
  				if (fit_uname == NULL) {
fc598412c   Michal Simek   cmd: fpga: Clean ...
246
247
  					puts("No FIT subimage unit name
  ");
c28c4d193   Marian Balakowicz   [new uImage] Add ...
248
249
  					return 1;
  				}
fc598412c   Michal Simek   cmd: fpga: Clean ...
250
251
252
  				if (!fit_check_format(fit_hdr)) {
  					puts("Bad FIT image format
  ");
c28c4d193   Marian Balakowicz   [new uImage] Add ...
253
254
255
256
  					return 1;
  				}
  
  				/* get fpga component image node offset */
fc598412c   Michal Simek   cmd: fpga: Clean ...
257
258
  				noffset = fit_image_get_node(fit_hdr,
  							     fit_uname);
c28c4d193   Marian Balakowicz   [new uImage] Add ...
259
  				if (noffset < 0) {
fc598412c   Michal Simek   cmd: fpga: Clean ...
260
261
262
  					printf("Can't find '%s' FIT subimage
  ",
  					       fit_uname);
c28c4d193   Marian Balakowicz   [new uImage] Add ...
263
264
265
266
  					return 1;
  				}
  
  				/* verify integrity */
b8da83665   Simon Glass   image: Rename fit...
267
  				if (!fit_image_verify(fit_hdr, noffset)) {
c28c4d193   Marian Balakowicz   [new uImage] Add ...
268
269
270
271
272
273
  					puts ("Bad Data Hash
  ");
  					return 1;
  				}
  
  				/* get fpga subimage data address and length */
fc598412c   Michal Simek   cmd: fpga: Clean ...
274
275
276
277
  				if (fit_image_get_data(fit_hdr, noffset,
  						       &fit_data, &data_size)) {
  					puts("Fpga subimage data not found
  ");
c28c4d193   Marian Balakowicz   [new uImage] Add ...
278
279
  					return 1;
  				}
7a78bd267   Michal Simek   fpga: Define bits...
280
281
  				rc = fpga_load(dev, fit_data, data_size,
  					       BIT_FULL);
c28c4d193   Marian Balakowicz   [new uImage] Add ...
282
  			}
d5934ad77   Marian Balakowicz   [new uImage] Add ...
283
284
285
  			break;
  #endif
  		default:
fc598412c   Michal Simek   cmd: fpga: Clean ...
286
287
  			puts("** Unknown image type
  ");
d5934ad77   Marian Balakowicz   [new uImage] Add ...
288
289
  			rc = FPGA_FAIL;
  			break;
f0ff4692f   Stefan Roese   Add FPGA Altera C...
290
291
  		}
  		break;
64e809afe   Siva Durga Prasad Paladugu   fpga: Guard the L...
292
  #endif
f0ff4692f   Stefan Roese   Add FPGA Altera C...
293

d4ca31c40   wdenk   * Cleanup lowboot...
294
  	case FPGA_DUMP:
fc598412c   Michal Simek   cmd: fpga: Clean ...
295
  		rc = fpga_dump(dev, fpga_data, data_size);
d4ca31c40   wdenk   * Cleanup lowboot...
296
297
298
  		break;
  
  	default:
fc598412c   Michal Simek   cmd: fpga: Clean ...
299
300
  		printf("Unknown operation
  ");
4c12eeb8b   Simon Glass   Convert cmd_usage...
301
  		return CMD_RET_USAGE;
d4ca31c40   wdenk   * Cleanup lowboot...
302
  	}
fc598412c   Michal Simek   cmd: fpga: Clean ...
303
  	return rc;
4a9cbbe83   wdenk   Initial revision
304
  }
4a9cbbe83   wdenk   Initial revision
305
306
307
308
  /*
   * Map op to supported operations.  We don't use a table since we
   * would just have to relocate it from flash anyway.
   */
fc598412c   Michal Simek   cmd: fpga: Clean ...
309
  static int fpga_get_op(char *opstr)
4a9cbbe83   wdenk   Initial revision
310
311
  {
  	int op = FPGA_NONE;
fc598412c   Michal Simek   cmd: fpga: Clean ...
312
  	if (!strcmp("info", opstr))
4a9cbbe83   wdenk   Initial revision
313
  		op = FPGA_INFO;
fc598412c   Michal Simek   cmd: fpga: Clean ...
314
  	else if (!strcmp("loadb", opstr))
30ce5ab04   wdenk   * Patch by Gleb N...
315
  		op = FPGA_LOADB;
fc598412c   Michal Simek   cmd: fpga: Clean ...
316
  	else if (!strcmp("load", opstr))
4a9cbbe83   wdenk   Initial revision
317
  		op = FPGA_LOAD;
67193864b   Michal Simek   fpga: Add support...
318
319
320
321
322
323
324
325
  #if defined(CONFIG_CMD_FPGA_LOADP)
  	else if (!strcmp("loadp", opstr))
  		op = FPGA_LOADP;
  #endif
  #if defined(CONFIG_CMD_FPGA_LOADBP)
  	else if (!strcmp("loadbp", opstr))
  		op = FPGA_LOADBP;
  #endif
1a897668a   Siva Durga Prasad Paladugu   fpga: Added suppo...
326
327
328
329
  #if defined(CONFIG_CMD_FPGA_LOADFS)
  	else if (!strcmp("loadfs", opstr))
  		op = FPGA_LOADFS;
  #endif
64e809afe   Siva Durga Prasad Paladugu   fpga: Guard the L...
330
  #if defined(CONFIG_CMD_FPGA_LOADMK)
fc598412c   Michal Simek   cmd: fpga: Clean ...
331
  	else if (!strcmp("loadmk", opstr))
f0ff4692f   Stefan Roese   Add FPGA Altera C...
332
  		op = FPGA_LOADMK;
64e809afe   Siva Durga Prasad Paladugu   fpga: Guard the L...
333
  #endif
fc598412c   Michal Simek   cmd: fpga: Clean ...
334
  	else if (!strcmp("dump", opstr))
4a9cbbe83   wdenk   Initial revision
335
  		op = FPGA_DUMP;
4a9cbbe83   wdenk   Initial revision
336

fc598412c   Michal Simek   cmd: fpga: Clean ...
337
338
339
  	if (op == FPGA_NONE)
  		printf("Unknown fpga operation \"%s\"
  ", opstr);
4a9cbbe83   wdenk   Initial revision
340
341
  	return op;
  }
1a897668a   Siva Durga Prasad Paladugu   fpga: Added suppo...
342
343
344
  #if defined(CONFIG_CMD_FPGA_LOADFS)
  U_BOOT_CMD(fpga, 9, 1, do_fpga,
  #else
fc598412c   Michal Simek   cmd: fpga: Clean ...
345
  U_BOOT_CMD(fpga, 6, 1, do_fpga,
1a897668a   Siva Durga Prasad Paladugu   fpga: Added suppo...
346
  #endif
fc598412c   Michal Simek   cmd: fpga: Clean ...
347
348
349
350
351
352
353
354
355
356
357
  	   "loadable FPGA image support",
  	   "[operation type] [device number] [image address] [image size]
  "
  	   "fpga operations:
  "
  	   "  dump\t[dev]\t\t\tLoad device to memory buffer
  "
  	   "  info\t[dev]\t\t\tlist known device information
  "
  	   "  load\t[dev] [address] [size]\tLoad device from memory buffer
  "
67193864b   Michal Simek   fpga: Add support...
358
359
360
361
362
  #if defined(CONFIG_CMD_FPGA_LOADP)
  	   "  loadp\t[dev] [address] [size]\t"
  	   "Load device from memory buffer with partial bitstream
  "
  #endif
fc598412c   Michal Simek   cmd: fpga: Clean ...
363
364
365
  	   "  loadb\t[dev] [address] [size]\t"
  	   "Load device from bitstream buffer (Xilinx only)
  "
67193864b   Michal Simek   fpga: Add support...
366
367
368
369
370
371
  #if defined(CONFIG_CMD_FPGA_LOADBP)
  	   "  loadbp\t[dev] [address] [size]\t"
  	   "Load device from bitstream buffer with partial bitstream"
  	   "(Xilinx only)
  "
  #endif
1a897668a   Siva Durga Prasad Paladugu   fpga: Added suppo...
372
373
374
375
376
377
378
379
  #if defined(CONFIG_CMD_FPGA_LOADFS)
  	   "Load device from filesystem (FAT by default) (Xilinx only)
  "
  	   "  loadfs [dev] [address] [image size] [blocksize] <interface>
  "
  	   "        [<dev[:part]>] <filename>
  "
  #endif
64e809afe   Siva Durga Prasad Paladugu   fpga: Guard the L...
380
  #if defined(CONFIG_CMD_FPGA_LOADMK)
fc598412c   Michal Simek   cmd: fpga: Clean ...
381
  	   "  loadmk [dev] [address]\tLoad device generated with mkimage"
c28c4d193   Marian Balakowicz   [new uImage] Add ...
382
  #if defined(CONFIG_FIT)
fc598412c   Michal Simek   cmd: fpga: Clean ...
383
384
385
386
387
  	   "
  "
  	   "\tFor loadmk operating on FIT format uImage address must include
  "
  	   "\tsubimage unit name in the form of addr:<subimg_uname>"
c28c4d193   Marian Balakowicz   [new uImage] Add ...
388
  #endif
64e809afe   Siva Durga Prasad Paladugu   fpga: Guard the L...
389
  #endif
c28c4d193   Marian Balakowicz   [new uImage] Add ...
390
  );