2 #include <testing/basic.h>
5 test_fdt_memory_node(ptr_t dtb)
8 struct fdt_memscan mscan;
9 struct dt_memory_node mnode;
12 fdt_memscan_begin(&mscan, &fdt);
14 testcase("initial-state", {
15 expect_int(mscan.root_addr_c, 2);
16 expect_int(mscan.root_size_c, 1);
19 testcase("memory-node-1", {
20 expect_true(fdt_memscan_nextnode(&mscan, &fdt));
22 expect_str(mscan.found.node->name, "memory@1000000");
23 expect_true(mscan.node_type == FDT_MEM_FREE);
25 expect_true(fdt_memscan_nextrange(&mscan, &mnode));
26 expect_ulong(mnode.base, 0x1000000UL);
27 expect_ulong(mnode.size, 0x10000UL);
29 expect_true(fdt_memscan_nextrange(&mscan, &mnode));
30 expect_ulong(mnode.base, 0x8000000UL);
31 expect_ulong(mnode.size, 0x10000UL);
33 expect_true(fdt_memscan_nextrange(&mscan, &mnode));
34 expect_ulong(mnode.base, 0x1002000000UL);
35 expect_ulong(mnode.size, 0x200000UL);
37 expect_false(fdt_memscan_nextrange(&mscan, &mnode));
40 testcase("memory-node-2", {
41 expect_true(fdt_memscan_nextnode(&mscan, &fdt));
43 expect_str(mscan.found.node->name, "memory@f000000");
44 expect_true(mscan.node_type == FDT_MEM_FREE);
46 expect_true(fdt_memscan_nextrange(&mscan, &mnode));
47 expect_ulong(mnode.base, 0xf000000UL);
48 expect_ulong(mnode.size, 0xff000UL);
50 expect_false(fdt_memscan_nextrange(&mscan, &mnode));
53 testcase("reserved-node-1", {
54 expect_true(fdt_memscan_nextnode(&mscan, &fdt));
56 expect_str(mscan.found.node->name, "hwrom@0");
57 expect_true(mscan.node_type == FDT_MEM_RSVD);
58 expect_true(mscan.node_attr.nomap);
60 expect_true(fdt_memscan_nextrange(&mscan, &mnode));
61 expect_ulong(mnode.base, 0x0);
62 expect_ulong(mnode.size, 0x1000000);
64 expect_false(fdt_memscan_nextrange(&mscan, &mnode));
67 testcase("reserved-node-2", {
68 expect_true(fdt_memscan_nextnode(&mscan, &fdt));
70 expect_str(mscan.found.node->name, "cma");
71 expect_true(mscan.node_type == FDT_MEM_RSVD_DYNAMIC);
72 expect_true(mscan.node_attr.reusable);
73 expect_false(mscan.node_attr.nomap);
74 expect_ulong(mscan.node_attr.alignment, 0x400000);
75 expect_ulong(mscan.node_attr.total_size, 0x10000000);
77 expect_true(fdt_memscan_nextrange(&mscan, &mnode));
78 expect_ulong(mnode.base, 0x10000000);
79 expect_ulong(mnode.size, 0x10000000);
81 expect_false(fdt_memscan_nextrange(&mscan, &mnode));
84 testcase("reserved-node-out-of-bound", {
85 expect_false(fdt_memscan_nextnode(&mscan, &fdt));
90 run_test(int argc, const char* argv[])
92 ptr_t dtb = load_fdt();
94 test_fdt_memory_node(dtb);