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

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

14
DECLARE_GLOBAL_DATA_PTR;
W
wdenk 已提交
15

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

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

36
#ifndef CONFIG_DM_ETH
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
__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());
53
	printf("ip_addr     = %s\n", env_get("ipaddr"));
54
}
55
#endif
56

57
__maybe_unused
58
static void print_lnum(const char *name, unsigned long long value)
59 60 61 62 63 64 65 66 67 68 69
{
	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 已提交
70

71 72 73 74 75 76

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

M
Max Filippov 已提交
77 78 79 80 81 82 83 84 85 86 87 88 89 90
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 已提交
91 92 93 94 95 96
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) {
97 98 99 100 101
		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 已提交
102 103 104 105
	}
#endif
}

106 107 108 109 110 111 112
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 已提交
113
#elif defined(CONFIG_NIOS2)
114 115 116 117 118 119 120 121 122 123
	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
}

124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
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
143
	printf("IP addr     = %s\n", env_get("ipaddr"));
144 145 146
#endif
}

147 148 149 150 151 152 153 154 155
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
}

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

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

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

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

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

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

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

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

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

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

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

	return 0;
}
231 232

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

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

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

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

257 258
#elif defined(CONFIG_M68K)

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

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

	return 0;
}

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

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

	return 0;
}

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

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

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

Y
York Sun 已提交
310
#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
311
	if (gd->arch.secure_ram & MEM_RESERVE_SECURE_SECURED) {
Y
York Sun 已提交
312
		print_num("Secure ram",
313
			  gd->arch.secure_ram & MEM_RESERVE_SECURE_ADDR_MASK);
Y
York Sun 已提交
314 315
	}
#endif
Y
York Sun 已提交
316 317 318 319
#ifdef CONFIG_RESV_RAM
	if (gd->arch.resv_ram)
		print_num("Reserved ram", gd->arch.resv_ram);
#endif
320
#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH)
321
	print_eths();
322
#endif
323
	print_baudrate();
324
#if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF))
325
	print_num("TLB addr", gd->arch.tlb_addr);
H
Heiko Schocher 已提交
326
#endif
327 328 329 330
	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);
331
#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO)
332
	print_num("FB base  ", gd->fb_base);
333
#endif
334 335 336 337 338 339 340 341
	/*
	 * 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);
342 343 344
#endif
#ifdef CONFIG_BOARD_TYPES
	printf("Board Type  = %ld\n", gd->board_type);
345
#endif
346
#if CONFIG_VAL(SYS_MALLOC_F_LEN)
347
	printf("Early malloc usage: %lx / %x\n", gd->malloc_ptr,
348
	       CONFIG_VAL(SYS_MALLOC_F_LEN));
349
#endif
H
Heiko Schocher 已提交
350
	if (gd->fdt_blob)
351
		print_num("fdt_blob", (ulong)gd->fdt_blob);
352

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

356 357
#elif defined(CONFIG_SH)

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

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

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

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

375
	print_bi_boot_params(bd);
376

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

379 380
	print_num("relocaddr", gd->relocaddr);
	print_num("reloc off", gd->reloc_off);
G
Graeme Russ 已提交
381
#if defined(CONFIG_CMD_NET)
382
	print_eth_ip_addr();
383
	print_mhz("ethspeed",	    bd->bi_ethspeed);
G
Graeme Russ 已提交
384
#endif
385
	print_baudrate();
G
Graeme Russ 已提交
386 387 388 389

	return 0;
}

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

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

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

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

406 407 408 409 410 411 412
#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);
413
	print_bi_boot_params(bd);
M
Max Filippov 已提交
414
	print_bi_dram(bd);
415
	print_eth_ip_addr();
416
	print_baudrate();
417 418 419 420

	return 0;
}

421 422 423 424 425 426 427 428
#elif defined(CONFIG_RISCV)

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

	print_bi_boot_params(bd);
	print_bi_dram(bd);
429 430
	print_num("relocaddr", gd->relocaddr);
	print_num("reloc off", gd->reloc_off);
431 432 433 434 435 436
	print_eth_ip_addr();
	print_baudrate();

	return 0;
}

437
#elif defined(CONFIG_ARC)
438 439 440 441 442

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

M
Max Filippov 已提交
443
	print_bi_mem(bd);
444
	print_eth_ip_addr();
445
	print_baudrate();
446 447 448 449

	return 0;
}

450 451 452 453 454 455 456 457
#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;
}

458 459 460
#else
 #error "a case for this architecture does not exist!"
#endif
W
wdenk 已提交
461 462 463

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

W
wdenk 已提交
464 465
U_BOOT_CMD(
	bdinfo,	1,	1,	do_bdinfo,
P
Peter Tyser 已提交
466
	"print Board Info structure",
W
Wolfgang Denk 已提交
467
	""
W
wdenk 已提交
468
);