bdinfo.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. void bdinfo_print_mhz(const char *name, unsigned long hz)
  33. {
  34. char buf[32];
  35. printf("%-12s= %6s MHz\n", name, strmhz(buf, hz));
  36. }
  37. static void print_bi_dram(const struct bd_info *bd)
  38. {
  39. int i;
  40. for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) {
  41. if (bd->bi_dram[i].size) {
  42. bdinfo_print_num("DRAM bank", i);
  43. bdinfo_print_num("-> start", bd->bi_dram[i].start);
  44. bdinfo_print_num("-> size", bd->bi_dram[i].size);
  45. }
  46. }
  47. }
  48. __weak void arch_print_bdinfo(void)
  49. {
  50. }
  51. int do_bdinfo(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  52. {
  53. struct bd_info *bd = gd->bd;
  54. #ifdef DEBUG
  55. bdinfo_print_num("bd address", (ulong)bd);
  56. #endif
  57. bdinfo_print_num("boot_params", (ulong)bd->bi_boot_params);
  58. print_bi_dram(bd);
  59. if (IS_ENABLED(CONFIG_SYS_HAS_SRAM)) {
  60. bdinfo_print_num("sramstart", (ulong)bd->bi_sramstart);
  61. bdinfo_print_num("sramsize", (ulong)bd->bi_sramsize);
  62. }
  63. bdinfo_print_num("flashstart", (ulong)bd->bi_flashstart);
  64. bdinfo_print_num("flashsize", (ulong)bd->bi_flashsize);
  65. bdinfo_print_num("flashoffset", (ulong)bd->bi_flashoffset);
  66. printf("baudrate = %u bps\n", gd->baudrate);
  67. bdinfo_print_num("relocaddr", gd->relocaddr);
  68. bdinfo_print_num("reloc off", gd->reloc_off);
  69. printf("%-12s= %u-bit\n", "Build", (uint)sizeof(void *) * 8);
  70. if (IS_ENABLED(CONFIG_CMD_NET)) {
  71. printf("current eth = %s\n", eth_get_name());
  72. print_eth(0);
  73. printf("IP addr = %s\n", env_get("ipaddr"));
  74. }
  75. bdinfo_print_num("fdt_blob", (ulong)gd->fdt_blob);
  76. bdinfo_print_num("new_fdt", (ulong)gd->new_fdt);
  77. bdinfo_print_num("fdt_size", (ulong)gd->fdt_size);
  78. #if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) || defined(CONFIG_DM_VIDEO)
  79. bdinfo_print_num("FB base ", gd->fb_base);
  80. #endif
  81. #if CONFIG_IS_ENABLED(MULTI_DTB_FIT)
  82. bdinfo_print_num("multi_dtb_fit", (ulong)gd->multi_dtb_fit);
  83. #endif
  84. if (gd->fdt_blob) {
  85. struct lmb lmb;
  86. lmb_init_and_reserve(&lmb, gd->bd, (void *)gd->fdt_blob);
  87. lmb_dump_all_force(&lmb);
  88. }
  89. arch_print_bdinfo();
  90. return 0;
  91. }
  92. U_BOOT_CMD(
  93. bdinfo, 1, 1, do_bdinfo,
  94. "print Board Info structure",
  95. ""
  96. );