[PATCH 6/9] test: cmd/fdt: do not use fixed buffer addresses
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Fri Nov 14 15:29:51 CET 2025
On 11/14/25 13:31, Simon Glass wrote:
> Hi Heinrich,
>
> On Sun, 9 Nov 2025 at 03:10, Heinrich Schuchardt
> <heinrich.schuchardt at canonical.com> 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 <heinrich.schuchardt at canonical.com>
>> ---
>> 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
More information about the U-Boot
mailing list