[PATCH v2 00/39] Tidy up the 'bd' command.

The code for the 'bd' command never got the 'generic board' treatment many years ago when global_data and bd_info were converted. As a result it still has a lot of arch-specific duplication of generic code.
This series aims to make as much code in this file generic as possible, so that it is easy to add new info on all architectures.
For the three architectures that actually need additional code (ARM, PPC and m68k) this is moved into arch-specific files.
With this series, bdinfo.c drops from nearly 500 lines to just over 100.
It also makes x86 report the frame buffer address properly (the original goal of my effort).
Changes in v2: - Add a new patch to drop the 'bd' command for tbs2910 - Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches - Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches - Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches - Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches - Drop __maybe_unused on print_lnum() too - Move __maybe_unused on print_lnum() to the early patch - Update commit message with an extra motivation - Squash in the next patch to inline print_eths() - Leave MULTI_DTB_FIT in the generic file as it is not really ARM-specific - Move ARM's bi_arch_number over to ARM-specific code as well - Update the commit message to explain the address more
Simon Glass (39): tbs2910: Drop the 'bd' command bdinfo: nds32: Use generic bd_info bdinfo: riscv: Use generic bd_info bdinfo: m68k: Drop bd_info->bi_ipbfreq bdinfo: xtensa: Create a generic do_bdinfo for xtensa bdinfo: mips: Use the generic bd command bdinfo: nios2: Use the generic bd command bdinfo: microblaze: Use the generic bd command bdinfo: sh: Use the generic bd command bdinfo: x86: Use the generic bd command bdinfo: sandbox: Use the generic bd command bdinfo: nds32: Use the generic bd command bdinfo: riscv: Use the generic bd command bdinfo: powerpc: Use the generic bd command bdinfo: m68k: Use the generic bd command bdinfo: arm: Use the generic bd command bdinfo: arc: Use the generic bd command bdinfo: Drop the option to not use the generic 'bd' command bdinfo: Drop unused __maybe_unused bdinfo: microblaze: sh: nios2: Drop arch-specific flash info bdinfo: Drop unnecessary inline on functions bdinfo: Drop print_std_bdinfo() bdinfo: ppc: Drop arch-specific print_baudrate() bdinfo: sh: arc: Drop arch-specific print_bi_mem() bdinfo: Drop print_bi_boot_params() bdinfo: Drop print_bi_flash() bdinfo: Drop print_cpu_word_size() bdinfo: net: ppc: Drop bi_enet1addr and other similar info bdinfo: net: ppc: Drop prints for CONFIG_HAS_ETHn bdinfo: net: Drop legacy ethernet bdinfo bdinfo: net: Inline print_eth_ip_addr() bdinfo: Export some basic printing functions bdinfo: arm: Move ARM-specific info into its own file bdinfo: ppc: Move PPC-specific info into its own file bdinfo: m68k: Move m68k-specific info into its own file bdinfo: m68k: ppc: Move arch-specific code from bdinfo bdinfo: Update the file comments bdinfo: dm: Update fb_base when using driver model bdinfo: x86: vesa: Update fb_base to the correct value
arch/arm/lib/Makefile | 1 + arch/arm/lib/bdinfo.c | 51 ++++ arch/m68k/lib/Makefile | 1 + arch/m68k/lib/bdinfo.c | 34 +++ arch/nds32/include/asm/u-boot.h | 20 +- arch/powerpc/lib/Makefile | 2 + arch/powerpc/lib/bdinfo.c | 46 ++++ arch/riscv/include/asm/u-boot.h | 19 +- arch/x86/lib/fsp/fsp_graphics.c | 5 +- cmd/bdinfo.c | 448 +++----------------------------- common/board_r.c | 16 +- configs/tbs2910_defconfig | 1 + drivers/video/video-uclass.c | 1 + include/asm-generic/u-boot.h | 18 -- include/init.h | 9 + 15 files changed, 185 insertions(+), 487 deletions(-) create mode 100644 arch/arm/lib/bdinfo.c create mode 100644 arch/m68k/lib/bdinfo.c create mode 100644 arch/powerpc/lib/bdinfo.c

This board is very close to its limit. Drop this command before the bd refactoring, which increases the size slightly on one toolchain.
Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v2: - Add a new patch to drop the 'bd' command for tbs2910
configs/tbs2910_defconfig | 1 + 1 file changed, 1 insertion(+)
diff --git a/configs/tbs2910_defconfig b/configs/tbs2910_defconfig index 2ff0e160f7..2b4f062426 100644 --- a/configs/tbs2910_defconfig +++ b/configs/tbs2910_defconfig @@ -18,6 +18,7 @@ CONFIG_BOUNCE_BUFFER=y CONFIG_BOARD_EARLY_INIT_F=y CONFIG_HUSH_PARSER=y CONFIG_SYS_PROMPT="Matrix U-Boot> " +# CONFIG_CMD_BDI is not set CONFIG_CMD_BOOTZ=y # CONFIG_BOOTM_PLAN9 is not set # CONFIG_BOOTM_RTEMS is not set

On Mon, May 11, 2020 at 4:17 AM Simon Glass sjg@chromium.org wrote:
This board is very close to its limit. Drop this command before the bd refactoring, which increases the size slightly on one toolchain.
Signed-off-by: Simon Glass sjg@chromium.org
Changes in v2:
- Add a new patch to drop the 'bd' command for tbs2910
configs/tbs2910_defconfig | 1 + 1 file changed, 1 insertion(+)
Reviewed-by: Bin Meng bmeng.cn@gmail.com

At present nds32 still uses its own private bd_info struct. Move it over to use the generic one like other archs.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Rick Chen rick@andestech.com Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
arch/nds32/include/asm/u-boot.h | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-)
diff --git a/arch/nds32/include/asm/u-boot.h b/arch/nds32/include/asm/u-boot.h index 8c949e7fb7..7b6e905f2a 100644 --- a/arch/nds32/include/asm/u-boot.h +++ b/arch/nds32/include/asm/u-boot.h @@ -19,26 +19,10 @@ #ifndef _U_BOOT_H_ #define _U_BOOT_H_ 1
+/* Use the generic board which requires a unified bd_info */ +#include <asm-generic/u-boot.h> #include <asm/u-boot-nds32.h>
- -typedef struct bd_info { - unsigned long bi_arch_number; /* unique id for this board */ - unsigned long bi_boot_params; /* where this board expects params */ - unsigned long bi_memstart; /* start of DRAM memory */ - unsigned long bi_memsize; /* size of DRAM memory in bytes */ - unsigned long bi_flashstart; /* start of FLASH memory */ - unsigned long bi_flashsize; /* size of FLASH memory */ - unsigned long bi_flashoffset; /* reserved area for startup monitor */ - unsigned char bi_enetaddr[6]; - - struct /* RAM configuration */ - { - unsigned long start; - unsigned long size; - } bi_dram[CONFIG_NR_DRAM_BANKS]; -} bd_t; - /* For image.h:image_check_target_arch() */ #define IH_ARCH_DEFAULT IH_ARCH_NDS32

At present riscv still uses its own private bd_info struct. Move it over to use the generic one like other archs.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Rick Chen rick@andestech.com Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
arch/riscv/include/asm/u-boot.h | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-)
diff --git a/arch/riscv/include/asm/u-boot.h b/arch/riscv/include/asm/u-boot.h index 5ba8e77812..d5e1d5f323 100644 --- a/arch/riscv/include/asm/u-boot.h +++ b/arch/riscv/include/asm/u-boot.h @@ -18,25 +18,10 @@ #ifndef _U_BOOT_H_ #define _U_BOOT_H_ 1
+/* Use the generic board which requires a unified bd_info */ +#include <asm-generic/u-boot.h> #include <asm/u-boot-riscv.h>
- -typedef struct bd_info { - unsigned long bi_boot_params; /* where this board expects params */ - unsigned long bi_memstart; /* start of DRAM memory */ - unsigned long bi_memsize; /* size of DRAM memory in bytes */ - unsigned long bi_flashstart; /* start of FLASH memory */ - unsigned long bi_flashsize; /* size of FLASH memory */ - unsigned long bi_flashoffset; /* reserved area for startup monitor */ - unsigned char bi_enetaddr[6]; - - struct /* RAM configuration */ - { - unsigned long start; - unsigned long size; - } bi_dram[CONFIG_NR_DRAM_BANKS]; -} bd_t; - /* For image.h:image_check_target_arch() */ #define IH_ARCH_DEFAULT IH_ARCH_RISCV

This field is not used anymore. Drop it.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
include/asm-generic/u-boot.h | 1 - 1 file changed, 1 deletion(-)
diff --git a/include/asm-generic/u-boot.h b/include/asm-generic/u-boot.h index cc94d39069..be0014c3b3 100644 --- a/include/asm-generic/u-boot.h +++ b/include/asm-generic/u-boot.h @@ -60,7 +60,6 @@ typedef struct bd_info { unsigned long bi_vco; /* VCO Out from PLL, in MHz */ #endif #if defined(CONFIG_M68K) - unsigned long bi_ipbfreq; /* IPB Bus Freq, in MHz */ unsigned long bi_pcifreq; /* PCI Bus Freq, in MHz */ #endif #if defined(CONFIG_EXTRA_CLOCK)

This arch uses only the generic function. It would be nice if all the archs did the same. As a first step, create a new generic function for the 'bd' command and make xtensa use it.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 9edcf8d74e..9247180a29 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -474,14 +474,20 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#elif defined(CONFIG_XTENSA)
-int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +#define USE_GENERIC + +#else + #error "a case for this architecture does not exist!" +#endif + +/* Temporary check for archs that use generic bdinfo. Eventually all will */ +#ifdef USE_GENERIC +int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { print_std_bdinfo(gd->bd); + return 0; } - -#else - #error "a case for this architecture does not exist!" #endif
/* -------------------------------------------------------------------- */

MIPS currently has a few extra things which are generally useful. Add them to the generic function and move MIPS over to use it.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Daniel Schwierzeck daniel.schwierzeck@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 9247180a29..6ccbd2f50f 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -299,15 +299,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#elif defined(CONFIG_MIPS)
-int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - print_std_bdinfo(gd->bd); - print_num("relocaddr", gd->relocaddr); - print_num("reloc off", gd->reloc_off); - print_cpu_word_size(); - - return 0; -} +#define USE_GENERIC
#elif defined(CONFIG_ARM)
@@ -485,6 +477,9 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { print_std_bdinfo(gd->bd); + print_num("relocaddr", gd->relocaddr); + print_num("reloc off", gd->reloc_off); + print_cpu_word_size();
return 0; }

Nios2 currently has some code to output SRAM information which is behind an #ifdef. No nios2 boards define this option, so the code can be removed.
Move Nios2 over to use the generic function.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 6ccbd2f50f..405a915861 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -220,24 +220,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#elif defined(CONFIG_NIOS2)
-int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - bd_t *bd = gd->bd; - - print_bi_dram(bd); - print_bi_flash(bd); - -#if defined(CONFIG_SYS_SRAM_BASE) - print_num ("sram start", (ulong)bd->bi_sramstart); - print_num ("sram size", (ulong)bd->bi_sramsize); -#endif - - print_eth_ip_addr(); - print_baudrate(); - print_cpu_word_size(); - - return 0; -} +#define USE_GENERIC
#elif defined(CONFIG_MICROBLAZE)

Microblaze prints out ethernet and FDT information. This is useful to most archs, so move it into the generic code and move microblaze over to use it.
Note that FDT information is shown for all boards, since they should be using device tree by now.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 405a915861..dc5a09f8ce 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -224,29 +224,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#elif defined(CONFIG_MICROBLAZE)
-int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - bd_t *bd = gd->bd; - - print_bi_dram(bd); - print_bi_flash(bd); -#if defined(CONFIG_SYS_SRAM_BASE) - print_num("sram start ", (ulong)bd->bi_sramstart); - print_num("sram size ", (ulong)bd->bi_sramsize); -#endif -#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH) - print_eths(); -#endif - print_baudrate(); - print_num("relocaddr", gd->relocaddr); - print_num("reloc off", gd->reloc_off); - print_num("fdt_blob", (ulong)gd->fdt_blob); - print_num("new_fdt", (ulong)gd->new_fdt); - print_num("fdt_size", (ulong)gd->fdt_size); - print_cpu_word_size(); - - return 0; -} +#define USE_GENERIC
#elif defined(CONFIG_M68K)
@@ -463,6 +441,12 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) print_num("relocaddr", gd->relocaddr); print_num("reloc off", gd->reloc_off); print_cpu_word_size(); +#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH) + print_eths(); +#endif + print_num("fdt_blob", (ulong)gd->fdt_blob); + print_num("new_fdt", (ulong)gd->new_fdt); + print_num("fdt_size", (ulong)gd->fdt_size);
return 0; }

This arch has no code that is not already in the generic function. Drop the arch-specific function and change sh over to use the generic one.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index dc5a09f8ce..0b9ac21848 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -325,18 +325,7 @@ static int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc,
#elif defined(CONFIG_SH)
-int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - bd_t *bd = gd->bd; - - print_bi_mem(bd); - print_bi_flash(bd); - print_eth_ip_addr(); - print_baudrate(); - print_cpu_word_size(); - - return 0; -} +#define USE_GENERIC
#elif defined(CONFIG_X86)

This arch shows 'ethspeed' info but only the freescale drivers use it, so it can be dropped.
It also calls print_bi_dram() which is safe to call from any arch since it has an #ifdef inside it. Add this to the generic do_bdinfo() and move x86 over to use it. Put it first since pytests rely on seeing it before memstart in find_ram_base().
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 0b9ac21848..0b903d234e 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -329,25 +329,7 @@ static int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc,
#elif defined(CONFIG_X86)
-int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - bd_t *bd = gd->bd; - - print_bi_boot_params(bd); - - print_bi_dram(bd); - - print_num("relocaddr", gd->relocaddr); - print_num("reloc off", gd->reloc_off); -#if defined(CONFIG_CMD_NET) - print_eth_ip_addr(); - print_mhz("ethspeed", bd->bi_ethspeed); -#endif - print_baudrate(); - print_cpu_word_size(); - - return 0; -} +#define USE_GENERIC
#elif defined(CONFIG_SANDBOX)
@@ -426,6 +408,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) #ifdef USE_GENERIC int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { + print_bi_dram(gd->bd); print_std_bdinfo(gd->bd); print_num("relocaddr", gd->relocaddr); print_num("reloc off", gd->reloc_off);

Sandbox has a printout of 'FB base' but this code is not used since sandbox uses driver model for everything.
Move sandbox over to use the generic do_bdinfo().
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 0b903d234e..dce24b43fa 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -333,21 +333,7 @@ static int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc,
#elif defined(CONFIG_SANDBOX)
-int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - bd_t *bd = gd->bd; - - print_bi_boot_params(bd); - print_bi_dram(bd); - print_eth_ip_addr(); - -#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) - print_num("FB base ", gd->fb_base); -#endif - print_cpu_word_size(); - - return 0; -} +#define USE_GENERIC
#elif defined(CONFIG_NDS32)

This arch has none of its own info to show. Move it over to use the generic do_bdinfo().
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Rick Chen rick@andestech.com Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index dce24b43fa..6a2bbfb348 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -337,19 +337,7 @@ static int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc,
#elif defined(CONFIG_NDS32)
-int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - bd_t *bd = gd->bd; - - print_num("arch_number", bd->bi_arch_number); - print_bi_boot_params(bd); - print_bi_dram(bd); - print_eth_ip_addr(); - print_baudrate(); - print_cpu_word_size(); - - return 0; -} +#define USE_GENERIC
#elif defined(CONFIG_RISCV)

This arch has none of its own info to show. Move it over to use the generic do_bdinfo().
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Rick Chen rick@andestech.com Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 6a2bbfb348..0e96dd619c 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -341,20 +341,7 @@ static int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc,
#elif defined(CONFIG_RISCV)
-int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - bd_t *bd = gd->bd; - - print_bi_boot_params(bd); - print_bi_dram(bd); - print_num("relocaddr", gd->relocaddr); - print_num("reloc off", gd->reloc_off); - print_eth_ip_addr(); - print_baudrate(); - print_cpu_word_size(); - - return 0; -} +#define USE_GENERIC
#elif defined(CONFIG_ARC)

Unfortunately PowerPC has a lot of special stuff. Move it into the generic function for now, so we can have it all in one place.
Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v2: - Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches
cmd/bdinfo.c | 89 ++++++++++++++++++++++++---------------------------- 1 file changed, 41 insertions(+), 48 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 0e96dd619c..05e4a05b77 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -170,53 +170,8 @@ static inline void __maybe_unused print_std_bdinfo(const bd_t *bd) }
#if defined(CONFIG_PPC) -void __weak board_detail(void) -{ - /* Please define board_detail() for your platform */ -} - -int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - bd_t *bd = gd->bd; - -#ifdef DEBUG - print_num("bd address", (ulong)bd); -#endif - print_bi_mem(bd); - print_bi_flash(bd); - print_num("sramstart", bd->bi_sramstart); - print_num("sramsize", bd->bi_sramsize); -#if defined(CONFIG_MPC8xx) || defined(CONFIG_E500) - print_num("immr_base", bd->bi_immr_base); -#endif - print_num("bootflags", bd->bi_bootflags); -#if defined(CONFIG_CPM2) - print_mhz("vco", bd->bi_vco); - print_mhz("sccfreq", bd->bi_sccfreq); - print_mhz("brgfreq", bd->bi_brgfreq); -#endif - print_mhz("intfreq", bd->bi_intfreq); -#if defined(CONFIG_CPM2) - print_mhz("cpmfreq", bd->bi_cpmfreq); -#endif - print_mhz("busfreq", bd->bi_busfreq); - -#ifdef CONFIG_ENABLE_36BIT_PHYS -#ifdef CONFIG_PHYS_64BIT - puts("addressing = 36-bit\n"); -#else - puts("addressing = 32-bit\n"); -#endif -#endif - - print_eth_ip_addr(); - print_baudrate(); - print_num("relocaddr", gd->relocaddr); - board_detail(); - print_cpu_word_size();
- return 0; -} +#define USE_GENERIC
#elif defined(CONFIG_NIOS2)
@@ -367,10 +322,20 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
/* Temporary check for archs that use generic bdinfo. Eventually all will */ #ifdef USE_GENERIC +void __weak board_detail(void) +{ + /* Please define board_detail() for your PPC platform */ +} + int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { - print_bi_dram(gd->bd); - print_std_bdinfo(gd->bd); + bd_t *bd = gd->bd; + +#ifdef DEBUG + print_num("bd address", (ulong)bd); +#endif + print_bi_dram(bd); + print_std_bdinfo(bd); print_num("relocaddr", gd->relocaddr); print_num("reloc off", gd->reloc_off); print_cpu_word_size(); @@ -381,6 +346,34 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) print_num("new_fdt", (ulong)gd->new_fdt); print_num("fdt_size", (ulong)gd->fdt_size);
+ /* This section is used only by ppc */ +#if defined(CONFIG_MPC8xx) || defined(CONFIG_E500) + print_num("immr_base", bd->bi_immr_base); +#endif + if (IS_ENABLED(CONFIG_PPC)) { + print_num("bootflags", bd->bi_bootflags); + print_mhz("intfreq", bd->bi_intfreq); +#ifdef CONFIG_ENABLE_36BIT_PHYS + if (IS_ENABLED(CONFIG_PHYS_64BIT)) + puts("addressing = 36-bit\n"); + else + puts("addressing = 32-bit\n"); +#endif + print_mhz("busfreq", bd->bi_busfreq); + board_detail(); + } +#if defined(CONFIG_CPM2) + print_mhz("cpmfreq", bd->bi_cpmfreq); + print_mhz("vco", bd->bi_vco); + print_mhz("sccfreq", bd->bi_sccfreq); + print_mhz("brgfreq", bd->bi_brgfreq); +#endif + +#if defined(CONFIG_SYS_INIT_RAM_ADDR) + print_num("sramstart", (ulong)bd->bi_sramstart); + print_num("sramsize", (ulong)bd->bi_sramsize); +#endif + return 0; } #endif

On Mon, May 11, 2020 at 4:17 AM Simon Glass sjg@chromium.org wrote:
Unfortunately PowerPC has a lot of special stuff. Move it into the generic function for now, so we can have it all in one place.
Signed-off-by: Simon Glass sjg@chromium.org
Changes in v2:
- Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches
cmd/bdinfo.c | 89 ++++++++++++++++++++++++---------------------------- 1 file changed, 41 insertions(+), 48 deletions(-)
Reviewed-by: Bin Meng bmeng.cn@gmail.com

Unfortunately m68k has a lot of special stuff. Move it into the generic function for now, so we can have it all in one place.
Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v2: - Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches
cmd/bdinfo.c | 49 +++++++++++++++++++------------------------------ 1 file changed, 19 insertions(+), 30 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 05e4a05b77..646d8807bd 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -183,35 +183,7 @@ static inline void __maybe_unused print_std_bdinfo(const bd_t *bd)
#elif defined(CONFIG_M68K)
-int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - bd_t *bd = gd->bd; - - print_bi_mem(bd); - print_bi_flash(bd); -#if defined(CONFIG_SYS_INIT_RAM_ADDR) - print_num("sramstart", (ulong)bd->bi_sramstart); - print_num("sramsize", (ulong)bd->bi_sramsize); -#endif -#if defined(CONFIG_SYS_MBAR) - print_num("mbar", bd->bi_mbar_base); -#endif - print_mhz("cpufreq", bd->bi_intfreq); - print_mhz("busfreq", bd->bi_busfreq); -#ifdef CONFIG_PCI - print_mhz("pcifreq", bd->bi_pcifreq); -#endif -#ifdef CONFIG_EXTRA_CLOCK - print_mhz("flbfreq", bd->bi_flbfreq); - print_mhz("inpfreq", bd->bi_inpfreq); - print_mhz("vcofreq", bd->bi_vcofreq); -#endif - print_eth_ip_addr(); - print_baudrate(); - print_cpu_word_size(); - - return 0; -} +#define USE_GENERIC
#elif defined(CONFIG_MIPS)
@@ -359,7 +331,6 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) else puts("addressing = 32-bit\n"); #endif - print_mhz("busfreq", bd->bi_busfreq); board_detail(); } #if defined(CONFIG_CPM2) @@ -369,9 +340,27 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) print_mhz("brgfreq", bd->bi_brgfreq); #endif
+ /* This is used by m68k and ppc */ #if defined(CONFIG_SYS_INIT_RAM_ADDR) print_num("sramstart", (ulong)bd->bi_sramstart); print_num("sramsize", (ulong)bd->bi_sramsize); +#endif + if (IS_ENABLED(CONFIG_PPC) || IS_ENABLED(CONFIG_M68K)) + print_mhz("busfreq", bd->bi_busfreq); + + /* The rest are used only by m68k */ +#ifdef CONFIG_M68K +#if defined(CONFIG_SYS_MBAR) + print_num("mbar", bd->bi_mbar_base); +#endif + print_mhz("cpufreq", bd->bi_intfreq); + if (IS_ENABLED(CONFIG_PCI)) + print_mhz("pcifreq", bd->bi_pcifreq); +#ifdef CONFIG_EXTRA_CLOCK + print_mhz("flbfreq", bd->bi_flbfreq); + print_mhz("inpfreq", bd->bi_inpfreq); + print_mhz("vcofreq", bd->bi_vcofreq); +#endif #endif
return 0;

On Mon, May 11, 2020 at 4:17 AM Simon Glass sjg@chromium.org wrote:
Unfortunately m68k has a lot of special stuff. Move it into the generic function for now, so we can have it all in one place.
Signed-off-by: Simon Glass sjg@chromium.org
Changes in v2:
- Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches
cmd/bdinfo.c | 49 +++++++++++++++++++------------------------------ 1 file changed, 19 insertions(+), 30 deletions(-)
Reviewed-by: Bin Meng bmeng.cn@gmail.com

Unfortunately ARM has a lot of special stuff. Move it into the generic function for now, so we can have it all in one place.
Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v2: - Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches
cmd/bdinfo.c | 102 ++++++++++++++++++++++----------------------------- 1 file changed, 44 insertions(+), 58 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 646d8807bd..9cf3da4725 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -191,64 +191,7 @@ static inline void __maybe_unused print_std_bdinfo(const bd_t *bd)
#elif defined(CONFIG_ARM)
-static int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, - char * const argv[]) -{ - bd_t *bd = gd->bd; - - print_num("arch_number", bd->bi_arch_number); - print_bi_boot_params(bd); - print_bi_dram(bd); - -#ifdef CONFIG_SYS_MEM_RESERVE_SECURE - if (gd->arch.secure_ram & MEM_RESERVE_SECURE_SECURED) { - print_num("Secure ram", - gd->arch.secure_ram & MEM_RESERVE_SECURE_ADDR_MASK); - } -#endif -#ifdef CONFIG_RESV_RAM - if (gd->arch.resv_ram) - print_num("Reserved ram", gd->arch.resv_ram); -#endif -#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH) - print_eths(); -#endif - print_baudrate(); -#if !(CONFIG_IS_ENABLED(SYS_ICACHE_OFF) && CONFIG_IS_ENABLED(SYS_DCACHE_OFF)) - print_num("TLB addr", gd->arch.tlb_addr); -#endif - print_num("relocaddr", gd->relocaddr); - print_num("reloc off", gd->reloc_off); - print_num("irq_sp", gd->irq_sp); /* irq stack pointer */ - print_num("sp start ", gd->start_addr_sp); -#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) || defined(CONFIG_DM_VIDEO) - print_num("FB base ", gd->fb_base); -#endif - /* - * TODO: Currently only support for davinci SOC's is added. - * Remove this check once all the board implement this. - */ -#ifdef CONFIG_CLOCKS - printf("ARM frequency = %ld MHz\n", gd->bd->bi_arm_freq); - printf("DSP frequency = %ld MHz\n", gd->bd->bi_dsp_freq); - printf("DDR frequency = %ld MHz\n", gd->bd->bi_ddr_freq); -#endif -#ifdef CONFIG_BOARD_TYPES - printf("Board Type = %ld\n", gd->board_type); -#endif -#if CONFIG_VAL(SYS_MALLOC_F_LEN) - printf("Early malloc usage: %lx / %x\n", gd->malloc_ptr, - CONFIG_VAL(SYS_MALLOC_F_LEN)); -#endif -#if CONFIG_IS_ENABLED(MULTI_DTB_FIT) - print_num("multi_dtb_fit", (ulong)gd->multi_dtb_fit); -#endif - if (gd->fdt_blob) - print_num("fdt_blob", (ulong)gd->fdt_blob); - print_cpu_word_size(); - - return 0; -} +#define USE_GENERIC
#elif defined(CONFIG_SH)
@@ -306,6 +249,8 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) #ifdef DEBUG print_num("bd address", (ulong)bd); #endif + if (IS_ENABLED(CONFIG_ARM)) + print_num("arch_number", bd->bi_arch_number); print_bi_dram(bd); print_std_bdinfo(bd); print_num("relocaddr", gd->relocaddr); @@ -317,6 +262,47 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) print_num("fdt_blob", (ulong)gd->fdt_blob); print_num("new_fdt", (ulong)gd->new_fdt); print_num("fdt_size", (ulong)gd->fdt_size); +#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) || defined(CONFIG_DM_VIDEO) + print_num("FB base ", gd->fb_base); +#endif + + /* This section is used only by ARM */ +#ifdef CONFIG_ARM +#ifdef CONFIG_SYS_MEM_RESERVE_SECURE + if (gd->arch.secure_ram & MEM_RESERVE_SECURE_SECURED) { + print_num("Secure ram", + gd->arch.secure_ram & MEM_RESERVE_SECURE_ADDR_MASK); + } +#endif +#ifdef CONFIG_RESV_RAM + if (gd->arch.resv_ram) + print_num("Reserved ram", gd->arch.resv_ram); +#endif +#if !(CONFIG_IS_ENABLED(SYS_ICACHE_OFF) && CONFIG_IS_ENABLED(SYS_DCACHE_OFF)) + print_num("TLB addr", gd->arch.tlb_addr); +#endif + print_num("irq_sp", gd->irq_sp); /* irq stack pointer */ + print_num("sp start ", gd->start_addr_sp); + /* + * TODO: Currently only support for davinci SOC's is added. + * Remove this check once all the board implement this. + */ +#ifdef CONFIG_CLOCKS + printf("ARM frequency = %ld MHz\n", gd->bd->bi_arm_freq); + printf("DSP frequency = %ld MHz\n", gd->bd->bi_dsp_freq); + printf("DDR frequency = %ld MHz\n", gd->bd->bi_ddr_freq); +#endif +#ifdef CONFIG_BOARD_TYPES + printf("Board Type = %ld\n", gd->board_type); +#endif +#if CONFIG_VAL(SYS_MALLOC_F_LEN) + printf("Early malloc usage: %lx / %x\n", gd->malloc_ptr, + CONFIG_VAL(SYS_MALLOC_F_LEN)); +#endif +#if CONFIG_IS_ENABLED(MULTI_DTB_FIT) + print_num("multi_dtb_fit", (ulong)gd->multi_dtb_fit); +#endif +#endif /* CONFIG_ARM */
/* This section is used only by ppc */ #if defined(CONFIG_MPC8xx) || defined(CONFIG_E500)

On Mon, May 11, 2020 at 4:17 AM Simon Glass sjg@chromium.org wrote:
Unfortunately ARM has a lot of special stuff. Move it into the generic function for now, so we can have it all in one place.
Signed-off-by: Simon Glass sjg@chromium.org
Changes in v2:
- Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches
cmd/bdinfo.c | 102 ++++++++++++++++++++++----------------------------- 1 file changed, 44 insertions(+), 58 deletions(-)
Reviewed-by: Bin Meng bmeng.cn@gmail.com

There is nothing new in the arc 'bd' command beyond what is already there. Switch it over to use the generic code.
Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v2: - Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches
cmd/bdinfo.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 9cf3da4725..f07f92463c 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -215,17 +215,7 @@ static inline void __maybe_unused print_std_bdinfo(const bd_t *bd)
#elif defined(CONFIG_ARC)
-int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - bd_t *bd = gd->bd; - - print_bi_mem(bd); - print_eth_ip_addr(); - print_baudrate(); - print_cpu_word_size(); - - return 0; -} +#define USE_GENERIC
#elif defined(CONFIG_XTENSA)

Hi Simon,
-----Original Message----- From: Simon Glass sjg@chromium.org Sent: Sunday, May 10, 2020 11:17 PM To: U-Boot Mailing List u-boot@lists.denx.de Cc: Bin Meng bmeng.cn@gmail.com; Stefan Roese sr@denx.de; Tom Rini trini@konsulko.com; Daniel Schwierzeck daniel.schwierzeck@gmail.com; Simon Glass sjg@chromium.org; Alexey Brodkin abrodkin@synopsys.com Subject: [PATCH v2 17/39] bdinfo: arc: Use the generic bd command
There is nothing new in the arc 'bd' command beyond what is already there. Switch it over to use the generic code.
Signed-off-by: Simon Glass sjg@chromium.org
Acked-by: Alexey Brodkin abrodkin@synopsys.com

On Mon, May 11, 2020 at 4:17 AM Simon Glass sjg@chromium.org wrote:
There is nothing new in the arc 'bd' command beyond what is already there. Switch it over to use the generic code.
Signed-off-by: Simon Glass sjg@chromium.org
Changes in v2:
- Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches
cmd/bdinfo.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-)
Reviewed-by: Bin Meng bmeng.cn@gmail.com

Now that all architectures are using the generic do_bdinfo(), drop the option to not use it. When new architectures are added, they will get at least some useful information from the generic implementation.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 59 ---------------------------------------------------- 1 file changed, 59 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index f07f92463c..13b4f2ebba 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -169,64 +169,6 @@ static inline void __maybe_unused print_std_bdinfo(const bd_t *bd) print_baudrate(); }
-#if defined(CONFIG_PPC) - -#define USE_GENERIC - -#elif defined(CONFIG_NIOS2) - -#define USE_GENERIC - -#elif defined(CONFIG_MICROBLAZE) - -#define USE_GENERIC - -#elif defined(CONFIG_M68K) - -#define USE_GENERIC - -#elif defined(CONFIG_MIPS) - -#define USE_GENERIC - -#elif defined(CONFIG_ARM) - -#define USE_GENERIC - -#elif defined(CONFIG_SH) - -#define USE_GENERIC - -#elif defined(CONFIG_X86) - -#define USE_GENERIC - -#elif defined(CONFIG_SANDBOX) - -#define USE_GENERIC - -#elif defined(CONFIG_NDS32) - -#define USE_GENERIC - -#elif defined(CONFIG_RISCV) - -#define USE_GENERIC - -#elif defined(CONFIG_ARC) - -#define USE_GENERIC - -#elif defined(CONFIG_XTENSA) - -#define USE_GENERIC - -#else - #error "a case for this architecture does not exist!" -#endif - -/* Temporary check for archs that use generic bdinfo. Eventually all will */ -#ifdef USE_GENERIC void __weak board_detail(void) { /* Please define board_detail() for your PPC platform */ @@ -341,7 +283,6 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
return 0; } -#endif
/* -------------------------------------------------------------------- */

Some of these are not needed now. Drop them to avoid cluttering the code.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: - Drop __maybe_unused on print_lnum() too
cmd/bdinfo.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 13b4f2ebba..d41547ec6e 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -15,12 +15,11 @@
DECLARE_GLOBAL_DATA_PTR;
-__maybe_unused void print_cpu_word_size(void) +void print_cpu_word_size(void) { printf("%-12s= %u-bit\n", "Build", (uint)sizeof(void *) * 8); }
-__maybe_unused static void print_num(const char *name, ulong value) { printf("%-12s= 0x%0*lx\n", name, 2 * (int)sizeof(value), value); @@ -61,13 +60,11 @@ static void print_eths(void) } #endif
-__maybe_unused static void print_lnum(const char *name, unsigned long long value) { printf("%-12s= 0x%.8llX\n", name, value); }
-__maybe_unused static void print_mhz(const char *name, unsigned long hz) { char buf[32]; @@ -160,7 +157,7 @@ static inline void print_baudrate(void) #endif }
-static inline void __maybe_unused print_std_bdinfo(const bd_t *bd) +static inline void print_std_bdinfo(const bd_t *bd) { print_bi_boot_params(bd); print_bi_mem(bd);

The differences these architectures have are minor and not worth the extra code. Use the generic version always.
Tidy up the code style by removing unnecessary tabs.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index d41547ec6e..25397c2e95 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -109,20 +109,9 @@ static inline void print_bi_dram(const bd_t *bd)
static inline void print_bi_flash(const bd_t *bd) { -#if defined(CONFIG_MICROBLAZE) || defined(CONFIG_SH) - print_num("flash start ", (ulong)bd->bi_flashstart); - print_num("flash size ", (ulong)bd->bi_flashsize); - print_num("flash offset ", (ulong)bd->bi_flashoffset); - -#elif defined(CONFIG_NIOS2) - print_num("flash start", (ulong)bd->bi_flashstart); - print_num("flash size", (ulong)bd->bi_flashsize); - print_num("flash offset", (ulong)bd->bi_flashoffset); -#else - print_num("flashstart", (ulong)bd->bi_flashstart); - print_num("flashsize", (ulong)bd->bi_flashsize); - print_num("flashoffset", (ulong)bd->bi_flashoffset); -#endif + print_num("flashstart", (ulong)bd->bi_flashstart); + print_num("flashsize", (ulong)bd->bi_flashsize); + print_num("flashoffset", (ulong)bd->bi_flashoffset); }
static inline void print_eth_ip_addr(void)

This serves no purpose since the compiler will inline the functions automatically. Drop use of inline in this file.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: - Move __maybe_unused on print_lnum() to the early patch
cmd/bdinfo.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 25397c2e95..6e5b3d997d 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -73,12 +73,12 @@ static void print_mhz(const char *name, unsigned long hz) }
-static inline void print_bi_boot_params(const bd_t *bd) +static void print_bi_boot_params(const bd_t *bd) { print_num("boot_params", (ulong)bd->bi_boot_params); }
-static inline void print_bi_mem(const bd_t *bd) +static void print_bi_mem(const bd_t *bd) { #if defined(CONFIG_SH) print_num("mem start ", (ulong)bd->bi_memstart); @@ -92,7 +92,7 @@ static inline void print_bi_mem(const bd_t *bd) #endif }
-static inline void print_bi_dram(const bd_t *bd) +static void print_bi_dram(const bd_t *bd) { #ifdef CONFIG_NR_DRAM_BANKS int i; @@ -107,14 +107,14 @@ static inline void print_bi_dram(const bd_t *bd) #endif }
-static inline void print_bi_flash(const bd_t *bd) +static void print_bi_flash(const bd_t *bd) { print_num("flashstart", (ulong)bd->bi_flashstart); print_num("flashsize", (ulong)bd->bi_flashsize); print_num("flashoffset", (ulong)bd->bi_flashoffset); }
-static inline void print_eth_ip_addr(void) +static void print_eth_ip_addr(void) { #if defined(CONFIG_CMD_NET) print_eth(0); @@ -137,7 +137,7 @@ static inline void print_eth_ip_addr(void) #endif }
-static inline void print_baudrate(void) +static void print_baudrate(void) { #if defined(CONFIG_PPC) printf("baudrate = %6u bps\n", gd->baudrate); @@ -146,7 +146,7 @@ static inline void print_baudrate(void) #endif }
-static inline void print_std_bdinfo(const bd_t *bd) +static void print_std_bdinfo(const bd_t *bd) { print_bi_boot_params(bd); print_bi_mem(bd);

Everything in this function is standard now so it serves no purpose. Move it into the generic do_bdinfo() function.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 6e5b3d997d..e8e20f4155 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -146,15 +146,6 @@ static void print_baudrate(void) #endif }
-static void print_std_bdinfo(const bd_t *bd) -{ - print_bi_boot_params(bd); - print_bi_mem(bd); - print_bi_flash(bd); - print_eth_ip_addr(); - print_baudrate(); -} - void __weak board_detail(void) { /* Please define board_detail() for your PPC platform */ @@ -169,8 +160,12 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) #endif if (IS_ENABLED(CONFIG_ARM)) print_num("arch_number", bd->bi_arch_number); + print_bi_boot_params(bd); print_bi_dram(bd); - print_std_bdinfo(bd); + print_bi_mem(bd); + print_bi_flash(bd); + print_eth_ip_addr(); + print_baudrate(); print_num("relocaddr", gd->relocaddr); print_num("reloc off", gd->reloc_off); print_cpu_word_size();

This function outputs the same basic info. Since the baud rate is commonly 115200 these is often no difference. Drop the arch-specific code and inline it to avoid a one-line function.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Stefan Roese sr@denx.de ---
Changes in v2: None
cmd/bdinfo.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index e8e20f4155..62eea010c5 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -137,15 +137,6 @@ static void print_eth_ip_addr(void) #endif }
-static void print_baudrate(void) -{ -#if defined(CONFIG_PPC) - printf("baudrate = %6u bps\n", gd->baudrate); -#else - printf("baudrate = %u bps\n", gd->baudrate); -#endif -} - void __weak board_detail(void) { /* Please define board_detail() for your PPC platform */ @@ -165,7 +156,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) print_bi_mem(bd); print_bi_flash(bd); print_eth_ip_addr(); - print_baudrate(); + printf("baudrate = %u bps\n", gd->baudrate); print_num("relocaddr", gd->relocaddr); print_num("reloc off", gd->reloc_off); print_cpu_word_size();

It isn't worth having arch-specific code for such minor output differences. In fact it is better if all archs are consistent.
Drop the arch-specific code in print_bi_mem() and inline it to avoid a two-line function.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com Acked-by: Alexey Brodkin abrodkin@synopsys.com ---
Changes in v2: None
cmd/bdinfo.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 62eea010c5..5ffd86e508 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -78,20 +78,6 @@ static void print_bi_boot_params(const bd_t *bd) print_num("boot_params", (ulong)bd->bi_boot_params); }
-static void print_bi_mem(const bd_t *bd) -{ -#if defined(CONFIG_SH) - print_num("mem start ", (ulong)bd->bi_memstart); - print_lnum("mem size ", (u64)bd->bi_memsize); -#elif defined(CONFIG_ARC) - print_num("mem start", (ulong)bd->bi_memstart); - print_lnum("mem size", (u64)bd->bi_memsize); -#else - print_num("memstart", (ulong)bd->bi_memstart); - print_lnum("memsize", (u64)bd->bi_memsize); -#endif -} - static void print_bi_dram(const bd_t *bd) { #ifdef CONFIG_NR_DRAM_BANKS @@ -153,7 +139,8 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) print_num("arch_number", bd->bi_arch_number); print_bi_boot_params(bd); print_bi_dram(bd); - print_bi_mem(bd); + print_num("memstart", (ulong)bd->bi_memstart); + print_lnum("memsize", (u64)bd->bi_memsize); print_bi_flash(bd); print_eth_ip_addr(); printf("baudrate = %u bps\n", gd->baudrate);

This function only has one line of code in it so inline it.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 5ffd86e508..b65eec332d 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -72,12 +72,6 @@ static void print_mhz(const char *name, unsigned long hz) printf("%-12s= %6s MHz\n", name, strmhz(buf, hz)); }
- -static void print_bi_boot_params(const bd_t *bd) -{ - print_num("boot_params", (ulong)bd->bi_boot_params); -} - static void print_bi_dram(const bd_t *bd) { #ifdef CONFIG_NR_DRAM_BANKS @@ -137,7 +131,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) #endif if (IS_ENABLED(CONFIG_ARM)) print_num("arch_number", bd->bi_arch_number); - print_bi_boot_params(bd); + print_num("boot_params", (ulong)bd->bi_boot_params); print_bi_dram(bd); print_num("memstart", (ulong)bd->bi_memstart); print_lnum("memsize", (u64)bd->bi_memsize);

This function only has three lines of code in it so inline it. This helps to put all the code in one place for future partitioning.
Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v2: - Update commit message with an extra motivation
cmd/bdinfo.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index b65eec332d..f22dc7a129 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -87,13 +87,6 @@ static void print_bi_dram(const bd_t *bd) #endif }
-static void print_bi_flash(const bd_t *bd) -{ - print_num("flashstart", (ulong)bd->bi_flashstart); - print_num("flashsize", (ulong)bd->bi_flashsize); - print_num("flashoffset", (ulong)bd->bi_flashoffset); -} - static void print_eth_ip_addr(void) { #if defined(CONFIG_CMD_NET) @@ -135,7 +128,9 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) print_bi_dram(bd); print_num("memstart", (ulong)bd->bi_memstart); print_lnum("memsize", (u64)bd->bi_memsize); - print_bi_flash(bd); + print_num("flashstart", (ulong)bd->bi_flashstart); + print_num("flashsize", (ulong)bd->bi_flashsize); + print_num("flashoffset", (ulong)bd->bi_flashoffset); print_eth_ip_addr(); printf("baudrate = %u bps\n", gd->baudrate); print_num("relocaddr", gd->relocaddr);

On Mon, May 11, 2020 at 4:17 AM Simon Glass sjg@chromium.org wrote:
This function only has three lines of code in it so inline it. This helps to put all the code in one place for future partitioning.
Signed-off-by: Simon Glass sjg@chromium.org
Changes in v2:
- Update commit message with an extra motivation
cmd/bdinfo.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-)
Reviewed-by: Bin Meng bmeng.cn@gmail.com

This function only has one line of code in it so inline it.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index f22dc7a129..d0afef5b5e 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -15,11 +15,6 @@
DECLARE_GLOBAL_DATA_PTR;
-void print_cpu_word_size(void) -{ - printf("%-12s= %u-bit\n", "Build", (uint)sizeof(void *) * 8); -} - static void print_num(const char *name, ulong value) { printf("%-12s= 0x%0*lx\n", name, 2 * (int)sizeof(value), value); @@ -135,7 +130,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) printf("baudrate = %u bps\n", gd->baudrate); print_num("relocaddr", gd->relocaddr); print_num("reloc off", gd->reloc_off); - print_cpu_word_size(); + printf("%-12s= %u-bit\n", "Build", (uint)sizeof(void *) * 8); #if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH) print_eths(); #endif

These values were 'old' in 2013 so it should be safe to remove them. They are never set in U-Boot anyway, so the values will always be zero.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Stefan Roese sr@denx.de ---
Changes in v2: None
common/board_r.c | 16 +--------------- include/asm-generic/u-boot.h | 17 ----------------- 2 files changed, 1 insertion(+), 32 deletions(-)
diff --git a/common/board_r.c b/common/board_r.c index d9015cd057..4876afba6b 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -525,21 +525,7 @@ static int initr_ethaddr(void)
/* kept around for legacy kernels only ... ignore the next section */ eth_env_get_enetaddr("ethaddr", bd->bi_enetaddr); -#ifdef CONFIG_HAS_ETH1 - eth_env_get_enetaddr("eth1addr", bd->bi_enet1addr); -#endif -#ifdef CONFIG_HAS_ETH2 - eth_env_get_enetaddr("eth2addr", bd->bi_enet2addr); -#endif -#ifdef CONFIG_HAS_ETH3 - eth_env_get_enetaddr("eth3addr", bd->bi_enet3addr); -#endif -#ifdef CONFIG_HAS_ETH4 - eth_env_get_enetaddr("eth4addr", bd->bi_enet4addr); -#endif -#ifdef CONFIG_HAS_ETH5 - eth_env_get_enetaddr("eth5addr", bd->bi_enet5addr); -#endif + return 0; } #endif /* CONFIG_CMD_NET */ diff --git a/include/asm-generic/u-boot.h b/include/asm-generic/u-boot.h index be0014c3b3..0ec4522653 100644 --- a/include/asm-generic/u-boot.h +++ b/include/asm-generic/u-boot.h @@ -67,23 +67,6 @@ typedef struct bd_info { unsigned long bi_vcofreq; /* vco Freq in MHz */ unsigned long bi_flbfreq; /* Flexbus Freq in MHz */ #endif - -#ifdef CONFIG_HAS_ETH1 - unsigned char bi_enet1addr[6]; /* OLD: see README.enetaddr */ -#endif -#ifdef CONFIG_HAS_ETH2 - unsigned char bi_enet2addr[6]; /* OLD: see README.enetaddr */ -#endif -#ifdef CONFIG_HAS_ETH3 - unsigned char bi_enet3addr[6]; /* OLD: see README.enetaddr */ -#endif -#ifdef CONFIG_HAS_ETH4 - unsigned char bi_enet4addr[6]; /* OLD: see README.enetaddr */ -#endif -#ifdef CONFIG_HAS_ETH5 - unsigned char bi_enet5addr[6]; /* OLD: see README.enetaddr */ -#endif - ulong bi_arch_number; /* unique id for this board */ ulong bi_boot_params; /* where this board expects params */ #ifdef CONFIG_NR_DRAM_BANKS

These config options have not been migrated to Kconfig. This should be handled using driver model, iterating over the available Ethernet devices. For now, remove the code.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Stefan Roese sr@denx.de ---
Changes in v2: None
cmd/bdinfo.c | 15 --------------- 1 file changed, 15 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index d0afef5b5e..6fa8b32389 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -86,21 +86,6 @@ static void print_eth_ip_addr(void) { #if defined(CONFIG_CMD_NET) print_eth(0); -#if defined(CONFIG_HAS_ETH1) - print_eth(1); -#endif -#if defined(CONFIG_HAS_ETH2) - print_eth(2); -#endif -#if defined(CONFIG_HAS_ETH3) - print_eth(3); -#endif -#if defined(CONFIG_HAS_ETH4) - print_eth(4); -#endif -#if defined(CONFIG_HAS_ETH5) - print_eth(5); -#endif printf("IP addr = %s\n", env_get("ipaddr")); #endif }

This code pre-dates driver model and the migration date is nearly upon us. Pare the print_eths() function down and enable it for driver model, since it works correctly.
The IP address is already printed in print_eth_ip_addr() so we can remove that.
Since this results in a one-line print_eths() function, inline it.
Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v2: - Squash in the next patch to inline print_eths()
cmd/bdinfo.c | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 6fa8b32389..e6237daf93 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -34,27 +34,6 @@ static void print_eth(int idx) printf("%-12s= %s\n", name, val); }
-#ifndef CONFIG_DM_ETH -__maybe_unused -static void print_eths(void) -{ - struct eth_device *dev; - int i = 0; - - do { - dev = eth_get_dev_by_index(i); - if (dev) { - printf("eth%dname = %s\n", i, dev->name); - print_eth(i); - i++; - } - } while (dev); - - printf("current eth = %s\n", eth_get_name()); - printf("ip_addr = %s\n", env_get("ipaddr")); -} -#endif - static void print_lnum(const char *name, unsigned long long value) { printf("%-12s= 0x%.8llX\n", name, value); @@ -116,9 +95,8 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) print_num("relocaddr", gd->relocaddr); print_num("reloc off", gd->reloc_off); printf("%-12s= %u-bit\n", "Build", (uint)sizeof(void *) * 8); -#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH) - print_eths(); -#endif + if (IS_ENABLED(CONFIG_CMD_NET)) + printf("current eth = %s\n", eth_get_name()); print_num("fdt_blob", (ulong)gd->fdt_blob); print_num("new_fdt", (ulong)gd->new_fdt); print_num("fdt_size", (ulong)gd->fdt_size);

On Mon, May 11, 2020 at 4:17 AM Simon Glass sjg@chromium.org wrote:
This code pre-dates driver model and the migration date is nearly upon us. Pare the print_eths() function down and enable it for driver model, since it works correctly.
The IP address is already printed in print_eth_ip_addr() so we can remove that.
Since this results in a one-line print_eths() function, inline it.
Signed-off-by: Simon Glass sjg@chromium.org
Changes in v2:
- Squash in the next patch to inline print_eths()
cmd/bdinfo.c | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-)
Reviewed-by: Bin Meng bmeng.cn@gmail.com

This function only has two lines of code now, so inline it.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index e6237daf93..e30d530411 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -20,7 +20,6 @@ static void print_num(const char *name, ulong value) printf("%-12s= 0x%0*lx\n", name, 2 * (int)sizeof(value), value); }
-__maybe_unused static void print_eth(int idx) { char name[10], *val; @@ -61,14 +60,6 @@ static void print_bi_dram(const bd_t *bd) #endif }
-static void print_eth_ip_addr(void) -{ -#if defined(CONFIG_CMD_NET) - print_eth(0); - printf("IP addr = %s\n", env_get("ipaddr")); -#endif -} - void __weak board_detail(void) { /* Please define board_detail() for your PPC platform */ @@ -90,13 +81,15 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) print_num("flashstart", (ulong)bd->bi_flashstart); print_num("flashsize", (ulong)bd->bi_flashsize); print_num("flashoffset", (ulong)bd->bi_flashoffset); - print_eth_ip_addr(); printf("baudrate = %u bps\n", gd->baudrate); print_num("relocaddr", gd->relocaddr); print_num("reloc off", gd->reloc_off); printf("%-12s= %u-bit\n", "Build", (uint)sizeof(void *) * 8); - if (IS_ENABLED(CONFIG_CMD_NET)) + if (IS_ENABLED(CONFIG_CMD_NET)) { printf("current eth = %s\n", eth_get_name()); + print_eth(0); + printf("IP addr = %s\n", env_get("ipaddr")); + } print_num("fdt_blob", (ulong)gd->fdt_blob); print_num("new_fdt", (ulong)gd->new_fdt); print_num("fdt_size", (ulong)gd->fdt_size);

At present the functions to print a number and a frequency are static. We want to move some of the code in here to an arch-specific file. For consistency that code should use these same functions. So export them with an appropriate name.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 78 +++++++++++++++++++++++++------------------------- include/init.h | 6 ++++ 2 files changed, 45 insertions(+), 39 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index e30d530411..c6096a5fd3 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -15,7 +15,7 @@
DECLARE_GLOBAL_DATA_PTR;
-static void print_num(const char *name, ulong value) +void bdinfo_print_num(const char *name, ulong value) { printf("%-12s= 0x%0*lx\n", name, 2 * (int)sizeof(value), value); } @@ -38,7 +38,7 @@ static void print_lnum(const char *name, unsigned long long value) printf("%-12s= 0x%.8llX\n", name, value); }
-static void print_mhz(const char *name, unsigned long hz) +void bdinfo_print_mhz(const char *name, unsigned long hz) { char buf[32];
@@ -52,9 +52,9 @@ static void print_bi_dram(const bd_t *bd)
for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) { if (bd->bi_dram[i].size) { - print_num("DRAM bank", i); - print_num("-> start", bd->bi_dram[i].start); - print_num("-> size", bd->bi_dram[i].size); + bdinfo_print_num("DRAM bank", i); + bdinfo_print_num("-> start", bd->bi_dram[i].start); + bdinfo_print_num("-> size", bd->bi_dram[i].size); } } #endif @@ -70,50 +70,50 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) bd_t *bd = gd->bd;
#ifdef DEBUG - print_num("bd address", (ulong)bd); + bdinfo_print_num("bd address", (ulong)bd); #endif if (IS_ENABLED(CONFIG_ARM)) - print_num("arch_number", bd->bi_arch_number); - print_num("boot_params", (ulong)bd->bi_boot_params); + bdinfo_print_num("arch_number", bd->bi_arch_number); + bdinfo_print_num("boot_params", (ulong)bd->bi_boot_params); print_bi_dram(bd); - print_num("memstart", (ulong)bd->bi_memstart); + bdinfo_print_num("memstart", (ulong)bd->bi_memstart); print_lnum("memsize", (u64)bd->bi_memsize); - print_num("flashstart", (ulong)bd->bi_flashstart); - print_num("flashsize", (ulong)bd->bi_flashsize); - print_num("flashoffset", (ulong)bd->bi_flashoffset); + bdinfo_print_num("flashstart", (ulong)bd->bi_flashstart); + bdinfo_print_num("flashsize", (ulong)bd->bi_flashsize); + bdinfo_print_num("flashoffset", (ulong)bd->bi_flashoffset); printf("baudrate = %u bps\n", gd->baudrate); - print_num("relocaddr", gd->relocaddr); - print_num("reloc off", gd->reloc_off); + bdinfo_print_num("relocaddr", gd->relocaddr); + bdinfo_print_num("reloc off", gd->reloc_off); printf("%-12s= %u-bit\n", "Build", (uint)sizeof(void *) * 8); if (IS_ENABLED(CONFIG_CMD_NET)) { printf("current eth = %s\n", eth_get_name()); print_eth(0); printf("IP addr = %s\n", env_get("ipaddr")); } - print_num("fdt_blob", (ulong)gd->fdt_blob); - print_num("new_fdt", (ulong)gd->new_fdt); - print_num("fdt_size", (ulong)gd->fdt_size); + bdinfo_print_num("fdt_blob", (ulong)gd->fdt_blob); + bdinfo_print_num("new_fdt", (ulong)gd->new_fdt); + bdinfo_print_num("fdt_size", (ulong)gd->fdt_size); #if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) || defined(CONFIG_DM_VIDEO) - print_num("FB base ", gd->fb_base); + bdinfo_print_num("FB base ", gd->fb_base); #endif
/* This section is used only by ARM */ #ifdef CONFIG_ARM #ifdef CONFIG_SYS_MEM_RESERVE_SECURE if (gd->arch.secure_ram & MEM_RESERVE_SECURE_SECURED) { - print_num("Secure ram", + bdinfo_print_num("Secure ram", gd->arch.secure_ram & MEM_RESERVE_SECURE_ADDR_MASK); } #endif #ifdef CONFIG_RESV_RAM if (gd->arch.resv_ram) - print_num("Reserved ram", gd->arch.resv_ram); + bdinfo_print_num("Reserved ram", gd->arch.resv_ram); #endif #if !(CONFIG_IS_ENABLED(SYS_ICACHE_OFF) && CONFIG_IS_ENABLED(SYS_DCACHE_OFF)) - print_num("TLB addr", gd->arch.tlb_addr); + bdinfo_print_num("TLB addr", gd->arch.tlb_addr); #endif - print_num("irq_sp", gd->irq_sp); /* irq stack pointer */ - print_num("sp start ", gd->start_addr_sp); + bdinfo_print_num("irq_sp", gd->irq_sp); /* irq stack pointer */ + bdinfo_print_num("sp start ", gd->start_addr_sp); /* * TODO: Currently only support for davinci SOC's is added. * Remove this check once all the board implement this. @@ -131,17 +131,17 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) CONFIG_VAL(SYS_MALLOC_F_LEN)); #endif #if CONFIG_IS_ENABLED(MULTI_DTB_FIT) - print_num("multi_dtb_fit", (ulong)gd->multi_dtb_fit); + bdinfo_print_num("multi_dtb_fit", (ulong)gd->multi_dtb_fit); #endif #endif /* CONFIG_ARM */
/* This section is used only by ppc */ #if defined(CONFIG_MPC8xx) || defined(CONFIG_E500) - print_num("immr_base", bd->bi_immr_base); + bdinfo_print_num("immr_base", bd->bi_immr_base); #endif if (IS_ENABLED(CONFIG_PPC)) { - print_num("bootflags", bd->bi_bootflags); - print_mhz("intfreq", bd->bi_intfreq); + bdinfo_print_num("bootflags", bd->bi_bootflags); + bdinfo_print_mhz("intfreq", bd->bi_intfreq); #ifdef CONFIG_ENABLE_36BIT_PHYS if (IS_ENABLED(CONFIG_PHYS_64BIT)) puts("addressing = 36-bit\n"); @@ -151,32 +151,32 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) board_detail(); } #if defined(CONFIG_CPM2) - print_mhz("cpmfreq", bd->bi_cpmfreq); - print_mhz("vco", bd->bi_vco); - print_mhz("sccfreq", bd->bi_sccfreq); - print_mhz("brgfreq", bd->bi_brgfreq); + bdinfo_print_mhz("cpmfreq", bd->bi_cpmfreq); + bdinfo_print_mhz("vco", bd->bi_vco); + bdinfo_print_mhz("sccfreq", bd->bi_sccfreq); + bdinfo_print_mhz("brgfreq", bd->bi_brgfreq); #endif
/* This is used by m68k and ppc */ #if defined(CONFIG_SYS_INIT_RAM_ADDR) - print_num("sramstart", (ulong)bd->bi_sramstart); - print_num("sramsize", (ulong)bd->bi_sramsize); + bdinfo_print_num("sramstart", (ulong)bd->bi_sramstart); + bdinfo_print_num("sramsize", (ulong)bd->bi_sramsize); #endif if (IS_ENABLED(CONFIG_PPC) || IS_ENABLED(CONFIG_M68K)) - print_mhz("busfreq", bd->bi_busfreq); + bdinfo_print_mhz("busfreq", bd->bi_busfreq);
/* The rest are used only by m68k */ #ifdef CONFIG_M68K #if defined(CONFIG_SYS_MBAR) print_num("mbar", bd->bi_mbar_base); #endif - print_mhz("cpufreq", bd->bi_intfreq); + bdinfo_print_mhz("cpufreq", bd->bi_intfreq); if (IS_ENABLED(CONFIG_PCI)) - print_mhz("pcifreq", bd->bi_pcifreq); + bdinfo_print_mhz("pcifreq", bd->bi_pcifreq); #ifdef CONFIG_EXTRA_CLOCK - print_mhz("flbfreq", bd->bi_flbfreq); - print_mhz("inpfreq", bd->bi_inpfreq); - print_mhz("vcofreq", bd->bi_vcofreq); + bdinfo_print_mhz("flbfreq", bd->bi_flbfreq); + bdinfo_print_mhz("inpfreq", bd->bi_inpfreq); + bdinfo_print_mhz("vcofreq", bd->bi_vcofreq); #endif #endif
diff --git a/include/init.h b/include/init.h index b5a167b6ed..af4deed566 100644 --- a/include/init.h +++ b/include/init.h @@ -261,6 +261,12 @@ void relocate_code(ulong start_addr_sp, struct global_data *new_gd, __attribute__ ((noreturn)); #endif
+/* Print a numeric value (for use in arch_print_bdinfo()) */ +void bdinfo_print_num(const char *name, ulong value); + +/* Print a clock speed in MHz */ +void bdinfo_print_mhz(const char *name, unsigned long hz); + #endif /* __ASSEMBLY__ */ /* Put only stuff here that the assembler can digest */

We don't really want to have ARM-specific code in a generic file. Create a new arch-specific function to hold it, and move it into that.
Make the function weak so that any arch can implement it.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: - Leave MULTI_DTB_FIT in the generic file as it is not really ARM-specific - Move ARM's bi_arch_number over to ARM-specific code as well
arch/arm/lib/Makefile | 1 + arch/arm/lib/bdinfo.c | 51 +++++++++++++++++++++++++++++++++++++++++++ cmd/bdinfo.c | 45 ++++++-------------------------------- include/init.h | 3 +++ 4 files changed, 62 insertions(+), 38 deletions(-) create mode 100644 arch/arm/lib/bdinfo.c
diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile index b839aa7a50..27b12e7f2b 100644 --- a/arch/arm/lib/Makefile +++ b/arch/arm/lib/Makefile @@ -43,6 +43,7 @@ obj-$(CONFIG_$(SPL_TPL_)USE_ARCH_MEMSET) += memset.o obj-$(CONFIG_$(SPL_TPL_)USE_ARCH_MEMCPY) += memcpy.o obj-$(CONFIG_SEMIHOSTING) += semihosting.o
+obj-y += bdinfo.o obj-y += sections.o obj-y += stack.o ifdef CONFIG_CPU_V7M diff --git a/arch/arm/lib/bdinfo.c b/arch/arm/lib/bdinfo.c new file mode 100644 index 0000000000..81c9291584 --- /dev/null +++ b/arch/arm/lib/bdinfo.c @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * ARM-specific information for the 'bd' command + * + * (C) Copyright 2003 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + */ + +#include <common.h> +#include <init.h> + +DECLARE_GLOBAL_DATA_PTR; + +void arch_print_bdinfo(void) +{ + bd_t *bd = gd->bd; + + bdinfo_print_num("arch_number", bd->bi_arch_number); +#ifdef CONFIG_SYS_MEM_RESERVE_SECURE + if (gd->arch.secure_ram & MEM_RESERVE_SECURE_SECURED) { + bdinfo_print_num("Secure ram", + gd->arch.secure_ram & + MEM_RESERVE_SECURE_ADDR_MASK); + } +#endif +#ifdef CONFIG_RESV_RAM + if (gd->arch.resv_ram) + bdinfo_print_num("Reserved ram", gd->arch.resv_ram); +#endif +#if !(CONFIG_IS_ENABLED(SYS_ICACHE_OFF) && CONFIG_IS_ENABLED(SYS_DCACHE_OFF)) + bdinfo_print_num("TLB addr", gd->arch.tlb_addr); +#endif + bdinfo_print_num("irq_sp", gd->irq_sp); /* irq stack pointer */ + bdinfo_print_num("sp start ", gd->start_addr_sp); + /* + * TODO: Currently only support for davinci SOC's is added. + * Remove this check once all the board implement this. + */ +#ifdef CONFIG_CLOCKS + printf("ARM frequency = %ld MHz\n", bd->bi_arm_freq); + printf("DSP frequency = %ld MHz\n", bd->bi_dsp_freq); + printf("DDR frequency = %ld MHz\n", bd->bi_ddr_freq); +#endif +#ifdef CONFIG_BOARD_TYPES + printf("Board Type = %ld\n", gd->board_type); +#endif +#if CONFIG_VAL(SYS_MALLOC_F_LEN) + printf("Early malloc usage: %lx / %x\n", gd->malloc_ptr, + CONFIG_VAL(SYS_MALLOC_F_LEN)); +#endif +} diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index c6096a5fd3..05e2da098e 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -65,6 +65,10 @@ void __weak board_detail(void) /* Please define board_detail() for your PPC platform */ }
+__weak void arch_print_bdinfo(void) +{ +} + int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { bd_t *bd = gd->bd; @@ -72,8 +76,6 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) #ifdef DEBUG bdinfo_print_num("bd address", (ulong)bd); #endif - if (IS_ENABLED(CONFIG_ARM)) - bdinfo_print_num("arch_number", bd->bi_arch_number); bdinfo_print_num("boot_params", (ulong)bd->bi_boot_params); print_bi_dram(bd); bdinfo_print_num("memstart", (ulong)bd->bi_memstart); @@ -96,44 +98,11 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) #if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) || defined(CONFIG_DM_VIDEO) bdinfo_print_num("FB base ", gd->fb_base); #endif - - /* This section is used only by ARM */ -#ifdef CONFIG_ARM -#ifdef CONFIG_SYS_MEM_RESERVE_SECURE - if (gd->arch.secure_ram & MEM_RESERVE_SECURE_SECURED) { - bdinfo_print_num("Secure ram", - gd->arch.secure_ram & MEM_RESERVE_SECURE_ADDR_MASK); - } -#endif -#ifdef CONFIG_RESV_RAM - if (gd->arch.resv_ram) - bdinfo_print_num("Reserved ram", gd->arch.resv_ram); -#endif -#if !(CONFIG_IS_ENABLED(SYS_ICACHE_OFF) && CONFIG_IS_ENABLED(SYS_DCACHE_OFF)) - bdinfo_print_num("TLB addr", gd->arch.tlb_addr); -#endif - bdinfo_print_num("irq_sp", gd->irq_sp); /* irq stack pointer */ - bdinfo_print_num("sp start ", gd->start_addr_sp); - /* - * TODO: Currently only support for davinci SOC's is added. - * Remove this check once all the board implement this. - */ -#ifdef CONFIG_CLOCKS - printf("ARM frequency = %ld MHz\n", gd->bd->bi_arm_freq); - printf("DSP frequency = %ld MHz\n", gd->bd->bi_dsp_freq); - printf("DDR frequency = %ld MHz\n", gd->bd->bi_ddr_freq); -#endif -#ifdef CONFIG_BOARD_TYPES - printf("Board Type = %ld\n", gd->board_type); -#endif -#if CONFIG_VAL(SYS_MALLOC_F_LEN) - printf("Early malloc usage: %lx / %x\n", gd->malloc_ptr, - CONFIG_VAL(SYS_MALLOC_F_LEN)); -#endif #if CONFIG_IS_ENABLED(MULTI_DTB_FIT) bdinfo_print_num("multi_dtb_fit", (ulong)gd->multi_dtb_fit); #endif -#endif /* CONFIG_ARM */ + + arch_print_bdinfo();
/* This section is used only by ppc */ #if defined(CONFIG_MPC8xx) || defined(CONFIG_E500) @@ -168,7 +137,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) /* The rest are used only by m68k */ #ifdef CONFIG_M68K #if defined(CONFIG_SYS_MBAR) - print_num("mbar", bd->bi_mbar_base); + bdinfo_print_num("mbar", bd->bi_mbar_base); #endif bdinfo_print_mhz("cpufreq", bd->bi_intfreq); if (IS_ENABLED(CONFIG_PCI)) diff --git a/include/init.h b/include/init.h index af4deed566..e727031514 100644 --- a/include/init.h +++ b/include/init.h @@ -267,6 +267,9 @@ void bdinfo_print_num(const char *name, ulong value); /* Print a clock speed in MHz */ void bdinfo_print_mhz(const char *name, unsigned long hz);
+/* Show arch-specific information for the 'bd' command */ +void arch_print_bdinfo(void); + #endif /* __ASSEMBLY__ */ /* Put only stuff here that the assembler can digest */

We don't really want to have PPC-specific code in a generic file. Create a new arch-specific function to hold it, and move it into that.
Make the function weak so that any arch can implement it.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Stefan Roese sr@denx.de ---
Changes in v2: None
arch/powerpc/lib/Makefile | 2 ++ arch/powerpc/lib/bdinfo.c | 41 +++++++++++++++++++++++++++++++++++++++ cmd/bdinfo.c | 27 -------------------------- 3 files changed, 43 insertions(+), 27 deletions(-) create mode 100644 arch/powerpc/lib/bdinfo.c
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index 01c9dd51be..f61809ab05 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile @@ -15,6 +15,8 @@ MINIMAL=y endif endif
+obj-y += bdinfo.o + ifdef MINIMAL obj-y += cache.o time.o ifndef CONFIG_TIMER diff --git a/arch/powerpc/lib/bdinfo.c b/arch/powerpc/lib/bdinfo.c new file mode 100644 index 0000000000..da09bb276f --- /dev/null +++ b/arch/powerpc/lib/bdinfo.c @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * PPC-specific information for the 'bd' command + * + * (C) Copyright 2003 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + */ + +#include <common.h> +#include <init.h> + +DECLARE_GLOBAL_DATA_PTR; + +void __weak board_detail(void) +{ + /* Please define board_detail() for your PPC platform */ +} + +void arch_print_bdinfo(void) +{ + bd_t *bd = gd->bd; + +#if defined(CONFIG_MPC8xx) || defined(CONFIG_E500) + bdinfo_print_num("immr_base", bd->bi_immr_base); +#endif + bdinfo_print_num("bootflags", bd->bi_bootflags); + bdinfo_print_mhz("intfreq", bd->bi_intfreq); +#ifdef CONFIG_ENABLE_36BIT_PHYS + if (IS_ENABLED(CONFIG_PHYS_64BIT)) + puts("addressing = 36-bit\n"); + else + puts("addressing = 32-bit\n"); +#endif + board_detail(); +#if defined(CONFIG_CPM2) + bdinfo_print_mhz("cpmfreq", bd->bi_cpmfreq); + bdinfo_print_mhz("vco", bd->bi_vco); + bdinfo_print_mhz("sccfreq", bd->bi_sccfreq); + bdinfo_print_mhz("brgfreq", bd->bi_brgfreq); +#endif +} diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 05e2da098e..97748c012e 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -60,11 +60,6 @@ static void print_bi_dram(const bd_t *bd) #endif }
-void __weak board_detail(void) -{ - /* Please define board_detail() for your PPC platform */ -} - __weak void arch_print_bdinfo(void) { } @@ -104,28 +99,6 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
arch_print_bdinfo();
- /* This section is used only by ppc */ -#if defined(CONFIG_MPC8xx) || defined(CONFIG_E500) - bdinfo_print_num("immr_base", bd->bi_immr_base); -#endif - if (IS_ENABLED(CONFIG_PPC)) { - bdinfo_print_num("bootflags", bd->bi_bootflags); - bdinfo_print_mhz("intfreq", bd->bi_intfreq); -#ifdef CONFIG_ENABLE_36BIT_PHYS - if (IS_ENABLED(CONFIG_PHYS_64BIT)) - puts("addressing = 36-bit\n"); - else - puts("addressing = 32-bit\n"); -#endif - board_detail(); - } -#if defined(CONFIG_CPM2) - bdinfo_print_mhz("cpmfreq", bd->bi_cpmfreq); - bdinfo_print_mhz("vco", bd->bi_vco); - bdinfo_print_mhz("sccfreq", bd->bi_sccfreq); - bdinfo_print_mhz("brgfreq", bd->bi_brgfreq); -#endif - /* This is used by m68k and ppc */ #if defined(CONFIG_SYS_INIT_RAM_ADDR) bdinfo_print_num("sramstart", (ulong)bd->bi_sramstart);

We don't really want to have m68k-specific code in a generic file. Create a new arch-specific function to hold it, and move it into that.
Make the function weak so that any arch can implement it.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com Tested-by: Angelo Dureghello angelo.dureghello@timesys.com ---
Changes in v2: None
arch/m68k/lib/Makefile | 1 + arch/m68k/lib/bdinfo.c | 29 +++++++++++++++++++++++++++++ cmd/bdinfo.c | 15 --------------- 3 files changed, 30 insertions(+), 15 deletions(-) create mode 100644 arch/m68k/lib/bdinfo.c
diff --git a/arch/m68k/lib/Makefile b/arch/m68k/lib/Makefile index a040f40eb8..b66d66afd2 100644 --- a/arch/m68k/lib/Makefile +++ b/arch/m68k/lib/Makefile @@ -7,6 +7,7 @@ ## if the user asked for it lib-$(CONFIG_USE_PRIVATE_LIBGCC) += lshrdi3.o muldi3.o ashldi3.o
+obj-y += bdinfo.o obj-$(CONFIG_CMD_BOOTM) += bootm.o obj-y += cache.o obj-y += interrupts.o diff --git a/arch/m68k/lib/bdinfo.c b/arch/m68k/lib/bdinfo.c new file mode 100644 index 0000000000..09a1abfc21 --- /dev/null +++ b/arch/m68k/lib/bdinfo.c @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * PPC-specific information for the 'bd' command + * + * (C) Copyright 2003 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + */ + +#include <common.h> +#include <init.h> + +DECLARE_GLOBAL_DATA_PTR; + +void arch_print_bdinfo(void) +{ + bd_t *bd = gd->bd; + +#if defined(CONFIG_SYS_MBAR) + bdinfo_print_num("mbar", bd->bi_mbar_base); +#endif + bdinfo_print_mhz("cpufreq", bd->bi_intfreq); + if (IS_ENABLED(CONFIG_PCI)) + bdinfo_print_mhz("pcifreq", bd->bi_pcifreq); +#ifdef CONFIG_EXTRA_CLOCK + bdinfo_print_mhz("flbfreq", bd->bi_flbfreq); + bdinfo_print_mhz("inpfreq", bd->bi_inpfreq); + bdinfo_print_mhz("vcofreq", bd->bi_vcofreq); +#endif +} diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index 97748c012e..b31ea66b74 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -107,21 +107,6 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) if (IS_ENABLED(CONFIG_PPC) || IS_ENABLED(CONFIG_M68K)) bdinfo_print_mhz("busfreq", bd->bi_busfreq);
- /* The rest are used only by m68k */ -#ifdef CONFIG_M68K -#if defined(CONFIG_SYS_MBAR) - bdinfo_print_num("mbar", bd->bi_mbar_base); -#endif - bdinfo_print_mhz("cpufreq", bd->bi_intfreq); - if (IS_ENABLED(CONFIG_PCI)) - bdinfo_print_mhz("pcifreq", bd->bi_pcifreq); -#ifdef CONFIG_EXTRA_CLOCK - bdinfo_print_mhz("flbfreq", bd->bi_flbfreq); - bdinfo_print_mhz("inpfreq", bd->bi_inpfreq); - bdinfo_print_mhz("vcofreq", bd->bi_vcofreq); -#endif -#endif - return 0; }

Tested-by: Angelo Dureghello angelo.dureghello@timesys.com
Environment size: 680/8188 bytes stmark2 $ bdi boot_params = 0x47d96770 DRAM bank = 0x00000000 -> start = 0x40000000 -> size = 0x08000000 memstart = 0x40000000 memsize = 0x08000000 flashstart = 0x00000000 flashsize = 0x00000000 flashoffset = 0x00000000 baudrate = 115200 bps relocaddr = 0x47dd5000 reloc off = 0xfffd4c00 Build = 32-bit fdt_blob = 0x47d90670 new_fdt = 0x47d90670 fdt_size = 0x00002860 sramstart = 0x00000000 sramsize = 0x00000000 busfreq = 120 MHz mbar = 0xfc000000 cpufreq = 240 MHz flbfreq = 60 MHz inpfreq = 30 MHz vcofreq = 480 MHz stmark2 $
On Sun, May 10, 2020 at 10:17 PM Simon Glass sjg@chromium.org wrote:
We don't really want to have m68k-specific code in a generic file. Create a new arch-specific function to hold it, and move it into that.
Make the function weak so that any arch can implement it.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com Tested-by: Angelo Dureghello angelo.dureghello@timesys.com
Changes in v2: None
arch/m68k/lib/Makefile | 1 + arch/m68k/lib/bdinfo.c | 29 +++++++++++++++++++++++++++++ cmd/bdinfo.c | 15 --------------- 3 files changed, 30 insertions(+), 15 deletions(-) create mode 100644 arch/m68k/lib/bdinfo.c
--

We don't have an easy way to share these three lines of code with two architectures. We also want to make it clear that this code is actually arch-specific.
So just duplicate it in each arch-specific file.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Stefan Roese sr@denx.de ---
Changes in v2: None
arch/m68k/lib/bdinfo.c | 5 +++++ arch/powerpc/lib/bdinfo.c | 5 +++++ cmd/bdinfo.c | 8 -------- 3 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/arch/m68k/lib/bdinfo.c b/arch/m68k/lib/bdinfo.c index 09a1abfc21..971c47c306 100644 --- a/arch/m68k/lib/bdinfo.c +++ b/arch/m68k/lib/bdinfo.c @@ -15,6 +15,11 @@ void arch_print_bdinfo(void) { bd_t *bd = gd->bd;
+#if defined(CONFIG_SYS_INIT_RAM_ADDR) + bdinfo_print_num("sramstart", (ulong)bd->bi_sramstart); + bdinfo_print_num("sramsize", (ulong)bd->bi_sramsize); +#endif + bdinfo_print_mhz("busfreq", bd->bi_busfreq); #if defined(CONFIG_SYS_MBAR) bdinfo_print_num("mbar", bd->bi_mbar_base); #endif diff --git a/arch/powerpc/lib/bdinfo.c b/arch/powerpc/lib/bdinfo.c index da09bb276f..d8c64155f0 100644 --- a/arch/powerpc/lib/bdinfo.c +++ b/arch/powerpc/lib/bdinfo.c @@ -20,6 +20,11 @@ void arch_print_bdinfo(void) { bd_t *bd = gd->bd;
+#if defined(CONFIG_SYS_INIT_RAM_ADDR) + bdinfo_print_num("sramstart", (ulong)bd->bi_sramstart); + bdinfo_print_num("sramsize", (ulong)bd->bi_sramsize); +#endif + bdinfo_print_mhz("busfreq", bd->bi_busfreq); #if defined(CONFIG_MPC8xx) || defined(CONFIG_E500) bdinfo_print_num("immr_base", bd->bi_immr_base); #endif diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index b31ea66b74..e8c800c30c 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -99,14 +99,6 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
arch_print_bdinfo();
- /* This is used by m68k and ppc */ -#if defined(CONFIG_SYS_INIT_RAM_ADDR) - bdinfo_print_num("sramstart", (ulong)bd->bi_sramstart); - bdinfo_print_num("sramsize", (ulong)bd->bi_sramsize); -#endif - if (IS_ENABLED(CONFIG_PPC) || IS_ENABLED(CONFIG_M68K)) - bdinfo_print_mhz("busfreq", bd->bi_busfreq); - return 0; }

Update the comment at the top of the file to indicate what this file does. Also drop the line at the bottom and an unnecessary header include.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
cmd/bdinfo.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/cmd/bdinfo.c b/cmd/bdinfo.c index e8c800c30c..66d78fd74d 100644 --- a/cmd/bdinfo.c +++ b/cmd/bdinfo.c @@ -1,17 +1,15 @@ // SPDX-License-Identifier: GPL-2.0+ /* + * Implements the 'bd' command to show board information + * * (C) Copyright 2003 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. */
-/* - * Boot support - */ #include <common.h> #include <command.h> #include <env.h> #include <vsprintf.h> -#include <linux/compiler.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -102,8 +100,6 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) return 0; }
-/* -------------------------------------------------------------------- */ - U_BOOT_CMD( bdinfo, 1, 1, do_bdinfo, "print Board Info structure",

Update this value with the address of a video device so that it shows with the 'bd' command.
It would be better to obtain the address from the uclass by looking in struct video_uc_platdata for each device. We can move over to that once DM_VIDEO migration is complete.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: None
drivers/video/video-uclass.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c index 3d658e61d7..e7229cefaf 100644 --- a/drivers/video/video-uclass.c +++ b/drivers/video/video-uclass.c @@ -82,6 +82,7 @@ int video_reserve(ulong *addrp) __func__, size, *addrp, dev->name); } gd->video_bottom = *addrp; + gd->fb_base = *addrp; debug("Video frame buffers from %lx to %lx\n", gd->video_bottom, gd->video_top);

Set this value in global_data so that it is reported correctly on x86 boards.
In fact, U-Boot allocates space for the frame buffer even though it is not used. Then the FSP picks the address itself (e.g. 0xb0000000). So the value set by U-Boot (high in memory with everything else that is relocated), is not actually the correct value.
Signed-off-by: Simon Glass sjg@chromium.org Reviewed-by: Bin Meng bmeng.cn@gmail.com ---
Changes in v2: - Update the commit message to explain the address more
arch/x86/lib/fsp/fsp_graphics.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/arch/x86/lib/fsp/fsp_graphics.c b/arch/x86/lib/fsp/fsp_graphics.c index 98b762209f..46fb907dc3 100644 --- a/arch/x86/lib/fsp/fsp_graphics.c +++ b/arch/x86/lib/fsp/fsp_graphics.c @@ -96,6 +96,7 @@ static int fsp_video_probe(struct udevice *dev) * For IGD, it seems to be always on BAR2. */ vesa->phys_base_ptr = dm_pci_read_bar32(dev, 2); + gd->fb_base = vesa->phys_base_ptr;
ret = vbe_setup_video_priv(vesa, uc_priv, plat); if (ret) @@ -104,8 +105,8 @@ static int fsp_video_probe(struct udevice *dev) mtrr_add_request(MTRR_TYPE_WRCOMB, vesa->phys_base_ptr, 256 << 20); mtrr_commit(true);
- printf("%dx%dx%d\n", uc_priv->xsize, uc_priv->ysize, - vesa->bits_per_pixel); + printf("%dx%dx%d @ %x\n", uc_priv->xsize, uc_priv->ysize, + vesa->bits_per_pixel, vesa->phys_base_ptr);
return 0;

On Sun, May 10, 2020 at 02:16:23PM -0600, Simon Glass wrote:
The code for the 'bd' command never got the 'generic board' treatment many years ago when global_data and bd_info were converted. As a result it still has a lot of arch-specific duplication of generic code.
This series aims to make as much code in this file generic as possible, so that it is easy to add new info on all architectures.
For the three architectures that actually need additional code (ARM, PPC and m68k) this is moved into arch-specific files.
With this series, bdinfo.c drops from nearly 500 lines to just over 100.
It also makes x86 report the frame buffer address properly (the original goal of my effort).
Changes in v2:
- Add a new patch to drop the 'bd' command for tbs2910
- Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches
- Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches
- Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches
- Fix up inadvertent merge of PowerPC/ARM/m68k/arc patches
- Drop __maybe_unused on print_lnum() too
- Move __maybe_unused on print_lnum() to the early patch
- Update commit message with an extra motivation
- Squash in the next patch to inline print_eths()
- Leave MULTI_DTB_FIT in the generic file as it is not really ARM-specific
- Move ARM's bi_arch_number over to ARM-specific code as well
- Update the commit message to explain the address more
Simon Glass (39): tbs2910: Drop the 'bd' command bdinfo: nds32: Use generic bd_info bdinfo: riscv: Use generic bd_info bdinfo: m68k: Drop bd_info->bi_ipbfreq bdinfo: xtensa: Create a generic do_bdinfo for xtensa bdinfo: mips: Use the generic bd command bdinfo: nios2: Use the generic bd command bdinfo: microblaze: Use the generic bd command bdinfo: sh: Use the generic bd command bdinfo: x86: Use the generic bd command bdinfo: sandbox: Use the generic bd command bdinfo: nds32: Use the generic bd command bdinfo: riscv: Use the generic bd command bdinfo: powerpc: Use the generic bd command bdinfo: m68k: Use the generic bd command bdinfo: arm: Use the generic bd command bdinfo: arc: Use the generic bd command bdinfo: Drop the option to not use the generic 'bd' command bdinfo: Drop unused __maybe_unused bdinfo: microblaze: sh: nios2: Drop arch-specific flash info bdinfo: Drop unnecessary inline on functions bdinfo: Drop print_std_bdinfo() bdinfo: ppc: Drop arch-specific print_baudrate() bdinfo: sh: arc: Drop arch-specific print_bi_mem() bdinfo: Drop print_bi_boot_params() bdinfo: Drop print_bi_flash() bdinfo: Drop print_cpu_word_size() bdinfo: net: ppc: Drop bi_enet1addr and other similar info bdinfo: net: ppc: Drop prints for CONFIG_HAS_ETHn bdinfo: net: Drop legacy ethernet bdinfo bdinfo: net: Inline print_eth_ip_addr() bdinfo: Export some basic printing functions bdinfo: arm: Move ARM-specific info into its own file bdinfo: ppc: Move PPC-specific info into its own file bdinfo: m68k: Move m68k-specific info into its own file bdinfo: m68k: ppc: Move arch-specific code from bdinfo bdinfo: Update the file comments bdinfo: dm: Update fb_base when using driver model bdinfo: x86: vesa: Update fb_base to the correct value
For the series, trivially updated for struct cmd_tbl and a few whitespace corrections since this was posted, applied to u-boot/next, thanks!
participants (5)
-
Alexey Brodkin
-
Angelo Dureghello
-
Bin Meng
-
Simon Glass
-
Tom Rini