bdinfo.c 9.6 KB
Newer Older
W
wdenk 已提交
1 2 3 4
/*
 * (C) Copyright 2003
 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 *
5
 * SPDX-License-Identifier:	GPL-2.0+
W
wdenk 已提交
6 7 8 9 10 11 12
 */

/*
 * Boot support
 */
#include <common.h>
#include <command.h>
13
#include <linux/compiler.h>
W
wdenk 已提交
14

15
DECLARE_GLOBAL_DATA_PTR;
W
wdenk 已提交
16

17 18 19 20 21
__maybe_unused
static void print_num(const char *name, ulong value)
{
	printf("%-12s= 0x%08lX\n", name, value);
}
W
wdenk 已提交
22

S
Simon Glass 已提交
23
__maybe_unused
24 25 26 27 28 29 30 31 32 33 34 35
static void print_eth(int idx)
{
	char name[10], *val;
	if (idx)
		sprintf(name, "eth%iaddr", idx);
	else
		strcpy(name, "ethaddr");
	val = getenv(name);
	if (!val)
		val = "(not set)";
	printf("%-12s= %s\n", name, val);
}
36

37
#ifndef CONFIG_DM_ETH
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
__maybe_unused
static void print_eths(void)
{
	struct eth_device *dev;
	int i = 0;

	do {
		dev = eth_get_dev_by_index(i);
		if (dev) {
			printf("eth%dname    = %s\n", i, dev->name);
			print_eth(i);
			i++;
		}
	} while (dev);

	printf("current eth = %s\n", eth_get_name());
	printf("ip_addr     = %s\n", getenv("ipaddr"));
}
56
#endif
57

58
__maybe_unused
59
static void print_lnum(const char *name, unsigned long long value)
60 61 62 63 64 65 66 67 68 69 70
{
	printf("%-12s= 0x%.8llX\n", name, value);
}

__maybe_unused
static void print_mhz(const char *name, unsigned long hz)
{
	char buf[32];

	printf("%-12s= %6s MHz\n", name, strmhz(buf, hz));
}
W
wdenk 已提交
71

72 73 74 75 76 77

static inline void print_bi_boot_params(const bd_t *bd)
{
	print_num("boot_params",	(ulong)bd->bi_boot_params);
}

M
Max Filippov 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90 91
static inline void print_bi_mem(const bd_t *bd)
{
#if defined(CONFIG_SH)
	print_num("mem start      ",	(ulong)bd->bi_memstart);
	print_lnum("mem size       ",	(u64)bd->bi_memsize);
#elif defined(CONFIG_ARC)
	print_num("mem start",		(ulong)bd->bi_memstart);
	print_lnum("mem size",		(u64)bd->bi_memsize);
#else
	print_num("memstart",		(ulong)bd->bi_memstart);
	print_lnum("memsize",		(u64)bd->bi_memsize);
#endif
}

M
Max Filippov 已提交
92 93 94 95 96 97
static inline void print_bi_dram(const bd_t *bd)
{
#ifdef CONFIG_NR_DRAM_BANKS
	int i;

	for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) {
98 99 100 101 102
		if (bd->bi_dram[i].size) {
			print_num("DRAM bank",	i);
			print_num("-> start",	bd->bi_dram[i].start);
			print_num("-> size",	bd->bi_dram[i].size);
		}
M
Max Filippov 已提交
103 104 105 106
	}
#endif
}

107 108 109 110 111 112 113
static inline void print_bi_flash(const bd_t *bd)
{
#if defined(CONFIG_MICROBLAZE) || defined(CONFIG_SH)
	print_num("flash start    ",	(ulong)bd->bi_flashstart);
	print_num("flash size     ",	(ulong)bd->bi_flashsize);
	print_num("flash offset   ",	(ulong)bd->bi_flashoffset);

T
Tom Rini 已提交
114
#elif defined(CONFIG_NIOS2)
115 116 117 118 119 120 121 122 123 124
	print_num("flash start",	(ulong)bd->bi_flashstart);
	print_num("flash size",		(ulong)bd->bi_flashsize);
	print_num("flash offset",	(ulong)bd->bi_flashoffset);
#else
	print_num("flashstart",		(ulong)bd->bi_flashstart);
	print_num("flashsize",		(ulong)bd->bi_flashsize);
	print_num("flashoffset",	(ulong)bd->bi_flashoffset);
#endif
}

125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
static inline void print_eth_ip_addr(void)
{
#if defined(CONFIG_CMD_NET)
	print_eth(0);
#if defined(CONFIG_HAS_ETH1)
	print_eth(1);
#endif
#if defined(CONFIG_HAS_ETH2)
	print_eth(2);
#endif
#if defined(CONFIG_HAS_ETH3)
	print_eth(3);
#endif
#if defined(CONFIG_HAS_ETH4)
	print_eth(4);
#endif
#if defined(CONFIG_HAS_ETH5)
	print_eth(5);
#endif
	printf("IP addr     = %s\n", getenv("ipaddr"));
#endif
}

148 149 150 151 152 153 154 155 156
static inline void print_baudrate(void)
{
#if defined(CONFIG_PPC)
	printf("baudrate    = %6u bps\n", gd->baudrate);
#else
	printf("baudrate    = %u bps\n", gd->baudrate);
#endif
}

157
static inline void __maybe_unused print_std_bdinfo(const bd_t *bd)
158 159 160 161 162 163 164 165
{
	print_bi_boot_params(bd);
	print_bi_mem(bd);
	print_bi_flash(bd);
	print_eth_ip_addr();
	print_baudrate();
}

166
#if defined(CONFIG_PPC)
Y
York Sun 已提交
167 168 169 170
void __weak board_detail(void)
{
	/* Please define boot_detail() for your platform */
}
W
wdenk 已提交
171

172
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
W
wdenk 已提交
173 174 175 176
{
	bd_t *bd = gd->bd;

#ifdef DEBUG
177 178
	print_num("bd address",		(ulong)bd);
#endif
M
Max Filippov 已提交
179
	print_bi_mem(bd);
180
	print_bi_flash(bd);
181 182
	print_num("sramstart",		bd->bi_sramstart);
	print_num("sramsize",		bd->bi_sramsize);
183
#if	defined(CONFIG_8xx) || defined(CONFIG_E500)
184 185 186
	print_num("immr_base",		bd->bi_immr_base);
#endif
	print_num("bootflags",		bd->bi_bootflags);
187
#if defined(CONFIG_CPM2)
188 189 190
	print_mhz("vco",		bd->bi_vco);
	print_mhz("sccfreq",		bd->bi_sccfreq);
	print_mhz("brgfreq",		bd->bi_brgfreq);
W
wdenk 已提交
191
#endif
192
	print_mhz("intfreq",		bd->bi_intfreq);
193
#if defined(CONFIG_CPM2)
194
	print_mhz("cpmfreq",		bd->bi_cpmfreq);
W
wdenk 已提交
195
#endif
196
	print_mhz("busfreq",		bd->bi_busfreq);
W
wdenk 已提交
197

198 199 200 201 202 203 204 205
#ifdef CONFIG_ENABLE_36BIT_PHYS
#ifdef CONFIG_PHYS_64BIT
	puts("addressing  = 36-bit\n");
#else
	puts("addressing  = 32-bit\n");
#endif
#endif

206
	print_eth_ip_addr();
207
	print_baudrate();
208
	print_num("relocaddr", gd->relocaddr);
Y
York Sun 已提交
209
	board_detail();
W
wdenk 已提交
210 211 212
	return 0;
}

213
#elif defined(CONFIG_NIOS2)
W
wdenk 已提交
214

215
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
W
wdenk 已提交
216 217 218
{
	bd_t *bd = gd->bd;

M
Max Filippov 已提交
219
	print_bi_dram(bd);
220
	print_bi_flash(bd);
W
wdenk 已提交
221

222
#if defined(CONFIG_SYS_SRAM_BASE)
W
wdenk 已提交
223 224 225 226
	print_num ("sram start",	(ulong)bd->bi_sramstart);
	print_num ("sram size",		(ulong)bd->bi_sramsize);
#endif

227
	print_eth_ip_addr();
228
	print_baudrate();
W
wdenk 已提交
229 230 231

	return 0;
}
232 233

#elif defined(CONFIG_MICROBLAZE)
M
Michal Simek 已提交
234

235
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
M
Michal Simek 已提交
236 237
{
	bd_t *bd = gd->bd;
238

M
Max Filippov 已提交
239
	print_bi_dram(bd);
240
	print_bi_flash(bd);
241
#if defined(CONFIG_SYS_SRAM_BASE)
242 243
	print_num("sram start     ",	(ulong)bd->bi_sramstart);
	print_num("sram size      ",	(ulong)bd->bi_sramsize);
M
Michal Simek 已提交
244
#endif
245
#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH)
246
	print_eths();
M
Michal Simek 已提交
247
#endif
248
	print_baudrate();
249 250
	print_num("relocaddr", gd->relocaddr);
	print_num("reloc off", gd->reloc_off);
251 252 253
	print_num("fdt_blob", (ulong)gd->fdt_blob);
	print_num("new_fdt", (ulong)gd->new_fdt);
	print_num("fdt_size", (ulong)gd->fdt_size);
254

M
Michal Simek 已提交
255 256
	return 0;
}
W
wdenk 已提交
257

258 259
#elif defined(CONFIG_M68K)

260
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
261 262
{
	bd_t *bd = gd->bd;
263

M
Max Filippov 已提交
264
	print_bi_mem(bd);
265
	print_bi_flash(bd);
266
#if defined(CONFIG_SYS_INIT_RAM_ADDR)
267 268
	print_num("sramstart",		(ulong)bd->bi_sramstart);
	print_num("sramsize",		(ulong)bd->bi_sramsize);
269
#endif
270
#if defined(CONFIG_SYS_MBAR)
271
	print_num("mbar",		bd->bi_mbar_base);
272
#endif
273 274
	print_mhz("cpufreq",		bd->bi_intfreq);
	print_mhz("busfreq",		bd->bi_busfreq);
275
#ifdef CONFIG_PCI
276
	print_mhz("pcifreq",		bd->bi_pcifreq);
277 278
#endif
#ifdef CONFIG_EXTRA_CLOCK
279 280 281
	print_mhz("flbfreq",		bd->bi_flbfreq);
	print_mhz("inpfreq",		bd->bi_inpfreq);
	print_mhz("vcofreq",		bd->bi_vcofreq);
282
#endif
283
	print_eth_ip_addr();
284
	print_baudrate();
285 286 287 288

	return 0;
}

289
#elif defined(CONFIG_MIPS)
W
wdenk 已提交
290

291
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
W
wdenk 已提交
292
{
293
	print_std_bdinfo(gd->bd);
294 295
	print_num("relocaddr", gd->relocaddr);
	print_num("reloc off", gd->reloc_off);
W
wdenk 已提交
296 297 298 299

	return 0;
}

300
#elif defined(CONFIG_ARM)
W
wdenk 已提交
301

302 303
static int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc,
			char * const argv[])
W
wdenk 已提交
304 305 306
{
	bd_t *bd = gd->bd;

307
	print_num("arch_number",	bd->bi_arch_number);
308
	print_bi_boot_params(bd);
M
Max Filippov 已提交
309
	print_bi_dram(bd);
W
wdenk 已提交
310

Y
York Sun 已提交
311
#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
312
	if (gd->arch.secure_ram & MEM_RESERVE_SECURE_SECURED) {
Y
York Sun 已提交
313
		print_num("Secure ram",
314
			  gd->arch.secure_ram & MEM_RESERVE_SECURE_ADDR_MASK);
Y
York Sun 已提交
315 316
	}
#endif
Y
York Sun 已提交
317 318 319 320
#ifdef CONFIG_RESV_RAM
	if (gd->arch.resv_ram)
		print_num("Reserved ram", gd->arch.resv_ram);
#endif
321
#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH)
322
	print_eths();
323
#endif
324
	print_baudrate();
325
#if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF))
326
	print_num("TLB addr", gd->arch.tlb_addr);
H
Heiko Schocher 已提交
327
#endif
328 329 330 331
	print_num("relocaddr", gd->relocaddr);
	print_num("reloc off", gd->reloc_off);
	print_num("irq_sp", gd->irq_sp);	/* irq stack pointer */
	print_num("sp start ", gd->start_addr_sp);
332
#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO)
333
	print_num("FB base  ", gd->fb_base);
334
#endif
335 336 337 338 339 340 341 342
	/*
	 * TODO: Currently only support for davinci SOC's is added.
	 * Remove this check once all the board implement this.
	 */
#ifdef CONFIG_CLOCKS
	printf("ARM frequency = %ld MHz\n", gd->bd->bi_arm_freq);
	printf("DSP frequency = %ld MHz\n", gd->bd->bi_dsp_freq);
	printf("DDR frequency = %ld MHz\n", gd->bd->bi_ddr_freq);
343 344 345
#endif
#ifdef CONFIG_BOARD_TYPES
	printf("Board Type  = %ld\n", gd->board_type);
346
#endif
347
#if CONFIG_VAL(SYS_MALLOC_F_LEN)
348
	printf("Early malloc usage: %lx / %x\n", gd->malloc_ptr,
349
	       CONFIG_VAL(SYS_MALLOC_F_LEN));
350
#endif
H
Heiko Schocher 已提交
351 352
	if (gd->fdt_blob)
		printf("fdt_blob = %p\n", gd->fdt_blob);
353

W
wdenk 已提交
354 355 356
	return 0;
}

357 358
#elif defined(CONFIG_SH)

359
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
360 361
{
	bd_t *bd = gd->bd;
M
Max Filippov 已提交
362 363

	print_bi_mem(bd);
364
	print_bi_flash(bd);
365
	print_eth_ip_addr();
366
	print_baudrate();
367 368 369
	return 0;
}

G
Graeme Russ 已提交
370 371
#elif defined(CONFIG_X86)

372
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
G
Graeme Russ 已提交
373 374 375
{
	bd_t *bd = gd->bd;

376
	print_bi_boot_params(bd);
377

M
Max Filippov 已提交
378
	print_bi_dram(bd);
G
Graeme Russ 已提交
379 380

#if defined(CONFIG_CMD_NET)
381
	print_eth_ip_addr();
382
	print_mhz("ethspeed",	    bd->bi_ethspeed);
G
Graeme Russ 已提交
383
#endif
384
	print_baudrate();
G
Graeme Russ 已提交
385 386 387 388

	return 0;
}

389 390 391 392 393 394
#elif defined(CONFIG_SANDBOX)

int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
	bd_t *bd = gd->bd;

395
	print_bi_boot_params(bd);
M
Max Filippov 已提交
396
	print_bi_dram(bd);
397
	print_eth_ip_addr();
398

399
#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO)
400
	print_num("FB base  ", gd->fb_base);
401
#endif
402 403 404
	return 0;
}

405 406 407 408 409 410 411
#elif defined(CONFIG_NDS32)

int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
	bd_t *bd = gd->bd;

	print_num("arch_number",	bd->bi_arch_number);
412
	print_bi_boot_params(bd);
M
Max Filippov 已提交
413
	print_bi_dram(bd);
414
	print_eth_ip_addr();
415
	print_baudrate();
416 417 418 419

	return 0;
}

420
#elif defined(CONFIG_ARC)
421 422 423 424 425

int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
	bd_t *bd = gd->bd;

M
Max Filippov 已提交
426
	print_bi_mem(bd);
427
	print_eth_ip_addr();
428
	print_baudrate();
429 430 431 432

	return 0;
}

433 434 435 436 437 438 439 440
#elif defined(CONFIG_XTENSA)

int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
	print_std_bdinfo(gd->bd);
	return 0;
}

441 442 443
#else
 #error "a case for this architecture does not exist!"
#endif
W
wdenk 已提交
444 445 446

/* -------------------------------------------------------------------- */

W
wdenk 已提交
447 448
U_BOOT_CMD(
	bdinfo,	1,	1,	do_bdinfo,
P
Peter Tyser 已提交
449
	"print Board Info structure",
W
Wolfgang Denk 已提交
450
	""
W
wdenk 已提交
451
);