Unifying External Interrupt System (#51)
[lunaix-os.git] / lunaix-os / tests / units / device-tree / test-fdt-mem.c
1 #include "common.h"
2 #include <testing/basic.h>
3
4 static void
5 test_fdt_memory_node(ptr_t dtb)
6 {
7     struct fdt_blob fdt;
8     struct fdt_memscan mscan;
9     struct dt_memory_node mnode;
10
11     fdt_load(&fdt, dtb);
12     fdt_memscan_begin(&mscan, &fdt);
13
14     testcase("initial-state", {
15         expect_int(mscan.root_addr_c, 2);
16         expect_int(mscan.root_size_c, 1);
17     });
18
19     testcase("memory-node-1", {
20         expect_true(fdt_memscan_nextnode(&mscan, &fdt));
21
22         expect_str(mscan.found.node->name, "memory@1000000");
23         expect_true(mscan.node_type == FDT_MEM_FREE);
24
25         expect_true(fdt_memscan_nextrange(&mscan, &mnode));
26         expect_ulong(mnode.base, 0x1000000UL);
27         expect_ulong(mnode.size, 0x10000UL);
28
29         expect_true(fdt_memscan_nextrange(&mscan, &mnode));
30         expect_ulong(mnode.base, 0x8000000UL);
31         expect_ulong(mnode.size, 0x10000UL);
32
33         expect_true(fdt_memscan_nextrange(&mscan, &mnode));
34         expect_ulong(mnode.base, 0x1002000000UL);
35         expect_ulong(mnode.size, 0x200000UL);
36
37         expect_false(fdt_memscan_nextrange(&mscan, &mnode));
38     });
39
40     testcase("memory-node-2", {
41         expect_true(fdt_memscan_nextnode(&mscan, &fdt));
42
43         expect_str(mscan.found.node->name, "memory@f000000");
44         expect_true(mscan.node_type == FDT_MEM_FREE);
45
46         expect_true(fdt_memscan_nextrange(&mscan, &mnode));
47         expect_ulong(mnode.base, 0xf000000UL);
48         expect_ulong(mnode.size, 0xff000UL);
49
50         expect_false(fdt_memscan_nextrange(&mscan, &mnode));
51     });
52
53     testcase("reserved-node-1", {
54         expect_true(fdt_memscan_nextnode(&mscan, &fdt));
55
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);
59
60         expect_true(fdt_memscan_nextrange(&mscan, &mnode));
61         expect_ulong(mnode.base, 0x0);
62         expect_ulong(mnode.size, 0x1000000);
63
64         expect_false(fdt_memscan_nextrange(&mscan, &mnode));
65     });
66
67     testcase("reserved-node-2", {
68         expect_true(fdt_memscan_nextnode(&mscan, &fdt));
69
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);
76
77         expect_true(fdt_memscan_nextrange(&mscan, &mnode));
78         expect_ulong(mnode.base, 0x10000000);
79         expect_ulong(mnode.size, 0x10000000);
80
81         expect_false(fdt_memscan_nextrange(&mscan, &mnode));
82     });
83
84     testcase("reserved-node-out-of-bound", {
85         expect_false(fdt_memscan_nextnode(&mscan, &fdt));
86     });
87 }
88
89 void
90 run_test(int argc, const char* argv[])
91 {
92     ptr_t dtb = load_fdt();
93
94     test_fdt_memory_node(dtb);
95 }