[PATCH] ARM: cpuinfo: add option to print early memory map
Ahmad Fatoum
a.fatoum at pengutronix.de
Mon Jul 22 10:06:18 PDT 2024
While the iomem command is useful for visualizing the memory map, it has
some drawbacks:
- It is only usable once barebox init has reached the shell
- Not all its entries reflect the early barebox memory map
Address by teaching the cpuinfo command a new -m option that prints the
early memory map and print it by default if CONFIG_DEBUG_PBL is enabled.
Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
arch/arm/cpu/common.c | 29 +++++++++++++++++++++++++++++
arch/arm/cpu/cpuinfo.c | 12 ++++++++++--
arch/arm/cpu/uncompress.c | 4 ++++
arch/arm/include/asm/barebox-arm.h | 1 +
4 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/arch/arm/cpu/common.c b/arch/arm/cpu/common.c
index e9118b450d3f..339ef2db2534 100644
--- a/arch/arm/cpu/common.c
+++ b/arch/arm/cpu/common.c
@@ -156,3 +156,32 @@ int boot_cpu_mode(void)
{
return __boot_cpu_mode;
}
+
+void print_pbl_mem_layout(ulong membase, ulong endmem, ulong barebox_base)
+{
+ printf("endmem = 0x%08lx\n", endmem);
+ if (OPTEE_SIZE)
+ printf("arm_mem_optee = 0x%08lx+0x%08x\n", arm_mem_optee(endmem),
+ OPTEE_SIZE);
+ printf("arm_mem_scratch = 0x%08lx+0x%08lx\n",
+ arm_mem_scratch(endmem),
+ arm_mem_barebox_image_end(endmem) - arm_mem_scratch(endmem));
+ printf("arm_mem_stack = 0x%08lx+0x%08x\n",
+ arm_mem_stack(endmem), STACK_SIZE);
+ if (IS_ENABLED(CONFIG_STACK_GUARD_PAGE))
+ printf("arm_mem_guard_page = 0x%08lx+0x%08x\n",
+ arm_mem_guard_page(endmem), PAGE_SIZE);
+ printf("arm_mem_ttb = 0x%08lx+0x%08x\n",
+ arm_mem_ttb(endmem), ARM_EARLY_PAGETABLE_SIZE);
+#ifdef CONFIG_FS_PSTORE_RAMOOPS
+ printf("arm_mem_ramoops = 0x%08lx+0x%08x\n",
+ arm_mem_ramoops(endmem), CONFIG_FS_PSTORE_RAMOOPS_SIZE);
+#endif
+ printf("arm_mem_barebox_image = 0x%08lx+0x%08lx\n",
+ barebox_base, arm_mem_barebox_image_end(endmem) - barebox_base);
+ printf("arm_mem_early_malloc = 0x%08lx+0x%08x\n",
+ barebox_base - ARM_MEM_EARLY_MALLOC_SIZE, ARM_MEM_EARLY_MALLOC_SIZE);
+ printf("membase = 0x%08lx+0x%08lx\n",
+ membase, endmem - membase);
+}
+
diff --git a/arch/arm/cpu/cpuinfo.c b/arch/arm/cpu/cpuinfo.c
index ce5f0109755a..7dca57248b69 100644
--- a/arch/arm/cpu/cpuinfo.c
+++ b/arch/arm/cpu/cpuinfo.c
@@ -7,7 +7,9 @@
#include <getopt.h>
#include <command.h>
#include <complete.h>
+#include <memory.h>
#include <asm/system.h>
+#include <asm/barebox-arm.h>
#define CPU_ARCH_UNKNOWN 0
#define CPU_ARCH_ARMv3 1
@@ -54,8 +56,13 @@ static int do_cpuinfo(int argc, char *argv[])
int opt, i;
int cpu_arch;
- while ((opt = getopt(argc, argv, "s")) > 0) {
+ while ((opt = getopt(argc, argv, "sm")) > 0) {
switch (opt) {
+ case 'm':
+ print_pbl_mem_layout(arm_mem_membase_get(),
+ arm_mem_endmem_get(),
+ mem_malloc_end() + 1);
+ return 0;
case 's':
if (!IS_ENABLED(CONFIG_ARCH_HAS_STACK_DUMP))
return -ENOSYS;
@@ -277,12 +284,13 @@ static int do_cpuinfo(int argc, char *argv[])
BAREBOX_CMD_HELP_START(cpuinfo)
BAREBOX_CMD_HELP_TEXT("Shows misc info about CPU")
BAREBOX_CMD_HELP_OPT ("-s", "print call stack info (if supported)")
+BAREBOX_CMD_HELP_OPT ("-m", "print PBL memory layout")
BAREBOX_CMD_HELP_END
BAREBOX_CMD_START(cpuinfo)
.cmd = do_cpuinfo,
BAREBOX_CMD_DESC("show info about CPU")
- BAREBOX_CMD_OPTS("[-s]")
+ BAREBOX_CMD_OPTS("[-sm]")
BAREBOX_CMD_GROUP(CMD_GRP_INFO)
BAREBOX_CMD_COMPLETE(empty_complete)
BAREBOX_CMD_HELP(cmd_cpuinfo_help)
diff --git a/arch/arm/cpu/uncompress.c b/arch/arm/cpu/uncompress.c
index daacd2286698..0d9fa2c879c9 100644
--- a/arch/arm/cpu/uncompress.c
+++ b/arch/arm/cpu/uncompress.c
@@ -92,6 +92,10 @@ void __noreturn barebox_pbl_start(unsigned long membase, unsigned long memsize,
free_mem_ptr = barebox_base - ARM_MEM_EARLY_MALLOC_SIZE;
free_mem_end_ptr = barebox_base;
+#ifdef DEBUG
+ print_pbl_mem_layout(membase, memsize, barebox_base);
+#endif
+
pr_debug("uncompressing barebox binary at 0x%p (size 0x%08x) to 0x%08lx (uncompressed size: 0x%08x)\n",
pg_start, pg_len, barebox_base, uncompressed_len);
diff --git a/arch/arm/include/asm/barebox-arm.h b/arch/arm/include/asm/barebox-arm.h
index 6071c6435535..7d35e88c8123 100644
--- a/arch/arm/include/asm/barebox-arm.h
+++ b/arch/arm/include/asm/barebox-arm.h
@@ -91,6 +91,7 @@ void *barebox_arm_boot_dtb(void);
* ↓
* ------------------------ arm_mem_early_malloc ----------------------
*/
+void print_pbl_mem_layout(ulong membase, ulong endmem, ulong barebox_base);
static inline unsigned long arm_mem_optee(unsigned long endmem)
{
--
2.39.2
More information about the barebox
mailing list