]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
meminfo: Show the lmb records
authorSimon Glass <sjg@chromium.org>
Mon, 21 Oct 2024 08:19:32 +0000 (10:19 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 25 Oct 2024 20:22:24 +0000 (14:22 -0600)
Add the lmb records onto the end of the memory map.

Signed-off-by: Simon Glass <sjg@chromium.org>
cmd/meminfo.c
test/cmd/meminfo.c

index 0e6d2f9cc2c61a9d8adc6ee74e45b0cb4d1d504c..5e83d61c2dd3d10e4c6e2446a7c1bd6e32c31191 100644 (file)
@@ -8,6 +8,7 @@
 #include <bootstage.h>
 #include <command.h>
 #include <display_options.h>
+#include <lmb.h>
 #include <malloc.h>
 #include <mapmem.h>
 #include <asm/global_data.h>
@@ -25,6 +26,27 @@ static void print_region(const char *name, ulong base, ulong size, ulong *uptop)
        *uptop = base;
 }
 
+static void show_lmb(const struct lmb *lmb, ulong *uptop)
+{
+       int i;
+
+       for (i = lmb->used_mem.count - 1; i >= 0; i--) {
+               const struct lmb_region *rgn = alist_get(&lmb->used_mem, i,
+                                                        struct lmb_region);
+
+               /*
+                * Assume that the top lmb region is the U-Boot region, so just
+                * take account of the memory not already reported
+                */
+               if (lmb->used_mem.count - 1)
+                       print_region("lmb", rgn->base, *uptop - rgn->base,
+                                    uptop);
+               else
+                       print_region("lmb", rgn->base, rgn->size, uptop);
+               *uptop = rgn->base;
+       }
+}
+
 static int do_meminfo(struct cmd_tbl *cmdtp, int flag, int argc,
                      char *const argv[])
 {
@@ -63,7 +85,9 @@ static int do_meminfo(struct cmd_tbl *cmdtp, int flag, int argc,
                             bloblist_get_total_size(), &upto);
        stk_bot = gd->start_addr_sp - CONFIG_STACK_SIZE;
        print_region("stack", stk_bot, CONFIG_STACK_SIZE, &upto);
-       print_region("free", gd->ram_base, stk_bot, &upto);
+       if (IS_ENABLED(CONFIG_LMB))
+               show_lmb(lmb_get(), &upto);
+       print_region("free", gd->ram_base, upto, &upto);
 
        return 0;
 }
index 84981305bf09849e3d5f8f133f38ce033c871bc7..53b41e3b49e01c308ae2338c906496f162dc7a27 100644 (file)
@@ -30,7 +30,11 @@ static int cmd_test_meminfo(struct unit_test_state *uts)
        ut_assert_nextlinen("bootstage");
        ut_assert_nextlinen("bloblist");
        ut_assert_nextlinen("stack");
-       ut_assert_nextlinen("free");
+
+       /* we expect at least one lmb line, but don't know how many */
+       ut_assert_nextlinen("lmb");
+       ut_assert_skip_to_linen("free");
+
        ut_assert_console_end();
 
        return 0;