1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 /*
3 * libfdt - Flat Device Tree manipulation
4 * Testcase for fdt_nop_node()
5 * Copyright (C) 2006 David Gibson, IBM Corporation.
6 */
7
8 #include <stdlib.h>
9 #include <stdio.h>
10 #include <string.h>
11 #include <ctype.h>
12 #include <stdint.h>
13
14 #include <libfdt.h>
15
16 #include "tests.h"
17 #include "testdata.h"
18
19 #define SPACE 65536
20
21 #define CHECK(code) \
22 { \
23 err = (code); \
24 if (err) \
25 FAIL(#code ": %s", fdt_strerror(err)); \
26 }
27
28 #define OFF_CHECK(off, code) \
29 { \
30 (off) = (code); \
31 if (off < 0) \
32 FAIL(#code ": %s", fdt_strerror(off)); \
33 }
34
main(int argc,char * argv[])35 int main(int argc, char *argv[])
36 {
37 void *fdt;
38 int err;
39 int offset, s1, s2;
40
41 test_init(argc, argv);
42
43 fdt = xmalloc(SPACE);
44
45 /* First create empty tree with SW */
46 CHECK(fdt_create_empty_tree(fdt, SPACE));
47
48 CHECK(fdt_add_mem_rsv(fdt, TEST_ADDR_1, TEST_SIZE_1));
49 CHECK(fdt_add_mem_rsv(fdt, TEST_ADDR_2, TEST_SIZE_2));
50
51 CHECK(fdt_setprop_string(fdt, 0, "compatible", "test_tree1"));
52 CHECK(fdt_setprop_u32(fdt, 0, "prop-int", TEST_VALUE_1));
53 CHECK(fdt_setprop_u64(fdt, 0, "prop-int64", TEST_VALUE64_1));
54 CHECK(fdt_setprop_string(fdt, 0, "prop-str", TEST_STRING_1));
55
56 OFF_CHECK(offset, fdt_add_subnode(fdt, 0, "subnode@1"));
57 s1 = offset;
58 CHECK(fdt_setprop_string(fdt, s1, "compatible", "subnode1"));
59 CHECK(fdt_setprop_cell(fdt, s1, "prop-int", TEST_VALUE_1));
60 OFF_CHECK(offset, fdt_add_subnode(fdt, s1, "subsubnode"));
61 CHECK(fdt_setprop(fdt, offset, "compatible",
62 "subsubnode1\0subsubnode", 23));
63 CHECK(fdt_setprop_cell(fdt, offset, "prop-int", TEST_VALUE_1));
64 OFF_CHECK(offset, fdt_add_subnode(fdt, s1, "ss1"));
65
66 OFF_CHECK(offset, fdt_add_subnode(fdt, 0, "subnode@2"));
67 s2 = offset;
68 CHECK(fdt_setprop_cell(fdt, s2, "linux,phandle", PHANDLE_1));
69 CHECK(fdt_setprop_cell(fdt, s2, "prop-int", TEST_VALUE_2));
70 OFF_CHECK(offset, fdt_add_subnode(fdt, s2, "subsubnode@0"));
71 CHECK(fdt_setprop_cell(fdt, offset, "linux,phandle", PHANDLE_2));
72 CHECK(fdt_setprop(fdt, offset, "compatible",
73 "subsubnode2\0subsubnode", 23));
74 CHECK(fdt_setprop_cell(fdt, offset, "prop-int", TEST_VALUE_2));
75 OFF_CHECK(offset, fdt_add_subnode(fdt, s2, "ss2"));
76
77 CHECK(fdt_pack(fdt));
78
79 save_blob("rw_tree1.test.dtb", fdt);
80
81 PASS();
82 }
83