X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/6942ebae59c3904674dce6b67cd07c43a3bbe00d..7e13988c1113d38bec17bd79b71757d78d977e76:/lunaix-os/tests/units/device-tree/test-fdt-mem.c diff --git a/lunaix-os/tests/units/device-tree/test-fdt-mem.c b/lunaix-os/tests/units/device-tree/test-fdt-mem.c new file mode 100644 index 0000000..1537ab0 --- /dev/null +++ b/lunaix-os/tests/units/device-tree/test-fdt-mem.c @@ -0,0 +1,95 @@ +#include "common.h" +#include + +static void +test_fdt_memory_node(ptr_t dtb) +{ + struct fdt_blob fdt; + struct fdt_memscan mscan; + struct dt_memory_node mnode; + + fdt_load(&fdt, dtb); + fdt_memscan_begin(&mscan, &fdt); + + testcase("initial-state", { + expect_int(mscan.root_addr_c, 2); + expect_int(mscan.root_size_c, 1); + }); + + testcase("memory-node-1", { + expect_true(fdt_memscan_nextnode(&mscan, &fdt)); + + expect_str(mscan.found.node->name, "memory@1000000"); + expect_true(mscan.node_type == FDT_MEM_FREE); + + expect_true(fdt_memscan_nextrange(&mscan, &mnode)); + expect_ulong(mnode.base, 0x1000000UL); + expect_ulong(mnode.size, 0x10000UL); + + expect_true(fdt_memscan_nextrange(&mscan, &mnode)); + expect_ulong(mnode.base, 0x8000000UL); + expect_ulong(mnode.size, 0x10000UL); + + expect_true(fdt_memscan_nextrange(&mscan, &mnode)); + expect_ulong(mnode.base, 0x1002000000UL); + expect_ulong(mnode.size, 0x200000UL); + + expect_false(fdt_memscan_nextrange(&mscan, &mnode)); + }); + + testcase("memory-node-2", { + expect_true(fdt_memscan_nextnode(&mscan, &fdt)); + + expect_str(mscan.found.node->name, "memory@f000000"); + expect_true(mscan.node_type == FDT_MEM_FREE); + + expect_true(fdt_memscan_nextrange(&mscan, &mnode)); + expect_ulong(mnode.base, 0xf000000UL); + expect_ulong(mnode.size, 0xff000UL); + + expect_false(fdt_memscan_nextrange(&mscan, &mnode)); + }); + + testcase("reserved-node-1", { + expect_true(fdt_memscan_nextnode(&mscan, &fdt)); + + expect_str(mscan.found.node->name, "hwrom@0"); + expect_true(mscan.node_type == FDT_MEM_RSVD); + expect_true(mscan.node_attr.nomap); + + expect_true(fdt_memscan_nextrange(&mscan, &mnode)); + expect_ulong(mnode.base, 0x0); + expect_ulong(mnode.size, 0x1000000); + + expect_false(fdt_memscan_nextrange(&mscan, &mnode)); + }); + + testcase("reserved-node-2", { + expect_true(fdt_memscan_nextnode(&mscan, &fdt)); + + expect_str(mscan.found.node->name, "cma"); + expect_true(mscan.node_type == FDT_MEM_RSVD_DYNAMIC); + expect_true(mscan.node_attr.reusable); + expect_false(mscan.node_attr.nomap); + expect_ulong(mscan.node_attr.alignment, 0x400000); + expect_ulong(mscan.node_attr.total_size, 0x10000000); + + expect_true(fdt_memscan_nextrange(&mscan, &mnode)); + expect_ulong(mnode.base, 0x10000000); + expect_ulong(mnode.size, 0x10000000); + + expect_false(fdt_memscan_nextrange(&mscan, &mnode)); + }); + + testcase("reserved-node-out-of-bound", { + expect_false(fdt_memscan_nextnode(&mscan, &fdt)); + }); +} + +void +run_test(int argc, const char* argv[]) +{ + ptr_t dtb = load_fdt(); + + test_fdt_memory_node(dtb); +} \ No newline at end of file