"Das U-Boot" Source Tree
at master 99 lines 2.8 kB view raw
1// SPDX-License-Identifier: GPL-2.0+ 2/* 3 * Copyright 2024 Google LLC 4 * Written by Simon Glass <sjg@chromium.org> 5 */ 6 7#include <bloblist.h> 8#include <bootstage.h> 9#include <command.h> 10#include <display_options.h> 11#include <lmb.h> 12#include <malloc.h> 13#include <mapmem.h> 14#include <asm/global_data.h> 15 16DECLARE_GLOBAL_DATA_PTR; 17 18static void print_region(const char *name, ulong base, ulong size, ulong *uptop) 19{ 20 ulong end = base + size; 21 22 printf("%-12s %8lx %8lx %8lx", name, base, size, end); 23 if (*uptop) 24 printf(" %8lx", *uptop - end); 25 putc('\n'); 26 *uptop = base; 27} 28 29static void show_lmb(const struct lmb *lmb, ulong *uptop) 30{ 31 int i; 32 33 for (i = lmb->used_mem.count - 1; i >= 0; i--) { 34 const struct lmb_region *rgn = alist_get(&lmb->used_mem, i, 35 struct lmb_region); 36 37 /* 38 * Assume that the top lmb region is the U-Boot region, so just 39 * take account of the memory not already reported 40 */ 41 if (lmb->used_mem.count - 1) 42 print_region("lmb", rgn->base, *uptop - rgn->base, 43 uptop); 44 else 45 print_region("lmb", rgn->base, rgn->size, uptop); 46 *uptop = rgn->base; 47 } 48} 49 50static int do_meminfo(struct cmd_tbl *cmdtp, int flag, int argc, 51 char *const argv[]) 52{ 53 ulong upto, stk_bot; 54 55 puts("DRAM: "); 56 print_size(gd->ram_size, "\n"); 57 58 if (!IS_ENABLED(CONFIG_CMD_MEMINFO_MAP)) 59 return 0; 60 61 printf("\n%-12s %8s %8s %8s %8s\n", "Region", "Base", "Size", "End", 62 "Gap"); 63 printf("------------------------------------------------\n"); 64 upto = 0; 65 if (IS_ENABLED(CONFIG_VIDEO)) 66 print_region("video", gd_video_bottom(), 67 gd_video_size(), &upto); 68 if (IS_ENABLED(CONFIG_TRACE)) 69 print_region("trace", map_to_sysmem(gd_trace_buff()), 70 gd_trace_size(), &upto); 71 print_region("code", gd->relocaddr, gd->mon_len, &upto); 72 print_region("malloc", map_to_sysmem((void *)mem_malloc_start), 73 mem_malloc_end - mem_malloc_start, &upto); 74 print_region("board_info", map_to_sysmem(gd->bd), 75 sizeof(struct bd_info), &upto); 76 print_region("global_data", map_to_sysmem((void *)gd), 77 sizeof(struct global_data), &upto); 78 print_region("devicetree", map_to_sysmem(gd->fdt_blob), 79 fdt_totalsize(gd->fdt_blob), &upto); 80 if (IS_ENABLED(CONFIG_BOOTSTAGE)) 81 print_region("bootstage", map_to_sysmem(gd_bootstage()), 82 bootstage_get_size(false), &upto); 83 if (IS_ENABLED(CONFIG_BLOBLIST)) 84 print_region("bloblist", map_to_sysmem(gd_bloblist()), 85 bloblist_get_total_size(), &upto); 86 stk_bot = gd->start_addr_sp - CONFIG_STACK_SIZE; 87 print_region("stack", stk_bot, CONFIG_STACK_SIZE, &upto); 88 if (IS_ENABLED(CONFIG_LMB)) 89 show_lmb(lmb_get(), &upto); 90 print_region("free", gd->ram_base, upto, &upto); 91 92 return 0; 93} 94 95U_BOOT_CMD( 96 meminfo, 1, 1, do_meminfo, 97 "display memory information", 98 "" 99);