bdinfo.c 2.6 KB

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