On 11/14/25 13:31, Simon Glass wrote:
Hi Heinrich,

On Sun, 9 Nov 2025 at 03:10, Heinrich Schuchardt
<[email protected]> wrote:

The location of memory depends on the board. Do not assume memory at fixed
memory locations. Use memalign() instead to allocate a buffer.

Signed-off-by: Heinrich Schuchardt <[email protected]>
---
  test/cmd/fdt.c      |  8 ++++++--
  test/common/print.c | 37 ++++++++++++++++---------------------
  2 files changed, 22 insertions(+), 23 deletions(-)

diff --git a/test/cmd/fdt.c b/test/cmd/fdt.c
index b950123b6da..4c3c6308ab4 100644
--- a/test/cmd/fdt.c
+++ b/test/cmd/fdt.c
@@ -265,7 +265,7 @@ FDT_TEST(fdt_test_addr_resize, UTF_CONSOLE);
  static int fdt_test_move(struct unit_test_state *uts)
  {
         char fdt[256];
-       ulong addr, newaddr = 0x10000;
+       ulong addr, newaddr;
         const int size = sizeof(fdt);
         uint32_t ts;
         void *buf;
@@ -275,8 +275,10 @@ static int fdt_test_move(struct unit_test_state *uts)
         ts = fdt_totalsize(fdt);

         /* Moved target DT location */
-       buf = map_sysmem(newaddr, size);
+       buf = memalign(8, size);
+       ut_assertnonnull(buf);
         memset(buf, 0, size);
+       newaddr = map_to_sysmem(buf);

         /* Test moving the working FDT to a new location */
         ut_assertok(run_commandf("fdt move %08lx %08lx %x", addr, newaddr, 
ts));
@@ -288,6 +290,8 @@ static int fdt_test_move(struct unit_test_state *uts)
         ut_assert_nextline("Total of %d byte(s) were the same", ts);
         ut_assert_console_end();

+       free(buf);
+
         return 0;
  }
  FDT_TEST(fdt_test_move, UTF_CONSOLE);
diff --git a/test/common/print.c b/test/common/print.c
index 2ac7eeed2c1..f33476a36b4 100644
--- a/test/common/print.c
+++ b/test/common/print.c
@@ -266,74 +266,70 @@ static int print_do_hex_dump(struct unit_test_state *uts)
  {
         u8 *buf;
         int i;
+       ulong addr;

         buf = calloc(1, BUF_SIZE);
         ut_assertnonnull(buf);
+       addr = map_to_sysmem(buf);
         for (i = 0; i < 0x11; i++)
                 buf[i] = i * 0x11;

         /* bytes */
         print_hex_dump_bytes("", DUMP_PREFIX_ADDRESS, buf, 0x12);
         ut_assert_nextline("%0*lx: 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff  
..\"3DUfw........",
-                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf);
+                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
         ut_assert_nextline("%0*lx: 10 00                                            
..",
                            IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf + 0x10UL);
+                          addr + 0x10UL);
         ut_assert_console_end();

         /* line length */
         print_hex_dump("", DUMP_PREFIX_ADDRESS, 8, 1, buf, 0x12, true);
         ut_assert_nextline("%0*lx: 00 11 22 33 44 55 66 77  ..\"3DUfw",
-                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf);
+                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
         ut_assert_nextline("%0*lx: 88 99 aa bb cc dd ee ff  ........",
                            IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf + 0x8UL);
+                          addr + 0x8UL);
         ut_assert_nextline("%0*lx: 10 00                    ..",
                            IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf + 0x10UL);
+                          addr + 0x10UL);
         ut_assert_console_end();

         /* long line */
         buf[0x41] = 0x41;
         print_hex_dump("", DUMP_PREFIX_ADDRESS, 0x40, 1, buf, 0x42, true);
         ut_assert_nextline("%0*lx: 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 10 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  
..\"3DUfw........................................................",
-                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf);
+                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
         ut_assert_nextline("%0*lx: 00 41                                            
                                                                                          
                                                      .A",
                            IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf + 0x40UL);
+                          addr + 0x40UL);
         ut_assert_console_end();

         /* 16-bit */
         print_hex_dump("", DUMP_PREFIX_ADDRESS, 0, 2, buf, 0x12, true);
         ut_assert_nextline("%0*lx: 1100 3322 5544 7766 9988 bbaa ddcc ffee  
..\"3DUfw........",
-                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf);
+                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
         ut_assert_nextline("%0*lx: 0010                                     
..",
                            IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf + 0x10UL);
+                          addr + 0x10UL);
         ut_assert_console_end();

         /* 32-bit */
         print_hex_dump("", DUMP_PREFIX_ADDRESS, 0, 4, buf, 0x14, true);
         ut_assert_nextline("%0*lx: 33221100 77665544 bbaa9988 ffeeddcc  
..\"3DUfw........",
-                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf);
+                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
         ut_assert_nextline("%0*lx: 00000010                             ....",
                            IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf + 0x10UL);
+                          addr + 0x10UL);
         ut_assert_console_end();

         /* 64-bit */
         print_hex_dump("", DUMP_PREFIX_ADDRESS, 16, 8, buf, 0x18, true);
         ut_assert_nextline("%0*lx: 7766554433221100 ffeeddccbbaa9988  
..\"3DUfw........",
-                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf);
+                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
         ut_assert_nextline("%0*lx: 0000000000000010                   
........",
                            IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf + 0x10UL);
+                          addr + 0x10UL);
         ut_assert_console_end();

         /* ASCII */
@@ -345,8 +341,7 @@ static int print_do_hex_dump(struct unit_test_state *uts)
         buf[8] = 255;
         print_hex_dump("", DUMP_PREFIX_ADDRESS, 0, 1, buf, 10, true);
         ut_assert_nextline("%0*lx: 00 1f 20 21 7e 7f 80 81 ff 99                    
.. !~.....",
-                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
-                          (uintptr_t)buf);
+                          IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
         ut_assert_console_end();
         free(buf);

--
2.51.0


This is adding memory allocations to a test for hex dumping.

It would be better and simpler to use a fixed address and make this a
sandbox-only test. I struggle to see the value of running these sorts
of tests under QEMU?

I cannot see any added value in restricting a test such that it can only be run on the sandbox.

My expectation is that tests should be executable on any platform be it a physical board or a virtual machine. There are few use cases for the sandbox in real life.

Best regards

Heinrich

Reply via email to