Blame view
cmd/bdinfo.c
9.97 KB
8bde7f776
|
1 2 3 4 |
/* * (C) Copyright 2003 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * |
1a4596601
|
5 |
* SPDX-License-Identifier: GPL-2.0+ |
8bde7f776
|
6 7 8 9 10 11 12 |
*/ /* * Boot support */ #include <common.h> #include <command.h> |
d88af4da9
|
13 |
#include <linux/compiler.h> |
8bde7f776
|
14 |
|
d87080b72
|
15 |
DECLARE_GLOBAL_DATA_PTR; |
8bde7f776
|
16 |
|
d88af4da9
|
17 18 19 20 21 22 |
__maybe_unused static void print_num(const char *name, ulong value) { printf("%-12s= 0x%08lX ", name, value); } |
8bde7f776
|
23 |
|
5f3dfadc2
|
24 |
__maybe_unused |
d88af4da9
|
25 26 27 28 29 30 31 |
static void print_eth(int idx) { char name[10], *val; if (idx) sprintf(name, "eth%iaddr", idx); else strcpy(name, "ethaddr"); |
00caae6d4
|
32 |
val = env_get(name); |
d88af4da9
|
33 34 35 36 37 |
if (!val) val = "(not set)"; printf("%-12s= %s ", name, val); } |
de2dff6ff
|
38 |
|
05c3e68f8
|
39 |
#ifndef CONFIG_DM_ETH |
d88af4da9
|
40 |
__maybe_unused |
9fc6a06ad
|
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
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 ", i, dev->name); print_eth(i); i++; } } while (dev); printf("current eth = %s ", eth_get_name()); |
00caae6d4
|
58 59 |
printf("ip_addr = %s ", env_get("ipaddr")); |
9fc6a06ad
|
60 |
} |
05c3e68f8
|
61 |
#endif |
9fc6a06ad
|
62 63 |
__maybe_unused |
47708457f
|
64 |
static void print_lnum(const char *name, unsigned long long value) |
d88af4da9
|
65 66 67 68 69 70 71 72 73 74 75 76 77 |
{ printf("%-12s= 0x%.8llX ", name, value); } __maybe_unused static void print_mhz(const char *name, unsigned long hz) { char buf[32]; printf("%-12s= %6s MHz ", name, strmhz(buf, hz)); } |
8bde7f776
|
78 |
|
171e53968
|
79 80 81 82 83 |
static inline void print_bi_boot_params(const bd_t *bd) { print_num("boot_params", (ulong)bd->bi_boot_params); } |
12feb3647
|
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); |
12feb3647
|
92 93 94 95 96 |
#else print_num("memstart", (ulong)bd->bi_memstart); print_lnum("memsize", (u64)bd->bi_memsize); #endif } |
fd60e99f5
|
97 98 99 100 101 102 |
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) { |
ddd917b8f
|
103 104 105 106 107 |
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); } |
fd60e99f5
|
108 109 110 |
} #endif } |
f80e53598
|
111 112 113 114 115 116 |
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); |
70cc0c34b
|
117 |
#elif defined(CONFIG_NIOS2) |
f80e53598
|
118 119 120 121 122 123 124 125 126 |
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 } |
8752e260c
|
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
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 |
00caae6d4
|
146 147 |
printf("IP addr = %s ", env_get("ipaddr")); |
8752e260c
|
148 149 |
#endif } |
4e3fa7d8a
|
150 151 152 153 154 |
static inline void print_baudrate(void) { #if defined(CONFIG_PPC) printf("baudrate = %6u bps ", gd->baudrate); |
4e3fa7d8a
|
155 156 157 158 159 |
#else printf("baudrate = %u bps ", gd->baudrate); #endif } |
b37483c42
|
160 |
static inline void __maybe_unused print_std_bdinfo(const bd_t *bd) |
e37950843
|
161 162 163 164 165 166 167 |
{ print_bi_boot_params(bd); print_bi_mem(bd); print_bi_flash(bd); print_eth_ip_addr(); print_baudrate(); } |
c99ea7907
|
168 |
#if defined(CONFIG_PPC) |
e79394643
|
169 170 |
void __weak board_detail(void) { |
7b07a20c5
|
171 |
/* Please define board_detail() for your platform */ |
e79394643
|
172 |
} |
8bde7f776
|
173 |
|
5902e8f71
|
174 |
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
8bde7f776
|
175 |
{ |
8bde7f776
|
176 |
bd_t *bd = gd->bd; |
8bde7f776
|
177 178 |
#ifdef DEBUG |
5902e8f71
|
179 180 |
print_num("bd address", (ulong)bd); #endif |
12feb3647
|
181 |
print_bi_mem(bd); |
f80e53598
|
182 |
print_bi_flash(bd); |
5902e8f71
|
183 184 |
print_num("sramstart", bd->bi_sramstart); print_num("sramsize", bd->bi_sramsize); |
907208c45
|
185 |
#if defined(CONFIG_8xx) || defined(CONFIG_E500) |
5902e8f71
|
186 187 188 |
print_num("immr_base", bd->bi_immr_base); #endif print_num("bootflags", bd->bi_bootflags); |
9c4c5ae3e
|
189 |
#if defined(CONFIG_CPM2) |
0c277ef9f
|
190 191 192 |
print_mhz("vco", bd->bi_vco); print_mhz("sccfreq", bd->bi_sccfreq); print_mhz("brgfreq", bd->bi_brgfreq); |
8bde7f776
|
193 |
#endif |
0c277ef9f
|
194 |
print_mhz("intfreq", bd->bi_intfreq); |
9c4c5ae3e
|
195 |
#if defined(CONFIG_CPM2) |
0c277ef9f
|
196 |
print_mhz("cpmfreq", bd->bi_cpmfreq); |
8bde7f776
|
197 |
#endif |
0c277ef9f
|
198 |
print_mhz("busfreq", bd->bi_busfreq); |
03f5c5502
|
199 |
|
34e210f5b
|
200 201 202 203 204 205 206 207 208 |
#ifdef CONFIG_ENABLE_36BIT_PHYS #ifdef CONFIG_PHYS_64BIT puts("addressing = 36-bit "); #else puts("addressing = 32-bit "); #endif #endif |
8752e260c
|
209 |
print_eth_ip_addr(); |
4e3fa7d8a
|
210 |
print_baudrate(); |
5902e8f71
|
211 |
print_num("relocaddr", gd->relocaddr); |
e79394643
|
212 |
board_detail(); |
8bde7f776
|
213 214 |
return 0; } |
c99ea7907
|
215 |
#elif defined(CONFIG_NIOS2) |
5c952cf02
|
216 |
|
5902e8f71
|
217 |
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
5c952cf02
|
218 |
{ |
5c952cf02
|
219 |
bd_t *bd = gd->bd; |
fd60e99f5
|
220 |
print_bi_dram(bd); |
f80e53598
|
221 |
print_bi_flash(bd); |
5c952cf02
|
222 |
|
6d0f6bcf3
|
223 |
#if defined(CONFIG_SYS_SRAM_BASE) |
5c952cf02
|
224 225 226 |
print_num ("sram start", (ulong)bd->bi_sramstart); print_num ("sram size", (ulong)bd->bi_sramsize); #endif |
8752e260c
|
227 |
print_eth_ip_addr(); |
4e3fa7d8a
|
228 |
print_baudrate(); |
5c952cf02
|
229 230 231 |
return 0; } |
c99ea7907
|
232 233 |
#elif defined(CONFIG_MICROBLAZE) |
cfc67116a
|
234 |
|
5902e8f71
|
235 |
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
cfc67116a
|
236 |
{ |
cfc67116a
|
237 |
bd_t *bd = gd->bd; |
e945f6dc2
|
238 |
|
fd60e99f5
|
239 |
print_bi_dram(bd); |
f80e53598
|
240 |
print_bi_flash(bd); |
6d0f6bcf3
|
241 |
#if defined(CONFIG_SYS_SRAM_BASE) |
5902e8f71
|
242 243 |
print_num("sram start ", (ulong)bd->bi_sramstart); print_num("sram size ", (ulong)bd->bi_sramsize); |
cfc67116a
|
244 |
#endif |
062f078c3
|
245 |
#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH) |
9fc6a06ad
|
246 |
print_eths(); |
cfc67116a
|
247 |
#endif |
4e3fa7d8a
|
248 |
print_baudrate(); |
e945f6dc2
|
249 250 |
print_num("relocaddr", gd->relocaddr); print_num("reloc off", gd->reloc_off); |
de86765bc
|
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); |
e945f6dc2
|
254 |
|
cfc67116a
|
255 256 |
return 0; } |
4a5517094
|
257 |
|
c99ea7907
|
258 |
#elif defined(CONFIG_M68K) |
5902e8f71
|
259 |
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
8e585f02f
|
260 |
{ |
8e585f02f
|
261 |
bd_t *bd = gd->bd; |
8ae158cd8
|
262 |
|
12feb3647
|
263 |
print_bi_mem(bd); |
f80e53598
|
264 |
print_bi_flash(bd); |
6d0f6bcf3
|
265 |
#if defined(CONFIG_SYS_INIT_RAM_ADDR) |
5902e8f71
|
266 267 |
print_num("sramstart", (ulong)bd->bi_sramstart); print_num("sramsize", (ulong)bd->bi_sramsize); |
8e585f02f
|
268 |
#endif |
6d0f6bcf3
|
269 |
#if defined(CONFIG_SYS_MBAR) |
5902e8f71
|
270 |
print_num("mbar", bd->bi_mbar_base); |
8e585f02f
|
271 |
#endif |
0c277ef9f
|
272 273 |
print_mhz("cpufreq", bd->bi_intfreq); print_mhz("busfreq", bd->bi_busfreq); |
8ae158cd8
|
274 |
#ifdef CONFIG_PCI |
0c277ef9f
|
275 |
print_mhz("pcifreq", bd->bi_pcifreq); |
8ae158cd8
|
276 277 |
#endif #ifdef CONFIG_EXTRA_CLOCK |
0c277ef9f
|
278 279 280 |
print_mhz("flbfreq", bd->bi_flbfreq); print_mhz("inpfreq", bd->bi_inpfreq); print_mhz("vcofreq", bd->bi_vcofreq); |
8ae158cd8
|
281 |
#endif |
8752e260c
|
282 |
print_eth_ip_addr(); |
4e3fa7d8a
|
283 |
print_baudrate(); |
8e585f02f
|
284 285 286 |
return 0; } |
c99ea7907
|
287 |
#elif defined(CONFIG_MIPS) |
8bde7f776
|
288 |
|
5902e8f71
|
289 |
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
8bde7f776
|
290 |
{ |
e37950843
|
291 |
print_std_bdinfo(gd->bd); |
8cf7a418b
|
292 293 |
print_num("relocaddr", gd->relocaddr); print_num("reloc off", gd->reloc_off); |
8bde7f776
|
294 295 296 |
return 0; } |
8bde7f776
|
297 |
|
c99ea7907
|
298 |
#elif defined(CONFIG_ARM) |
8bde7f776
|
299 |
|
0e350f81e
|
300 301 |
static int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
8bde7f776
|
302 |
{ |
8bde7f776
|
303 |
bd_t *bd = gd->bd; |
5902e8f71
|
304 |
print_num("arch_number", bd->bi_arch_number); |
171e53968
|
305 |
print_bi_boot_params(bd); |
fd60e99f5
|
306 |
print_bi_dram(bd); |
8bde7f776
|
307 |
|
e81495224
|
308 |
#ifdef CONFIG_SYS_MEM_RESERVE_SECURE |
e61a7534e
|
309 |
if (gd->arch.secure_ram & MEM_RESERVE_SECURE_SECURED) { |
e81495224
|
310 |
print_num("Secure ram", |
e61a7534e
|
311 |
gd->arch.secure_ram & MEM_RESERVE_SECURE_ADDR_MASK); |
e81495224
|
312 313 |
} #endif |
f2ccf7f7a
|
314 315 316 317 |
#ifdef CONFIG_RESV_RAM if (gd->arch.resv_ram) print_num("Reserved ram", gd->arch.resv_ram); #endif |
ff9738001
|
318 |
#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH) |
9fc6a06ad
|
319 |
print_eths(); |
a41dbbd98
|
320 |
#endif |
4e3fa7d8a
|
321 |
print_baudrate(); |
e47f2db53
|
322 |
#if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF)) |
34fd5d253
|
323 |
print_num("TLB addr", gd->arch.tlb_addr); |
f1d2b313c
|
324 |
#endif |
5902e8f71
|
325 326 327 328 |
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); |
c8fcd0f27
|
329 |
#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) |
5902e8f71
|
330 |
print_num("FB base ", gd->fb_base); |
c8fcd0f27
|
331 |
#endif |
8f5d46872
|
332 333 334 335 336 337 338 339 340 341 342 343 |
/* * 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 ", gd->bd->bi_arm_freq); printf("DSP frequency = %ld MHz ", gd->bd->bi_dsp_freq); printf("DDR frequency = %ld MHz ", gd->bd->bi_ddr_freq); #endif |
7bb7d672a
|
344 345 346 347 |
#ifdef CONFIG_BOARD_TYPES printf("Board Type = %ld ", gd->board_type); #endif |
f1896c45c
|
348 |
#if CONFIG_VAL(SYS_MALLOC_F_LEN) |
7f7ddf2a8
|
349 350 |
printf("Early malloc usage: %lx / %x ", gd->malloc_ptr, |
f1896c45c
|
351 |
CONFIG_VAL(SYS_MALLOC_F_LEN)); |
7f7ddf2a8
|
352 |
#endif |
535395337
|
353 354 355 |
if (gd->fdt_blob) printf("fdt_blob = %p ", gd->fdt_blob); |
7f7ddf2a8
|
356 |
|
8bde7f776
|
357 358 |
return 0; } |
ebd0d062a
|
359 |
#elif defined(CONFIG_SH) |
5902e8f71
|
360 |
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
ebd0d062a
|
361 362 |
{ bd_t *bd = gd->bd; |
12feb3647
|
363 364 |
print_bi_mem(bd); |
f80e53598
|
365 |
print_bi_flash(bd); |
8752e260c
|
366 |
print_eth_ip_addr(); |
4e3fa7d8a
|
367 |
print_baudrate(); |
ebd0d062a
|
368 369 |
return 0; } |
a806ee6fa
|
370 |
#elif defined(CONFIG_X86) |
5902e8f71
|
371 |
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
a806ee6fa
|
372 |
{ |
a806ee6fa
|
373 |
bd_t *bd = gd->bd; |
a806ee6fa
|
374 |
|
171e53968
|
375 |
print_bi_boot_params(bd); |
5902e8f71
|
376 |
|
fd60e99f5
|
377 |
print_bi_dram(bd); |
a806ee6fa
|
378 |
|
ca92ad4f6
|
379 380 |
print_num("relocaddr", gd->relocaddr); print_num("reloc off", gd->reloc_off); |
a806ee6fa
|
381 |
#if defined(CONFIG_CMD_NET) |
8752e260c
|
382 |
print_eth_ip_addr(); |
0c277ef9f
|
383 |
print_mhz("ethspeed", bd->bi_ethspeed); |
a806ee6fa
|
384 |
#endif |
4e3fa7d8a
|
385 |
print_baudrate(); |
a806ee6fa
|
386 387 388 |
return 0; } |
6fcc3be45
|
389 390 391 392 |
#elif defined(CONFIG_SANDBOX) int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { |
6fcc3be45
|
393 |
bd_t *bd = gd->bd; |
171e53968
|
394 |
print_bi_boot_params(bd); |
fd60e99f5
|
395 |
print_bi_dram(bd); |
8752e260c
|
396 |
print_eth_ip_addr(); |
6fcc3be45
|
397 |
|
c8fcd0f27
|
398 |
#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) |
6fcc3be45
|
399 |
print_num("FB base ", gd->fb_base); |
c8fcd0f27
|
400 |
#endif |
6fcc3be45
|
401 402 |
return 0; } |
64d614617
|
403 404 405 406 |
#elif defined(CONFIG_NDS32) int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { |
64d614617
|
407 408 409 |
bd_t *bd = gd->bd; print_num("arch_number", bd->bi_arch_number); |
171e53968
|
410 |
print_bi_boot_params(bd); |
fd60e99f5
|
411 |
print_bi_dram(bd); |
8752e260c
|
412 |
print_eth_ip_addr(); |
4e3fa7d8a
|
413 |
print_baudrate(); |
64d614617
|
414 415 416 |
return 0; } |
068feb9b8
|
417 418 419 420 421 422 423 424 425 426 427 428 429 430 |
#elif defined(CONFIG_RISCV) 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); print_bi_boot_params(bd); print_bi_dram(bd); print_eth_ip_addr(); print_baudrate(); return 0; } |
946f6f242
|
431 |
#elif defined(CONFIG_ARC) |
bc5d54288
|
432 433 434 435 |
int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { bd_t *bd = gd->bd; |
12feb3647
|
436 |
print_bi_mem(bd); |
8752e260c
|
437 |
print_eth_ip_addr(); |
4e3fa7d8a
|
438 |
print_baudrate(); |
bc5d54288
|
439 440 441 |
return 0; } |
de5e5cea0
|
442 443 444 445 446 447 448 |
#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; } |
c99ea7907
|
449 450 451 |
#else #error "a case for this architecture does not exist!" #endif |
8bde7f776
|
452 |
|
8bde7f776
|
453 |
/* -------------------------------------------------------------------- */ |
0d4983930
|
454 455 |
U_BOOT_CMD( bdinfo, 1, 1, do_bdinfo, |
2fb2604d5
|
456 |
"print Board Info structure", |
a89c33db9
|
457 |
"" |
8bde7f776
|
458 |
); |