Blame view

cmd/cbfs.c 4.77 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  // SPDX-License-Identifier: GPL-2.0+
84cd93272   Gabe Black   fs: Add a Coreboo...
2
3
  /*
   * Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
84cd93272   Gabe Black   fs: Add a Coreboo...
4
5
6
7
8
9
10
11
   */
  
  /*
   * CBFS commands
   */
  #include <common.h>
  #include <command.h>
  #include <cbfs.h>
633fb736c   Simon Glass   cbfs: Update a fu...
12
13
  static int do_cbfs_init(cmd_tbl_t *cmdtp, int flag, int argc,
  			char *const argv[])
84cd93272   Gabe Black   fs: Add a Coreboo...
14
15
16
17
18
19
20
21
22
23
  {
  	uintptr_t end_of_rom = 0xffffffff;
  	char *ep;
  
  	if (argc > 2) {
  		printf("usage: cbfsls [end of rom]>
  ");
  		return 0;
  	}
  	if (argc == 2) {
33222c8a2   Andre Heider   cmd: cbfs: fix re...
24
  		end_of_rom = simple_strtoul(argv[1], &ep, 16);
84cd93272   Gabe Black   fs: Add a Coreboo...
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  		if (*ep) {
  			puts("
  ** Invalid end of ROM **
  ");
  			return 1;
  		}
  	}
  	file_cbfs_init(end_of_rom);
  	if (file_cbfs_result != CBFS_SUCCESS) {
  		printf("%s.
  ", file_cbfs_error());
  		return 1;
  	}
  	return 0;
  }
  
  U_BOOT_CMD(
  	cbfsinit,	2,	0,	do_cbfs_init,
  	"initialize the cbfs driver",
  	"[end of rom]
  "
  	"    - Initialize the cbfs driver. The optional 'end of rom'
  "
  	"      parameter specifies where the end of the ROM is that the
  "
  	"      CBFS is in. It defaults to 0xFFFFFFFF
  "
  );
633fb736c   Simon Glass   cbfs: Update a fu...
53
54
  static int do_cbfs_fsload(cmd_tbl_t *cmdtp, int flag, int argc,
  			  char *const argv[])
84cd93272   Gabe Black   fs: Add a Coreboo...
55
56
57
58
  {
  	const struct cbfs_cachenode *file;
  	unsigned long offset;
  	unsigned long count;
84cd93272   Gabe Black   fs: Add a Coreboo...
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
  	long size;
  
  	if (argc < 3) {
  		printf("usage: cbfsload <addr> <filename> [bytes]
  ");
  		return 1;
  	}
  
  	/* parse offset and count */
  	offset = simple_strtoul(argv[1], NULL, 16);
  	if (argc == 4)
  		count = simple_strtoul(argv[3], NULL, 16);
  	else
  		count = 0;
  
  	file = file_cbfs_find(argv[2]);
  	if (!file) {
  		if (file_cbfs_result == CBFS_FILE_NOT_FOUND)
  			printf("%s: %s
  ", file_cbfs_error(), argv[2]);
  		else
  			printf("%s.
  ", file_cbfs_error());
  		return 1;
  	}
  
  	printf("reading %s
  ", file_cbfs_name(file));
  
  	size = file_cbfs_read(file, (void *)offset, count);
  
  	printf("
  %ld bytes read
  ", size);
018f53032   Simon Glass   env: Rename commo...
93
  	env_set_hex("filesize", size);
84cd93272   Gabe Black   fs: Add a Coreboo...
94
95
96
97
98
99
100
101
102
103
104
105
  
  	return 0;
  }
  
  U_BOOT_CMD(
  	cbfsload,	4,	0,	do_cbfs_fsload,
  	"load binary file from a cbfs filesystem",
  	"<addr> <filename> [bytes]
  "
  	"    - load binary file 'filename' from the cbfs to address 'addr'
  "
  );
633fb736c   Simon Glass   cbfs: Update a fu...
106
107
  static int do_cbfs_ls(cmd_tbl_t *cmdtp, int flag, int argc,
  		      char *const argv[])
84cd93272   Gabe Black   fs: Add a Coreboo...
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
  {
  	const struct cbfs_cachenode *file = file_cbfs_get_first();
  	int files = 0;
  
  	if (!file) {
  		printf("%s.
  ", file_cbfs_error());
  		return 1;
  	}
  
  	printf("     size              type  name
  ");
  	printf("------------------------------------------
  ");
  	while (file) {
a696d768c   Simon Glass   dm: cbfs: Fix han...
123
  		int type = file_cbfs_type(file);
84cd93272   Gabe Black   fs: Add a Coreboo...
124
125
126
127
128
129
  		char *type_name = NULL;
  		const char *filename = file_cbfs_name(file);
  
  		printf(" %8d", file_cbfs_size(file));
  
  		switch (type) {
881bb9ab3   Bin Meng   fs: cbfs: Add mis...
130
131
132
133
134
135
  		case CBFS_TYPE_BOOTBLOCK:
  			type_name = "bootblock";
  			break;
  		case CBFS_TYPE_CBFSHEADER:
  			type_name = "cbfs header";
  			break;
84cd93272   Gabe Black   fs: Add a Coreboo...
136
137
138
139
140
141
  		case CBFS_TYPE_STAGE:
  			type_name = "stage";
  			break;
  		case CBFS_TYPE_PAYLOAD:
  			type_name = "payload";
  			break;
881bb9ab3   Bin Meng   fs: cbfs: Add mis...
142
143
144
  		case CBFS_TYPE_FIT:
  			type_name = "fit";
  			break;
84cd93272   Gabe Black   fs: Add a Coreboo...
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
  		case CBFS_TYPE_OPTIONROM:
  			type_name = "option rom";
  			break;
  		case CBFS_TYPE_BOOTSPLASH:
  			type_name = "boot splash";
  			break;
  		case CBFS_TYPE_RAW:
  			type_name = "raw";
  			break;
  		case CBFS_TYPE_VSA:
  			type_name = "vsa";
  			break;
  		case CBFS_TYPE_MBI:
  			type_name = "mbi";
  			break;
  		case CBFS_TYPE_MICROCODE:
  			type_name = "microcode";
  			break;
881bb9ab3   Bin Meng   fs: cbfs: Add mis...
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
  		case CBFS_TYPE_FSP:
  			type_name = "fsp";
  			break;
  		case CBFS_TYPE_MRC:
  			type_name = "mrc";
  			break;
  		case CBFS_TYPE_MMA:
  			type_name = "mma";
  			break;
  		case CBFS_TYPE_EFI:
  			type_name = "efi";
  			break;
  		case CBFS_TYPE_STRUCT:
  			type_name = "struct";
  			break;
14fdf91eb   Bin Meng   fs: cbfs: Make al...
178
  		case CBFS_TYPE_CMOS_DEFAULT:
84cd93272   Gabe Black   fs: Add a Coreboo...
179
180
  			type_name = "cmos default";
  			break;
881bb9ab3   Bin Meng   fs: cbfs: Add mis...
181
182
183
184
185
186
  		case CBFS_TYPE_SPD:
  			type_name = "spd";
  			break;
  		case CBFS_TYPE_MRC_CACHE:
  			type_name = "mrc cache";
  			break;
14fdf91eb   Bin Meng   fs: cbfs: Make al...
187
  		case CBFS_TYPE_CMOS_LAYOUT:
84cd93272   Gabe Black   fs: Add a Coreboo...
188
189
  			type_name = "cmos layout";
  			break;
a696d768c   Simon Glass   dm: cbfs: Fix han...
190
191
  		case -1:
  		case 0:
84cd93272   Gabe Black   fs: Add a Coreboo...
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
  			type_name = "null";
  			break;
  		}
  		if (type_name)
  			printf("  %16s", type_name);
  		else
  			printf("  %16d", type);
  
  		if (filename[0])
  			printf("  %s
  ", filename);
  		else
  			printf("  %s
  ", "(empty)");
  		file_cbfs_get_next(&file);
  		files++;
  	}
  
  	printf("
  %d file(s)
  
  ", files);
  	return 0;
  }
  
  U_BOOT_CMD(
  	cbfsls,	1,	1,	do_cbfs_ls,
  	"list files",
  	"    - list the files in the cbfs
  "
  );
633fb736c   Simon Glass   cbfs: Update a fu...
223
224
  static int do_cbfs_fsinfo(cmd_tbl_t *cmdtp, int flag, int argc,
  			  char *const argv[])
84cd93272   Gabe Black   fs: Add a Coreboo...
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
  {
  	const struct cbfs_header *header = file_cbfs_get_header();
  
  	if (!header) {
  		printf("%s.
  ", file_cbfs_error());
  		return 1;
  	}
  
  	printf("
  ");
  	printf("CBFS version: %#x
  ", header->version);
  	printf("ROM size: %#x
  ", header->rom_size);
  	printf("Boot block size: %#x
  ", header->boot_block_size);
  	printf("CBFS size: %#x
  ",
  		header->rom_size - header->boot_block_size - header->offset);
  	printf("Alignment: %d
  ", header->align);
  	printf("Offset: %#x
  ", header->offset);
  	printf("
  ");
  
  	return 0;
  }
  
  U_BOOT_CMD(
  	cbfsinfo,	1,	1,	do_cbfs_fsinfo,
  	"print information about filesystem",
  	"    - print information about the cbfs filesystem
  "
  );