uboot/cmd/bdinfo.c
<<
>>
Prefs
   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
   9#include <common.h>
  10#include <command.h>
  11#include <dm.h>
  12#include <env.h>
  13#include <lmb.h>
  14#include <net.h>
  15#include <video.h>
  16#include <vsprintf.h>
  17#include <asm/cache.h>
  18#include <asm/global_data.h>
  19
  20DECLARE_GLOBAL_DATA_PTR;
  21
  22void bdinfo_print_num_l(const char *name, ulong value)
  23{
  24        printf("%-12s= 0x%0*lx\n", name, 2 * (int)sizeof(value), value);
  25}
  26
  27void bdinfo_print_num_ll(const char *name, unsigned long long value)
  28{
  29        printf("%-12s= 0x%.*llx\n", name, 2 * (int)sizeof(ulong), value);
  30}
  31
  32static void print_eth(int idx)
  33{
  34        char name[10], *val;
  35        if (idx)
  36                sprintf(name, "eth%iaddr", idx);
  37        else
  38                strcpy(name, "ethaddr");
  39        val = env_get(name);
  40        if (!val)
  41                val = "(not set)";
  42        printf("%-12s= %s\n", name, val);
  43}
  44
  45void bdinfo_print_mhz(const char *name, unsigned long hz)
  46{
  47        char buf[32];
  48
  49        printf("%-12s= %6s MHz\n", name, strmhz(buf, hz));
  50}
  51
  52static void print_bi_dram(const struct bd_info *bd)
  53{
  54        int i;
  55
  56        for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) {
  57                if (bd->bi_dram[i].size) {
  58                        bdinfo_print_num_l("DRAM bank", i);
  59                        bdinfo_print_num_ll("-> start", bd->bi_dram[i].start);
  60                        bdinfo_print_num_ll("-> size",  bd->bi_dram[i].size);
  61                }
  62        }
  63}
  64
  65__weak void arch_print_bdinfo(void)
  66{
  67}
  68
  69static void show_video_info(void)
  70{
  71        const struct udevice *dev;
  72        struct uclass *uc;
  73
  74        uclass_id_foreach_dev(UCLASS_VIDEO, dev, uc) {
  75                printf("%-12s= %s %sactive\n", "Video", dev->name,
  76                       device_active(dev) ? "" : "in");
  77                if (device_active(dev)) {
  78                        struct video_priv *upriv = dev_get_uclass_priv(dev);
  79
  80                        bdinfo_print_num_ll("FB base", (ulong)upriv->fb);
  81                        if (upriv->copy_fb)
  82                                bdinfo_print_num_ll("FB copy",
  83                                                    (ulong)upriv->copy_fb);
  84                        printf("%-12s= %dx%dx%d\n", "FB size", upriv->xsize,
  85                               upriv->ysize, 1 << upriv->bpix);
  86                }
  87        }
  88}
  89
  90int do_bdinfo(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
  91{
  92        struct bd_info *bd = gd->bd;
  93
  94#ifdef DEBUG
  95        bdinfo_print_num_l("bd address", (ulong)bd);
  96#endif
  97        bdinfo_print_num_l("boot_params", (ulong)bd->bi_boot_params);
  98        print_bi_dram(bd);
  99        if (IS_ENABLED(CONFIG_SYS_HAS_SRAM)) {
 100                bdinfo_print_num_l("sramstart", (ulong)bd->bi_sramstart);
 101                bdinfo_print_num_l("sramsize", (ulong)bd->bi_sramsize);
 102        }
 103        bdinfo_print_num_l("flashstart", (ulong)bd->bi_flashstart);
 104        bdinfo_print_num_l("flashsize", (ulong)bd->bi_flashsize);
 105        bdinfo_print_num_l("flashoffset", (ulong)bd->bi_flashoffset);
 106        printf("baudrate    = %u bps\n", gd->baudrate);
 107        bdinfo_print_num_l("relocaddr", gd->relocaddr);
 108        bdinfo_print_num_l("reloc off", gd->reloc_off);
 109        printf("%-12s= %u-bit\n", "Build", (uint)sizeof(void *) * 8);
 110        if (IS_ENABLED(CONFIG_CMD_NET)) {
 111                printf("current eth = %s\n", eth_get_name());
 112                print_eth(0);
 113                printf("IP addr     = %s\n", env_get("ipaddr"));
 114        }
 115        bdinfo_print_num_l("fdt_blob", (ulong)gd->fdt_blob);
 116        bdinfo_print_num_l("new_fdt", (ulong)gd->new_fdt);
 117        bdinfo_print_num_l("fdt_size", (ulong)gd->fdt_size);
 118        if (IS_ENABLED(CONFIG_DM_VIDEO))
 119                show_video_info();
 120#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO)
 121        bdinfo_print_num_l("FB base  ", gd->fb_base);
 122#endif
 123#if CONFIG_IS_ENABLED(MULTI_DTB_FIT)
 124        bdinfo_print_num_l("multi_dtb_fit", (ulong)gd->multi_dtb_fit);
 125#endif
 126        if (gd->fdt_blob) {
 127                struct lmb lmb;
 128
 129                lmb_init_and_reserve(&lmb, gd->bd, (void *)gd->fdt_blob);
 130                lmb_dump_all_force(&lmb);
 131        }
 132
 133        arch_print_bdinfo();
 134
 135        return 0;
 136}
 137
 138U_BOOT_CMD(
 139        bdinfo, 1,      1,      do_bdinfo,
 140        "print Board Info structure",
 141        ""
 142);
 143