xref: /rk3399_rockchip-uboot/cmd/bdinfo.c (revision 2e192b245ed36a63bab0ef576999a95e23f60ecd)
1*2e192b24SSimon Glass /*
2*2e192b24SSimon Glass  * (C) Copyright 2003
3*2e192b24SSimon Glass  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4*2e192b24SSimon Glass  *
5*2e192b24SSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
6*2e192b24SSimon Glass  */
7*2e192b24SSimon Glass 
8*2e192b24SSimon Glass /*
9*2e192b24SSimon Glass  * Boot support
10*2e192b24SSimon Glass  */
11*2e192b24SSimon Glass #include <common.h>
12*2e192b24SSimon Glass #include <command.h>
13*2e192b24SSimon Glass #include <linux/compiler.h>
14*2e192b24SSimon Glass 
15*2e192b24SSimon Glass DECLARE_GLOBAL_DATA_PTR;
16*2e192b24SSimon Glass 
17*2e192b24SSimon Glass __maybe_unused
18*2e192b24SSimon Glass static void print_num(const char *name, ulong value)
19*2e192b24SSimon Glass {
20*2e192b24SSimon Glass 	printf("%-12s= 0x%08lX\n", name, value);
21*2e192b24SSimon Glass }
22*2e192b24SSimon Glass 
23*2e192b24SSimon Glass __maybe_unused
24*2e192b24SSimon Glass static void print_eth(int idx)
25*2e192b24SSimon Glass {
26*2e192b24SSimon Glass 	char name[10], *val;
27*2e192b24SSimon Glass 	if (idx)
28*2e192b24SSimon Glass 		sprintf(name, "eth%iaddr", idx);
29*2e192b24SSimon Glass 	else
30*2e192b24SSimon Glass 		strcpy(name, "ethaddr");
31*2e192b24SSimon Glass 	val = getenv(name);
32*2e192b24SSimon Glass 	if (!val)
33*2e192b24SSimon Glass 		val = "(not set)";
34*2e192b24SSimon Glass 	printf("%-12s= %s\n", name, val);
35*2e192b24SSimon Glass }
36*2e192b24SSimon Glass 
37*2e192b24SSimon Glass #ifndef CONFIG_DM_ETH
38*2e192b24SSimon Glass __maybe_unused
39*2e192b24SSimon Glass static void print_eths(void)
40*2e192b24SSimon Glass {
41*2e192b24SSimon Glass 	struct eth_device *dev;
42*2e192b24SSimon Glass 	int i = 0;
43*2e192b24SSimon Glass 
44*2e192b24SSimon Glass 	do {
45*2e192b24SSimon Glass 		dev = eth_get_dev_by_index(i);
46*2e192b24SSimon Glass 		if (dev) {
47*2e192b24SSimon Glass 			printf("eth%dname    = %s\n", i, dev->name);
48*2e192b24SSimon Glass 			print_eth(i);
49*2e192b24SSimon Glass 			i++;
50*2e192b24SSimon Glass 		}
51*2e192b24SSimon Glass 	} while (dev);
52*2e192b24SSimon Glass 
53*2e192b24SSimon Glass 	printf("current eth = %s\n", eth_get_name());
54*2e192b24SSimon Glass 	printf("ip_addr     = %s\n", getenv("ipaddr"));
55*2e192b24SSimon Glass }
56*2e192b24SSimon Glass #endif
57*2e192b24SSimon Glass 
58*2e192b24SSimon Glass __maybe_unused
59*2e192b24SSimon Glass static void print_lnum(const char *name, unsigned long long value)
60*2e192b24SSimon Glass {
61*2e192b24SSimon Glass 	printf("%-12s= 0x%.8llX\n", name, value);
62*2e192b24SSimon Glass }
63*2e192b24SSimon Glass 
64*2e192b24SSimon Glass __maybe_unused
65*2e192b24SSimon Glass static void print_mhz(const char *name, unsigned long hz)
66*2e192b24SSimon Glass {
67*2e192b24SSimon Glass 	char buf[32];
68*2e192b24SSimon Glass 
69*2e192b24SSimon Glass 	printf("%-12s= %6s MHz\n", name, strmhz(buf, hz));
70*2e192b24SSimon Glass }
71*2e192b24SSimon Glass 
72*2e192b24SSimon Glass #if defined(CONFIG_PPC)
73*2e192b24SSimon Glass void __weak board_detail(void)
74*2e192b24SSimon Glass {
75*2e192b24SSimon Glass 	/* Please define boot_detail() for your platform */
76*2e192b24SSimon Glass }
77*2e192b24SSimon Glass 
78*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
79*2e192b24SSimon Glass {
80*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
81*2e192b24SSimon Glass 
82*2e192b24SSimon Glass #ifdef DEBUG
83*2e192b24SSimon Glass 	print_num("bd address",		(ulong)bd);
84*2e192b24SSimon Glass #endif
85*2e192b24SSimon Glass 	print_num("memstart",		bd->bi_memstart);
86*2e192b24SSimon Glass 	print_lnum("memsize",		bd->bi_memsize);
87*2e192b24SSimon Glass 	print_num("flashstart",		bd->bi_flashstart);
88*2e192b24SSimon Glass 	print_num("flashsize",		bd->bi_flashsize);
89*2e192b24SSimon Glass 	print_num("flashoffset",	bd->bi_flashoffset);
90*2e192b24SSimon Glass 	print_num("sramstart",		bd->bi_sramstart);
91*2e192b24SSimon Glass 	print_num("sramsize",		bd->bi_sramsize);
92*2e192b24SSimon Glass #if	defined(CONFIG_5xx)  || defined(CONFIG_8xx) || \
93*2e192b24SSimon Glass 	defined(CONFIG_MPC8260) || defined(CONFIG_E500)
94*2e192b24SSimon Glass 	print_num("immr_base",		bd->bi_immr_base);
95*2e192b24SSimon Glass #endif
96*2e192b24SSimon Glass 	print_num("bootflags",		bd->bi_bootflags);
97*2e192b24SSimon Glass #if	defined(CONFIG_405EP) || \
98*2e192b24SSimon Glass 	defined(CONFIG_405GP) || \
99*2e192b24SSimon Glass 	defined(CONFIG_440EP) || defined(CONFIG_440EPX) || \
100*2e192b24SSimon Glass 	defined(CONFIG_440GR) || defined(CONFIG_440GRX) || \
101*2e192b24SSimon Glass 	defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
102*2e192b24SSimon Glass 	defined(CONFIG_XILINX_405)
103*2e192b24SSimon Glass 	print_mhz("procfreq",		bd->bi_procfreq);
104*2e192b24SSimon Glass 	print_mhz("plb_busfreq",	bd->bi_plb_busfreq);
105*2e192b24SSimon Glass #if	defined(CONFIG_405EP) || defined(CONFIG_405GP) || \
106*2e192b24SSimon Glass 	defined(CONFIG_440EP) || defined(CONFIG_440EPX) || \
107*2e192b24SSimon Glass 	defined(CONFIG_440GR) || defined(CONFIG_440GRX) || \
108*2e192b24SSimon Glass 	defined(CONFIG_440SPE) || defined(CONFIG_XILINX_405)
109*2e192b24SSimon Glass 	print_mhz("pci_busfreq",	bd->bi_pci_busfreq);
110*2e192b24SSimon Glass #endif
111*2e192b24SSimon Glass #else	/* ! CONFIG_405GP, CONFIG_405EP, CONFIG_XILINX_405, CONFIG_440EP CONFIG_440GR */
112*2e192b24SSimon Glass #if defined(CONFIG_CPM2)
113*2e192b24SSimon Glass 	print_mhz("vco",		bd->bi_vco);
114*2e192b24SSimon Glass 	print_mhz("sccfreq",		bd->bi_sccfreq);
115*2e192b24SSimon Glass 	print_mhz("brgfreq",		bd->bi_brgfreq);
116*2e192b24SSimon Glass #endif
117*2e192b24SSimon Glass 	print_mhz("intfreq",		bd->bi_intfreq);
118*2e192b24SSimon Glass #if defined(CONFIG_CPM2)
119*2e192b24SSimon Glass 	print_mhz("cpmfreq",		bd->bi_cpmfreq);
120*2e192b24SSimon Glass #endif
121*2e192b24SSimon Glass 	print_mhz("busfreq",		bd->bi_busfreq);
122*2e192b24SSimon Glass #endif /* CONFIG_405GP, CONFIG_405EP, CONFIG_XILINX_405, CONFIG_440EP CONFIG_440GR */
123*2e192b24SSimon Glass 
124*2e192b24SSimon Glass #ifdef CONFIG_ENABLE_36BIT_PHYS
125*2e192b24SSimon Glass #ifdef CONFIG_PHYS_64BIT
126*2e192b24SSimon Glass 	puts("addressing  = 36-bit\n");
127*2e192b24SSimon Glass #else
128*2e192b24SSimon Glass 	puts("addressing  = 32-bit\n");
129*2e192b24SSimon Glass #endif
130*2e192b24SSimon Glass #endif
131*2e192b24SSimon Glass 
132*2e192b24SSimon Glass 	print_eth(0);
133*2e192b24SSimon Glass #if defined(CONFIG_HAS_ETH1)
134*2e192b24SSimon Glass 	print_eth(1);
135*2e192b24SSimon Glass #endif
136*2e192b24SSimon Glass #if defined(CONFIG_HAS_ETH2)
137*2e192b24SSimon Glass 	print_eth(2);
138*2e192b24SSimon Glass #endif
139*2e192b24SSimon Glass #if defined(CONFIG_HAS_ETH3)
140*2e192b24SSimon Glass 	print_eth(3);
141*2e192b24SSimon Glass #endif
142*2e192b24SSimon Glass #if defined(CONFIG_HAS_ETH4)
143*2e192b24SSimon Glass 	print_eth(4);
144*2e192b24SSimon Glass #endif
145*2e192b24SSimon Glass #if defined(CONFIG_HAS_ETH5)
146*2e192b24SSimon Glass 	print_eth(5);
147*2e192b24SSimon Glass #endif
148*2e192b24SSimon Glass 
149*2e192b24SSimon Glass 	printf("IP addr     = %s\n", getenv("ipaddr"));
150*2e192b24SSimon Glass 	printf("baudrate    = %6u bps\n", gd->baudrate);
151*2e192b24SSimon Glass 	print_num("relocaddr", gd->relocaddr);
152*2e192b24SSimon Glass 	board_detail();
153*2e192b24SSimon Glass 	return 0;
154*2e192b24SSimon Glass }
155*2e192b24SSimon Glass 
156*2e192b24SSimon Glass #elif defined(CONFIG_NIOS2)
157*2e192b24SSimon Glass 
158*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
159*2e192b24SSimon Glass {
160*2e192b24SSimon Glass 	int i;
161*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
162*2e192b24SSimon Glass 
163*2e192b24SSimon Glass 	for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) {
164*2e192b24SSimon Glass 		print_num("DRAM bank",	i);
165*2e192b24SSimon Glass 		print_num("-> start",	bd->bi_dram[i].start);
166*2e192b24SSimon Glass 		print_num("-> size",	bd->bi_dram[i].size);
167*2e192b24SSimon Glass 	}
168*2e192b24SSimon Glass 
169*2e192b24SSimon Glass 	print_num("flash start",	(ulong)bd->bi_flashstart);
170*2e192b24SSimon Glass 	print_num("flash size",		(ulong)bd->bi_flashsize);
171*2e192b24SSimon Glass 	print_num("flash offset",	(ulong)bd->bi_flashoffset);
172*2e192b24SSimon Glass 
173*2e192b24SSimon Glass #if defined(CONFIG_SYS_SRAM_BASE)
174*2e192b24SSimon Glass 	print_num ("sram start",	(ulong)bd->bi_sramstart);
175*2e192b24SSimon Glass 	print_num ("sram size",		(ulong)bd->bi_sramsize);
176*2e192b24SSimon Glass #endif
177*2e192b24SSimon Glass 
178*2e192b24SSimon Glass #if defined(CONFIG_CMD_NET)
179*2e192b24SSimon Glass 	print_eth(0);
180*2e192b24SSimon Glass 	printf("ip_addr     = %s\n", getenv("ipaddr"));
181*2e192b24SSimon Glass #endif
182*2e192b24SSimon Glass 
183*2e192b24SSimon Glass 	printf("baudrate    = %u bps\n", gd->baudrate);
184*2e192b24SSimon Glass 
185*2e192b24SSimon Glass 	return 0;
186*2e192b24SSimon Glass }
187*2e192b24SSimon Glass 
188*2e192b24SSimon Glass #elif defined(CONFIG_MICROBLAZE)
189*2e192b24SSimon Glass 
190*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
191*2e192b24SSimon Glass {
192*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
193*2e192b24SSimon Glass 	int i;
194*2e192b24SSimon Glass 
195*2e192b24SSimon Glass 	for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) {
196*2e192b24SSimon Glass 		print_num("DRAM bank",	i);
197*2e192b24SSimon Glass 		print_num("-> start",	bd->bi_dram[i].start);
198*2e192b24SSimon Glass 		print_num("-> size",	bd->bi_dram[i].size);
199*2e192b24SSimon Glass 	}
200*2e192b24SSimon Glass 
201*2e192b24SSimon Glass 	print_num("flash start    ",	(ulong)bd->bi_flashstart);
202*2e192b24SSimon Glass 	print_num("flash size     ",	(ulong)bd->bi_flashsize);
203*2e192b24SSimon Glass 	print_num("flash offset   ",	(ulong)bd->bi_flashoffset);
204*2e192b24SSimon Glass #if defined(CONFIG_SYS_SRAM_BASE)
205*2e192b24SSimon Glass 	print_num("sram start     ",	(ulong)bd->bi_sramstart);
206*2e192b24SSimon Glass 	print_num("sram size      ",	(ulong)bd->bi_sramsize);
207*2e192b24SSimon Glass #endif
208*2e192b24SSimon Glass #if defined(CONFIG_CMD_NET)
209*2e192b24SSimon Glass 	print_eths();
210*2e192b24SSimon Glass #endif
211*2e192b24SSimon Glass 	printf("baudrate    = %u bps\n", gd->baudrate);
212*2e192b24SSimon Glass 	print_num("relocaddr", gd->relocaddr);
213*2e192b24SSimon Glass 	print_num("reloc off", gd->reloc_off);
214*2e192b24SSimon Glass 	print_num("fdt_blob", (ulong)gd->fdt_blob);
215*2e192b24SSimon Glass 	print_num("new_fdt", (ulong)gd->new_fdt);
216*2e192b24SSimon Glass 	print_num("fdt_size", (ulong)gd->fdt_size);
217*2e192b24SSimon Glass 
218*2e192b24SSimon Glass 	return 0;
219*2e192b24SSimon Glass }
220*2e192b24SSimon Glass 
221*2e192b24SSimon Glass #elif defined(CONFIG_SPARC)
222*2e192b24SSimon Glass 
223*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
224*2e192b24SSimon Glass {
225*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
226*2e192b24SSimon Glass 
227*2e192b24SSimon Glass #ifdef DEBUG
228*2e192b24SSimon Glass 	print_num("bd address             ", (ulong) bd);
229*2e192b24SSimon Glass #endif
230*2e192b24SSimon Glass 	print_num("memstart               ", bd->bi_memstart);
231*2e192b24SSimon Glass 	print_lnum("memsize                ", bd->bi_memsize);
232*2e192b24SSimon Glass 	print_num("flashstart             ", bd->bi_flashstart);
233*2e192b24SSimon Glass 	print_num("CONFIG_SYS_MONITOR_BASE       ", CONFIG_SYS_MONITOR_BASE);
234*2e192b24SSimon Glass 	print_num("CONFIG_ENV_ADDR           ", CONFIG_ENV_ADDR);
235*2e192b24SSimon Glass 	printf("CONFIG_SYS_RELOC_MONITOR_BASE = 0x%x (%d)\n", CONFIG_SYS_RELOC_MONITOR_BASE,
236*2e192b24SSimon Glass 	       CONFIG_SYS_MONITOR_LEN);
237*2e192b24SSimon Glass 	printf("CONFIG_SYS_MALLOC_BASE        = 0x%x (%d)\n", CONFIG_SYS_MALLOC_BASE,
238*2e192b24SSimon Glass 	       CONFIG_SYS_MALLOC_LEN);
239*2e192b24SSimon Glass 	printf("CONFIG_SYS_INIT_SP_OFFSET     = 0x%x (%d)\n", CONFIG_SYS_INIT_SP_OFFSET,
240*2e192b24SSimon Glass 	       CONFIG_SYS_STACK_SIZE);
241*2e192b24SSimon Glass 	printf("CONFIG_SYS_PROM_OFFSET        = 0x%x (%d)\n", CONFIG_SYS_PROM_OFFSET,
242*2e192b24SSimon Glass 	       CONFIG_SYS_PROM_SIZE);
243*2e192b24SSimon Glass 	printf("CONFIG_SYS_GBL_DATA_OFFSET    = 0x%x (%d)\n", CONFIG_SYS_GBL_DATA_OFFSET,
244*2e192b24SSimon Glass 	       GENERATED_GBL_DATA_SIZE);
245*2e192b24SSimon Glass 
246*2e192b24SSimon Glass #if defined(CONFIG_CMD_NET)
247*2e192b24SSimon Glass 	print_eth(0);
248*2e192b24SSimon Glass 	printf("ip_addr     = %s\n", getenv("ipaddr"));
249*2e192b24SSimon Glass #endif
250*2e192b24SSimon Glass 	printf("baudrate               = %6u bps\n", gd->baudrate);
251*2e192b24SSimon Glass 	return 0;
252*2e192b24SSimon Glass }
253*2e192b24SSimon Glass 
254*2e192b24SSimon Glass #elif defined(CONFIG_M68K)
255*2e192b24SSimon Glass 
256*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
257*2e192b24SSimon Glass {
258*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
259*2e192b24SSimon Glass 
260*2e192b24SSimon Glass 	print_num("memstart",		(ulong)bd->bi_memstart);
261*2e192b24SSimon Glass 	print_lnum("memsize",		(u64)bd->bi_memsize);
262*2e192b24SSimon Glass 	print_num("flashstart",		(ulong)bd->bi_flashstart);
263*2e192b24SSimon Glass 	print_num("flashsize",		(ulong)bd->bi_flashsize);
264*2e192b24SSimon Glass 	print_num("flashoffset",	(ulong)bd->bi_flashoffset);
265*2e192b24SSimon Glass #if defined(CONFIG_SYS_INIT_RAM_ADDR)
266*2e192b24SSimon Glass 	print_num("sramstart",		(ulong)bd->bi_sramstart);
267*2e192b24SSimon Glass 	print_num("sramsize",		(ulong)bd->bi_sramsize);
268*2e192b24SSimon Glass #endif
269*2e192b24SSimon Glass #if defined(CONFIG_SYS_MBAR)
270*2e192b24SSimon Glass 	print_num("mbar",		bd->bi_mbar_base);
271*2e192b24SSimon Glass #endif
272*2e192b24SSimon Glass 	print_mhz("cpufreq",		bd->bi_intfreq);
273*2e192b24SSimon Glass 	print_mhz("busfreq",		bd->bi_busfreq);
274*2e192b24SSimon Glass #ifdef CONFIG_PCI
275*2e192b24SSimon Glass 	print_mhz("pcifreq",		bd->bi_pcifreq);
276*2e192b24SSimon Glass #endif
277*2e192b24SSimon Glass #ifdef CONFIG_EXTRA_CLOCK
278*2e192b24SSimon Glass 	print_mhz("flbfreq",		bd->bi_flbfreq);
279*2e192b24SSimon Glass 	print_mhz("inpfreq",		bd->bi_inpfreq);
280*2e192b24SSimon Glass 	print_mhz("vcofreq",		bd->bi_vcofreq);
281*2e192b24SSimon Glass #endif
282*2e192b24SSimon Glass #if defined(CONFIG_CMD_NET)
283*2e192b24SSimon Glass 	print_eth(0);
284*2e192b24SSimon Glass #if defined(CONFIG_HAS_ETH1)
285*2e192b24SSimon Glass 	print_eth(1);
286*2e192b24SSimon Glass #endif
287*2e192b24SSimon Glass #if defined(CONFIG_HAS_ETH2)
288*2e192b24SSimon Glass 	print_eth(2);
289*2e192b24SSimon Glass #endif
290*2e192b24SSimon Glass #if defined(CONFIG_HAS_ETH3)
291*2e192b24SSimon Glass 	print_eth(3);
292*2e192b24SSimon Glass #endif
293*2e192b24SSimon Glass 
294*2e192b24SSimon Glass 	printf("ip_addr     = %s\n", getenv("ipaddr"));
295*2e192b24SSimon Glass #endif
296*2e192b24SSimon Glass 	printf("baudrate    = %u bps\n", gd->baudrate);
297*2e192b24SSimon Glass 
298*2e192b24SSimon Glass 	return 0;
299*2e192b24SSimon Glass }
300*2e192b24SSimon Glass 
301*2e192b24SSimon Glass #elif defined(CONFIG_BLACKFIN)
302*2e192b24SSimon Glass 
303*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
304*2e192b24SSimon Glass {
305*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
306*2e192b24SSimon Glass 
307*2e192b24SSimon Glass 	printf("U-Boot      = %s\n", bd->bi_r_version);
308*2e192b24SSimon Glass 	printf("CPU         = %s\n", bd->bi_cpu);
309*2e192b24SSimon Glass 	printf("Board       = %s\n", bd->bi_board_name);
310*2e192b24SSimon Glass 	print_mhz("VCO",	bd->bi_vco);
311*2e192b24SSimon Glass 	print_mhz("CCLK",	bd->bi_cclk);
312*2e192b24SSimon Glass 	print_mhz("SCLK",	bd->bi_sclk);
313*2e192b24SSimon Glass 
314*2e192b24SSimon Glass 	print_num("boot_params",	(ulong)bd->bi_boot_params);
315*2e192b24SSimon Glass 	print_num("memstart",		(ulong)bd->bi_memstart);
316*2e192b24SSimon Glass 	print_lnum("memsize",		(u64)bd->bi_memsize);
317*2e192b24SSimon Glass 	print_num("flashstart",		(ulong)bd->bi_flashstart);
318*2e192b24SSimon Glass 	print_num("flashsize",		(ulong)bd->bi_flashsize);
319*2e192b24SSimon Glass 	print_num("flashoffset",	(ulong)bd->bi_flashoffset);
320*2e192b24SSimon Glass 
321*2e192b24SSimon Glass 	print_eth(0);
322*2e192b24SSimon Glass 	printf("ip_addr     = %s\n", getenv("ipaddr"));
323*2e192b24SSimon Glass 	printf("baudrate    = %u bps\n", gd->baudrate);
324*2e192b24SSimon Glass 
325*2e192b24SSimon Glass 	return 0;
326*2e192b24SSimon Glass }
327*2e192b24SSimon Glass 
328*2e192b24SSimon Glass #elif defined(CONFIG_MIPS)
329*2e192b24SSimon Glass 
330*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
331*2e192b24SSimon Glass {
332*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
333*2e192b24SSimon Glass 
334*2e192b24SSimon Glass 	print_num("boot_params",	(ulong)bd->bi_boot_params);
335*2e192b24SSimon Glass 	print_num("memstart",		(ulong)bd->bi_memstart);
336*2e192b24SSimon Glass 	print_lnum("memsize",		(u64)bd->bi_memsize);
337*2e192b24SSimon Glass 	print_num("flashstart",		(ulong)bd->bi_flashstart);
338*2e192b24SSimon Glass 	print_num("flashsize",		(ulong)bd->bi_flashsize);
339*2e192b24SSimon Glass 	print_num("flashoffset",	(ulong)bd->bi_flashoffset);
340*2e192b24SSimon Glass 
341*2e192b24SSimon Glass 	print_eth(0);
342*2e192b24SSimon Glass 	printf("ip_addr     = %s\n", getenv("ipaddr"));
343*2e192b24SSimon Glass 	printf("baudrate    = %u bps\n", gd->baudrate);
344*2e192b24SSimon Glass 
345*2e192b24SSimon Glass 	return 0;
346*2e192b24SSimon Glass }
347*2e192b24SSimon Glass 
348*2e192b24SSimon Glass #elif defined(CONFIG_AVR32)
349*2e192b24SSimon Glass 
350*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
351*2e192b24SSimon Glass {
352*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
353*2e192b24SSimon Glass 
354*2e192b24SSimon Glass 	print_num("boot_params",	(ulong)bd->bi_boot_params);
355*2e192b24SSimon Glass 	print_num("memstart",		(ulong)bd->bi_dram[0].start);
356*2e192b24SSimon Glass 	print_lnum("memsize",		(u64)bd->bi_dram[0].size);
357*2e192b24SSimon Glass 	print_num("flashstart",		(ulong)bd->bi_flashstart);
358*2e192b24SSimon Glass 	print_num("flashsize",		(ulong)bd->bi_flashsize);
359*2e192b24SSimon Glass 	print_num("flashoffset",	(ulong)bd->bi_flashoffset);
360*2e192b24SSimon Glass 
361*2e192b24SSimon Glass 	print_eth(0);
362*2e192b24SSimon Glass 	printf("ip_addr     = %s\n", getenv("ipaddr"));
363*2e192b24SSimon Glass 	printf("baudrate    = %u bps\n", gd->baudrate);
364*2e192b24SSimon Glass 
365*2e192b24SSimon Glass 	return 0;
366*2e192b24SSimon Glass }
367*2e192b24SSimon Glass 
368*2e192b24SSimon Glass #elif defined(CONFIG_ARM)
369*2e192b24SSimon Glass 
370*2e192b24SSimon Glass static int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc,
371*2e192b24SSimon Glass 			char * const argv[])
372*2e192b24SSimon Glass {
373*2e192b24SSimon Glass 	int i;
374*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
375*2e192b24SSimon Glass 
376*2e192b24SSimon Glass 	print_num("arch_number",	bd->bi_arch_number);
377*2e192b24SSimon Glass 	print_num("boot_params",	(ulong)bd->bi_boot_params);
378*2e192b24SSimon Glass 
379*2e192b24SSimon Glass 	for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) {
380*2e192b24SSimon Glass 		print_num("DRAM bank",	i);
381*2e192b24SSimon Glass 		print_num("-> start",	bd->bi_dram[i].start);
382*2e192b24SSimon Glass 		print_num("-> size",	bd->bi_dram[i].size);
383*2e192b24SSimon Glass 	}
384*2e192b24SSimon Glass 
385*2e192b24SSimon Glass #ifdef CONFIG_SYS_MEM_RESERVE_SECURE
386*2e192b24SSimon Glass 	if (gd->secure_ram & MEM_RESERVE_SECURE_SECURED) {
387*2e192b24SSimon Glass 		print_num("Secure ram",
388*2e192b24SSimon Glass 			  gd->secure_ram & MEM_RESERVE_SECURE_ADDR_MASK);
389*2e192b24SSimon Glass 	}
390*2e192b24SSimon Glass #endif
391*2e192b24SSimon Glass #if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH)
392*2e192b24SSimon Glass 	print_eths();
393*2e192b24SSimon Glass #endif
394*2e192b24SSimon Glass 	printf("baudrate    = %u bps\n", gd->baudrate);
395*2e192b24SSimon Glass #if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF))
396*2e192b24SSimon Glass 	print_num("TLB addr", gd->arch.tlb_addr);
397*2e192b24SSimon Glass #endif
398*2e192b24SSimon Glass 	print_num("relocaddr", gd->relocaddr);
399*2e192b24SSimon Glass 	print_num("reloc off", gd->reloc_off);
400*2e192b24SSimon Glass 	print_num("irq_sp", gd->irq_sp);	/* irq stack pointer */
401*2e192b24SSimon Glass 	print_num("sp start ", gd->start_addr_sp);
402*2e192b24SSimon Glass #if defined(CONFIG_LCD) || defined(CONFIG_VIDEO)
403*2e192b24SSimon Glass 	print_num("FB base  ", gd->fb_base);
404*2e192b24SSimon Glass #endif
405*2e192b24SSimon Glass 	/*
406*2e192b24SSimon Glass 	 * TODO: Currently only support for davinci SOC's is added.
407*2e192b24SSimon Glass 	 * Remove this check once all the board implement this.
408*2e192b24SSimon Glass 	 */
409*2e192b24SSimon Glass #ifdef CONFIG_CLOCKS
410*2e192b24SSimon Glass 	printf("ARM frequency = %ld MHz\n", gd->bd->bi_arm_freq);
411*2e192b24SSimon Glass 	printf("DSP frequency = %ld MHz\n", gd->bd->bi_dsp_freq);
412*2e192b24SSimon Glass 	printf("DDR frequency = %ld MHz\n", gd->bd->bi_ddr_freq);
413*2e192b24SSimon Glass #endif
414*2e192b24SSimon Glass #ifdef CONFIG_BOARD_TYPES
415*2e192b24SSimon Glass 	printf("Board Type  = %ld\n", gd->board_type);
416*2e192b24SSimon Glass #endif
417*2e192b24SSimon Glass 	return 0;
418*2e192b24SSimon Glass }
419*2e192b24SSimon Glass 
420*2e192b24SSimon Glass #elif defined(CONFIG_SH)
421*2e192b24SSimon Glass 
422*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
423*2e192b24SSimon Glass {
424*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
425*2e192b24SSimon Glass 	print_num("mem start      ",	(ulong)bd->bi_memstart);
426*2e192b24SSimon Glass 	print_lnum("mem size       ",	(u64)bd->bi_memsize);
427*2e192b24SSimon Glass 	print_num("flash start    ",	(ulong)bd->bi_flashstart);
428*2e192b24SSimon Glass 	print_num("flash size     ",	(ulong)bd->bi_flashsize);
429*2e192b24SSimon Glass 	print_num("flash offset   ",	(ulong)bd->bi_flashoffset);
430*2e192b24SSimon Glass 
431*2e192b24SSimon Glass #if defined(CONFIG_CMD_NET)
432*2e192b24SSimon Glass 	print_eth(0);
433*2e192b24SSimon Glass 	printf("ip_addr     = %s\n", getenv("ipaddr"));
434*2e192b24SSimon Glass #endif
435*2e192b24SSimon Glass 	printf("baudrate    = %u bps\n", gd->baudrate);
436*2e192b24SSimon Glass 	return 0;
437*2e192b24SSimon Glass }
438*2e192b24SSimon Glass 
439*2e192b24SSimon Glass #elif defined(CONFIG_X86)
440*2e192b24SSimon Glass 
441*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
442*2e192b24SSimon Glass {
443*2e192b24SSimon Glass 	int i;
444*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
445*2e192b24SSimon Glass 
446*2e192b24SSimon Glass 	print_num("boot_params",	(ulong)bd->bi_boot_params);
447*2e192b24SSimon Glass 	print_num("bi_memstart",	bd->bi_memstart);
448*2e192b24SSimon Glass 	print_num("bi_memsize",		bd->bi_memsize);
449*2e192b24SSimon Glass 	print_num("bi_flashstart",	bd->bi_flashstart);
450*2e192b24SSimon Glass 	print_num("bi_flashsize",	bd->bi_flashsize);
451*2e192b24SSimon Glass 	print_num("bi_flashoffset",	bd->bi_flashoffset);
452*2e192b24SSimon Glass 	print_num("bi_sramstart",	bd->bi_sramstart);
453*2e192b24SSimon Glass 	print_num("bi_sramsize",	bd->bi_sramsize);
454*2e192b24SSimon Glass 	print_num("bi_bootflags",	bd->bi_bootflags);
455*2e192b24SSimon Glass 	print_mhz("cpufreq",		bd->bi_intfreq);
456*2e192b24SSimon Glass 	print_mhz("busfreq",		bd->bi_busfreq);
457*2e192b24SSimon Glass 
458*2e192b24SSimon Glass 	for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) {
459*2e192b24SSimon Glass 		print_num("DRAM bank",	i);
460*2e192b24SSimon Glass 		print_num("-> start",	bd->bi_dram[i].start);
461*2e192b24SSimon Glass 		print_num("-> size",	bd->bi_dram[i].size);
462*2e192b24SSimon Glass 	}
463*2e192b24SSimon Glass 
464*2e192b24SSimon Glass #if defined(CONFIG_CMD_NET)
465*2e192b24SSimon Glass 	print_eth(0);
466*2e192b24SSimon Glass 	printf("ip_addr     = %s\n", getenv("ipaddr"));
467*2e192b24SSimon Glass 	print_mhz("ethspeed",	    bd->bi_ethspeed);
468*2e192b24SSimon Glass #endif
469*2e192b24SSimon Glass 	printf("baudrate    = %u bps\n", gd->baudrate);
470*2e192b24SSimon Glass 
471*2e192b24SSimon Glass 	return 0;
472*2e192b24SSimon Glass }
473*2e192b24SSimon Glass 
474*2e192b24SSimon Glass #elif defined(CONFIG_SANDBOX)
475*2e192b24SSimon Glass 
476*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
477*2e192b24SSimon Glass {
478*2e192b24SSimon Glass 	int i;
479*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
480*2e192b24SSimon Glass 
481*2e192b24SSimon Glass 	print_num("boot_params", (ulong)bd->bi_boot_params);
482*2e192b24SSimon Glass 
483*2e192b24SSimon Glass 	for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) {
484*2e192b24SSimon Glass 		print_num("DRAM bank", i);
485*2e192b24SSimon Glass 		print_num("-> start", bd->bi_dram[i].start);
486*2e192b24SSimon Glass 		print_num("-> size", bd->bi_dram[i].size);
487*2e192b24SSimon Glass 	}
488*2e192b24SSimon Glass 
489*2e192b24SSimon Glass #if defined(CONFIG_CMD_NET)
490*2e192b24SSimon Glass 	print_eth(0);
491*2e192b24SSimon Glass 	printf("ip_addr     = %s\n", getenv("ipaddr"));
492*2e192b24SSimon Glass #endif
493*2e192b24SSimon Glass #if defined(CONFIG_LCD) || defined(CONFIG_VIDEO)
494*2e192b24SSimon Glass 	print_num("FB base  ", gd->fb_base);
495*2e192b24SSimon Glass #endif
496*2e192b24SSimon Glass 	return 0;
497*2e192b24SSimon Glass }
498*2e192b24SSimon Glass 
499*2e192b24SSimon Glass #elif defined(CONFIG_NDS32)
500*2e192b24SSimon Glass 
501*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
502*2e192b24SSimon Glass {
503*2e192b24SSimon Glass 	int i;
504*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
505*2e192b24SSimon Glass 
506*2e192b24SSimon Glass 	print_num("arch_number",	bd->bi_arch_number);
507*2e192b24SSimon Glass 	print_num("boot_params",	(ulong)bd->bi_boot_params);
508*2e192b24SSimon Glass 
509*2e192b24SSimon Glass 	for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) {
510*2e192b24SSimon Glass 		print_num("DRAM bank",	i);
511*2e192b24SSimon Glass 		print_num("-> start",	bd->bi_dram[i].start);
512*2e192b24SSimon Glass 		print_num("-> size",	bd->bi_dram[i].size);
513*2e192b24SSimon Glass 	}
514*2e192b24SSimon Glass 
515*2e192b24SSimon Glass #if defined(CONFIG_CMD_NET)
516*2e192b24SSimon Glass 	print_eth(0);
517*2e192b24SSimon Glass 	printf("ip_addr     = %s\n", getenv("ipaddr"));
518*2e192b24SSimon Glass #endif
519*2e192b24SSimon Glass 	printf("baudrate    = %u bps\n", gd->baudrate);
520*2e192b24SSimon Glass 
521*2e192b24SSimon Glass 	return 0;
522*2e192b24SSimon Glass }
523*2e192b24SSimon Glass 
524*2e192b24SSimon Glass #elif defined(CONFIG_OPENRISC)
525*2e192b24SSimon Glass 
526*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
527*2e192b24SSimon Glass {
528*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
529*2e192b24SSimon Glass 
530*2e192b24SSimon Glass 	print_num("mem start",		(ulong)bd->bi_memstart);
531*2e192b24SSimon Glass 	print_lnum("mem size",		(u64)bd->bi_memsize);
532*2e192b24SSimon Glass 	print_num("flash start",	(ulong)bd->bi_flashstart);
533*2e192b24SSimon Glass 	print_num("flash size",		(ulong)bd->bi_flashsize);
534*2e192b24SSimon Glass 	print_num("flash offset",	(ulong)bd->bi_flashoffset);
535*2e192b24SSimon Glass 
536*2e192b24SSimon Glass #if defined(CONFIG_CMD_NET)
537*2e192b24SSimon Glass 	print_eth(0);
538*2e192b24SSimon Glass 	printf("ip_addr     = %s\n", getenv("ipaddr"));
539*2e192b24SSimon Glass #endif
540*2e192b24SSimon Glass 
541*2e192b24SSimon Glass 	printf("baudrate    = %u bps\n", gd->baudrate);
542*2e192b24SSimon Glass 
543*2e192b24SSimon Glass 	return 0;
544*2e192b24SSimon Glass }
545*2e192b24SSimon Glass 
546*2e192b24SSimon Glass #elif defined(CONFIG_ARC)
547*2e192b24SSimon Glass 
548*2e192b24SSimon Glass int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
549*2e192b24SSimon Glass {
550*2e192b24SSimon Glass 	bd_t *bd = gd->bd;
551*2e192b24SSimon Glass 
552*2e192b24SSimon Glass 	print_num("mem start",		bd->bi_memstart);
553*2e192b24SSimon Glass 	print_lnum("mem size",		bd->bi_memsize);
554*2e192b24SSimon Glass 
555*2e192b24SSimon Glass #if defined(CONFIG_CMD_NET)
556*2e192b24SSimon Glass 	print_eth(0);
557*2e192b24SSimon Glass 	printf("ip_addr     = %s\n", getenv("ipaddr"));
558*2e192b24SSimon Glass #endif
559*2e192b24SSimon Glass 	printf("baudrate    = %d bps\n", gd->baudrate);
560*2e192b24SSimon Glass 
561*2e192b24SSimon Glass 	return 0;
562*2e192b24SSimon Glass }
563*2e192b24SSimon Glass 
564*2e192b24SSimon Glass #else
565*2e192b24SSimon Glass  #error "a case for this architecture does not exist!"
566*2e192b24SSimon Glass #endif
567*2e192b24SSimon Glass 
568*2e192b24SSimon Glass /* -------------------------------------------------------------------- */
569*2e192b24SSimon Glass 
570*2e192b24SSimon Glass U_BOOT_CMD(
571*2e192b24SSimon Glass 	bdinfo,	1,	1,	do_bdinfo,
572*2e192b24SSimon Glass 	"print Board Info structure",
573*2e192b24SSimon Glass 	""
574*2e192b24SSimon Glass );
575