bdinfo.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Implements the 'bd' command to show board information
  4. *
  5. * (C) Copyright 2003
  6. * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  7. */
  8. #include <common.h>
  9. #include <command.h>
  10. #include <env.h>
  11. #include <lmb.h>
  12. #include <net.h>
  13. #include <vsprintf.h>
  14. #include <asm/cache.h>
  15. DECLARE_GLOBAL_DATA_PTR;
  16. void bdinfo_print_num(const char *name, ulong value)
  17. {
  18. printf("%-12s= 0x%0*lx\n", name, 2 * (int)sizeof(value), value);
  19. }
  20. static void print_eth(int idx)
  21. {
  22. char name[10], *val;
  23. if (idx)
  24. sprintf(name, "eth%iaddr", idx);
  25. else
  26. strcpy(name, "ethaddr");
  27. val = env_get(name);
  28. if (!val)
  29. val = "(not set)";
  30. printf("%-12s= %s\n", name, val);
  31. }
  32. static void print_lnum(const char *name, unsigned long long value)
  33. {
  34. printf("%-12s= 0x%.8llX\n", name, value);
  35. }
  36. void bdinfo_print_mhz(const char *name, unsigned long hz)
  37. {
  38. char buf[32];
  39. printf("%-12s= %6s MHz\n", name, strmhz(buf, hz));
  40. }
  41. static void print_bi_dram(const struct bd_info *bd)
  42. {
  43. #ifdef CONFIG_NR_DRAM_BANKS
  44. int i;
  45. for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) {
  46. if (bd->bi_dram[i].size) {
  47. bdinfo_print_num("DRAM bank", i);
  48. bdinfo_print_num("-> start", bd->bi_dram[i].start);
  49. bdinfo_print_num("-> size", bd->bi_dram[i].size);
  50. }
  51. }
  52. #endif
  53. }
  54. __weak void arch_print_bdinfo(void)
  55. {
  56. }
  57. int do_bdinfo(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  58. {
  59. struct bd_info *bd = gd->bd;
  60. #ifdef DEBUG
  61. bdinfo_print_num("bd address", (ulong)bd);
  62. #endif
  63. bdinfo_print_num("boot_params", (ulong)bd->bi_boot_params);
  64. print_bi_dram(bd);
  65. bdinfo_print_num("memstart", (ulong)bd->bi_memstart);
  66. print_lnum("memsize", (u64)bd->bi_memsize);
  67. bdinfo_print_num("flashstart", (ulong)bd->bi_flashstart);
  68. bdinfo_print_num("flashsize", (ulong)bd->bi_flashsize);
  69. bdinfo_print_num("flashoffset", (ulong)bd->bi_flashoffset);
  70. printf("baudrate = %u bps\n", gd->baudrate);
  71. bdinfo_print_num("relocaddr", gd->relocaddr);
  72. bdinfo_print_num("reloc off", gd->reloc_off);
  73. printf("%-12s= %u-bit\n", "Build", (uint)sizeof(void *) * 8);
  74. if (IS_ENABLED(CONFIG_CMD_NET)) {
  75. printf("current eth = %s\n", eth_get_name());
  76. print_eth(0);
  77. printf("IP addr = %s\n", env_get("ipaddr"));
  78. }
  79. bdinfo_print_num("fdt_blob", (ulong)gd->fdt_blob);
  80. bdinfo_print_num("new_fdt", (ulong)gd->new_fdt);
  81. bdinfo_print_num("fdt_size", (ulong)gd->fdt_size);
  82. #if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) || defined(CONFIG_DM_VIDEO)
  83. bdinfo_print_num("FB base ", gd->fb_base);
  84. #endif
  85. #if CONFIG_IS_ENABLED(MULTI_DTB_FIT)
  86. bdinfo_print_num("multi_dtb_fit", (ulong)gd->multi_dtb_fit);
  87. #endif
  88. if (gd->fdt_blob) {
  89. struct lmb lmb;
  90. lmb_init_and_reserve(&lmb, gd->bd, (void *)gd->fdt_blob);
  91. lmb_dump_all_force(&lmb);
  92. }
  93. arch_print_bdinfo();
  94. return 0;
  95. }
  96. U_BOOT_CMD(
  97. bdinfo, 1, 1, do_bdinfo,
  98. "print Board Info structure",
  99. ""
  100. );