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