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