Make verbose DRAM layout print on boot configurable via newly introduced
CONFIG_DISPLAY_DRAM_CONFIG_VERBOSE Kconfig option. This reuses existing
DRAM layout debug print, but with additional rework to place the output
at the end of DRAM size listing, print both bank start and end addresses,
and skip empty banks. In case DEBUG is defined, the DRAM layout print is
triggered unconditionally.

The original debug print looked as follows, which puts the layout print
between DRAM: size announcement (1) and duplicate DRAM: size print (2),
does not skip empty banks (3), and does not print DRAM bank end (4).

"
Model: Renesas Ironhide board based on r8a78000
DRAM:  <----------------------------------------------------------- (1)
RAM Configuration:
Bank #0: 1080000000 2 GiB
Bank #1: 1200000000 4 GiB <---------------------------------------- (4)
...
Bank #8: 40000000 2 GiB
Bank #9: 0 0 Bytes <----------------------------------------------- (3)
...
Bank #15: 0 0 Bytes

DRAM:  2 GiB (total 32 GiB) <-------------------------------------- (2)
Core:  68 devices, 26 uclasses, devicetree: separate
"

The new debug print and optionally verbose print looks as follows, the
duplicate DRAM: prefix is removed (1), the layout is printed after the
DRAM size print (3), the DRAM end address is printed (3) and there are
no more empty banks printed (4):

"
Model: Renesas Ironhide board based on r8a78000
DRAM:  2 GiB (total 32 GiB) <-------------------------------------- (1)
RAM Configuration: <----------------------------------------------- (2)
Bank #0: 0x1080000000 - 0x10ffffffff, 2 GiB <---------------------- (4)
Bank #1: 0x1200000000 - 0x12ffffffff, 4 GiB
Bank #2: 0x1400000000 - 0x14ffffffff, 4 GiB
Bank #3: 0x1600000000 - 0x16ffffffff, 4 GiB
Bank #4: 0x1800000000 - 0x18ffffffff, 4 GiB
Bank #5: 0x1a00000000 - 0x1affffffff, 4 GiB
Bank #6: 0x1c00000000 - 0x1cffffffff, 4 GiB
Bank #7: 0x1e00000000 - 0x1effffffff, 4 GiB
Bank #8: 0x40000000 - 0xbfffffff, 2 GiB <-------------------------- (3)
Core:  68 devices, 26 uclasses, devicetree: separate
"

Signed-off-by: Marek Vasut <[email protected]>
---
Cc: Aristo Chen <[email protected]>
Cc: Ilias Apalodimas <[email protected]>
Cc: Johan Jonker <[email protected]>
Cc: Nobuhiro Iwamatsu <[email protected]>
Cc: Peng Fan <[email protected]>
Cc: Quentin Schulz <[email protected]>
Cc: Simon Glass <[email protected]>
Cc: Tom Rini <[email protected]>
Cc: [email protected]
---
 common/Kconfig   |  6 ++++++
 common/board_f.c | 33 ++++++++++++++++++++++++---------
 2 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/common/Kconfig b/common/Kconfig
index 345be4b8ca1..869493c979d 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -615,6 +615,12 @@ config DISPLAY_BOARDINFO_LATE
          the relocation phase. The board function checkboard() is called to do
          this.
 
+config DISPLAY_DRAM_CONFIG_VERBOSE
+       bool "Display additional information about DRAM layout"
+       help
+         Display additional information about the board DRAM layout, including
+         each bank start address, end address and size.
+
 menu "Start-up hooks"
 
 config CYCLIC
diff --git a/common/board_f.c b/common/board_f.c
index 9efcd9499a9..f886774e82b 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -217,21 +217,34 @@ static int sizes_near(unsigned long long size1, unsigned 
long long size2)
        return size1_scale == size2_scale && size1_val == size2_val;
 }
 
+static void show_dram_config_verbose(void)
+{
+       int i;
+
+#ifndef DEBUG
+       if (!CONFIG_IS_ENABLED(DISPLAY_DRAM_CONFIG_VERBOSE))
+               return;
+#endif
+
+       printf("RAM Configuration:\n");
+       for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
+               if (!gd->dram[i].size)
+                       break;
+
+               printf("Bank #%d: 0x%llx - 0x%llx, ", i,
+                      (unsigned long long)(gd->dram[i].start),
+                      (unsigned long long)(gd->dram[i].start + 
gd->dram[i].size - 1));
+               print_size(gd->dram[i].size, "\n");
+       }
+}
+
 static int show_dram_config(void)
 {
        unsigned long long size;
        int i;
 
-       debug("\nRAM Configuration:\n");
-       for (i = size = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
+       for (i = size = 0; i < CONFIG_NR_DRAM_BANKS; i++)
                size += gd->dram[i].size;
-               debug("Bank #%d: %llx ", i,
-                     (unsigned long long)(gd->dram[i].start));
-#ifdef DEBUG
-               print_size(gd->dram[i].size, "\n");
-#endif
-       }
-       debug("\nDRAM:  ");
 
        print_size(gd->ram_size, "");
        if (!sizes_near(gd->ram_size, size)) {
@@ -241,6 +254,8 @@ static int show_dram_config(void)
        board_add_ram_info(0);
        putc('\n');
 
+       show_dram_config_verbose();
+
        return 0;
 }
 
-- 
2.53.0

Reply via email to