]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
sandbox: Add a way to show the sandbox memory-mapping
authorSimon Glass <sjg@chromium.org>
Mon, 28 Oct 2024 12:47:57 +0000 (13:47 +0100)
committerTom Rini <trini@konsulko.com>
Mon, 4 Nov 2024 03:27:12 +0000 (21:27 -0600)
This is mostly hidden in the background, but it is sometimes useful to
look at it. Add a function to allow this.

Signed-off-by: Simon Glass <sjg@chromium.org>
arch/sandbox/cpu/cpu.c
arch/sandbox/include/asm/cpu.h
cmd/sb.c
doc/usage/cmd/sb.rst

index 06f8c13fab9b53f5fbba3b353e75517c9660ee4b..d1c4dcf0764fb37ec99585a3db16fa34c3a54dac 100644 (file)
@@ -253,6 +253,19 @@ phys_addr_t map_to_sysmem(const void *ptr)
        return mentry->tag;
 }
 
+void sandbox_map_list(void)
+{
+       struct sandbox_mapmem_entry *mentry;
+       struct sandbox_state *state = state_get_current();
+
+       printf("Sandbox memory-mapping\n");
+       printf("%8s  %16s  %6s\n", "Addr", "Mapping", "Refcnt");
+       list_for_each_entry(mentry, &state->mapmem_head, sibling_node) {
+               printf("%8lx  %p  %6d\n", mentry->tag, mentry->ptr,
+                      mentry->refcnt);
+       }
+}
+
 unsigned long sandbox_read(const void *addr, enum sandboxio_size_t size)
 {
        struct sandbox_state *state = state_get_current();
index c97ac7ba95bce3b98da07a26736629a634d999f6..682bb3376d181b7dc540c5cb9c7b723d50e34f9d 100644 (file)
@@ -8,4 +8,7 @@
 
 void cpu_sandbox_set_current(const char *name);
 
+/* show the mapping of sandbox addresses to pointers */
+void sandbox_map_list(void);
+
 #endif /* __SANDBOX_CPU_H */
index 9dbb53275b3b4a2bf17f63c68a7ffeb4cfde5c42..9245052492e2debf1c0f94debeb8851d653d3a3c 100644 (file)
--- a/cmd/sb.c
+++ b/cmd/sb.c
@@ -7,6 +7,7 @@
 #include <command.h>
 #include <dm.h>
 #include <spl.h>
+#include <asm/cpu.h>
 #include <asm/global_data.h>
 #include <asm/state.h>
 
@@ -29,6 +30,14 @@ static int do_sb_handoff(struct cmd_tbl *cmdtp, int flag, int argc,
 #endif
 }
 
+static int do_sb_map(struct cmd_tbl *cmdtp, int flag, int argc,
+                    char *const argv[])
+{
+       sandbox_map_list();
+
+       return 0;
+}
+
 static int do_sb_state(struct cmd_tbl *cmdtp, int flag, int argc,
                       char *const argv[])
 {
@@ -42,8 +51,10 @@ static int do_sb_state(struct cmd_tbl *cmdtp, int flag, int argc,
 
 U_BOOT_LONGHELP(sb,
        "handoff     - Show handoff data received from SPL\n"
+       "sb map         - Show mapped memory\n"
        "sb state       - Show sandbox state");
 
 U_BOOT_CMD_WITH_SUBCMDS(sb, "Sandbox status commands", sb_help_text,
        U_BOOT_SUBCMD_MKENT(handoff, 1, 1, do_sb_handoff),
+       U_BOOT_SUBCMD_MKENT(map, 1, 1, do_sb_map),
        U_BOOT_SUBCMD_MKENT(state, 1, 1, do_sb_state));
index 6f54f9d9eb740135e8c5c1108081481c9c7dd234..37431aff7c852e0cd56fe9ae559828ee53dc9381 100644 (file)
@@ -12,6 +12,7 @@ Synopsis
 ::
 
     sb handoff
+    sb map
     sb state
 
 Description
@@ -26,6 +27,24 @@ sb handoff
 This shows information about any handoff information received from SPL. If
 U-Boot is started from an SPL build, it shows a valid magic number.
 
+sb map
+~~~~~~
+
+This shows any mappings between sandbox's emulated RAM and the underlying host
+address-space.
+
+Fields shown are:
+
+Addr
+    Address in emulated RAM
+
+Mapping
+    Equivalent address in the host address-space. While sandbox requests address
+    ``0x10000000`` from the OS, this is not always available.
+
+Refcnt
+    Shows the number of references to this mapping.
+
 sb state
 ~~~~~~~~
 
@@ -42,6 +61,12 @@ as ``sandbox_spl``::
     => sb handoff
     SPL handoff magic 14f93c7b
 
+This shows output from the *sb map* subcommand, with a single mapping::
+
+    Sandbox memory-mapping
+        Addr           Mapping  Refcnt
+    ff000000  000056185b46d6d0       2
+
 This shows output from the *sb state* subcommand::
 
     => sb state