1#include <fdt.h>
2#include "testdata.h"
3
4	.macro	fdtlong	val
5	.byte	((\val) >> 24) & 0xff
6	.byte	((\val) >> 16) & 0xff
7	.byte	((\val) >> 8) & 0xff
8	.byte	(\val) & 0xff
9	.endm
10
11	.macro	treehdr	tree
12	.balign	8
13	.globl	\tree
14\tree :
15	fdtlong	FDT_MAGIC
16	fdtlong	(\tree\()_end - \tree)
17	fdtlong	(\tree\()_struct - \tree)
18	fdtlong	(\tree\()_strings - \tree)
19	fdtlong	(\tree\()_rsvmap - \tree)
20	fdtlong	0x11
21	fdtlong	0x10
22	fdtlong	0
23	fdtlong	(\tree\()_strings_end - \tree\()_strings)
24	fdtlong	(\tree\()_struct_end - \tree\()_struct)
25	.endm
26
27	.macro	rsvmape	addrh, addrl, lenh, lenl
28	fdtlong	\addrh
29	fdtlong	\addrl
30	fdtlong	\lenh
31	fdtlong	\lenl
32	.endm
33
34	.macro	empty_rsvmap	tree
35	.balign	8
36\tree\()_rsvmap:
37	rsvmape	0, 0, 0, 0
38\tree\()_rsvmap_end:
39	.endm
40
41	.macro prophdr	tree, name, len
42	fdtlong	FDT_PROP
43	fdtlong	\len
44	fdtlong	(\tree\()_\name - \tree\()_strings)
45	.endm
46
47	.macro propnil	tree, name
48	prophdr	\tree, \name, 0
49	.endm
50
51	.macro propu32	tree, name, val
52	prophdr	\tree, \name, 4
53	fdtlong	\val
54	.endm
55
56	.macro propu64	tree, name, valh, vall
57	prophdr	\tree, \name, 8
58	fdtlong	\valh
59	fdtlong	\vall
60	.endm
61
62	.macro propstr	tree, name, str:vararg
63	prophdr	\tree, \name, (55f - 54f)
6454:
65	.asciz	\str
6655:
67	.balign	4
68	.endm
69
70	.macro	beginn	name:vararg
71	fdtlong	FDT_BEGIN_NODE
72	.asciz	\name
73	.balign 4
74	.endm
75
76	.macro	endn
77	fdtlong	FDT_END_NODE
78	.endm
79
80	.macro	string	tree, name, str:vararg
81\tree\()_\name :
82	.asciz	\str
83	.endm
84
85
86	.data
87
88	treehdr	test_tree1
89
90	.balign	8
91test_tree1_rsvmap:
92	rsvmape	TEST_ADDR_1H, TEST_ADDR_1L, TEST_SIZE_1H, TEST_SIZE_1L
93	rsvmape	TEST_ADDR_2H, TEST_ADDR_2L, TEST_SIZE_2H, TEST_SIZE_2L
94	rsvmape	0, 0, 0, 0
95test_tree1_rsvmap_end:
96
97test_tree1_struct:
98	beginn	""
99	propstr	test_tree1, compatible, "test_tree1"
100	propu32	test_tree1, prop_int, TEST_VALUE_1
101	propu64	test_tree1, prop_int64, TEST_VALUE64_1H, TEST_VALUE64_1L
102	propstr	test_tree1, prop_str, TEST_STRING_1
103	propu32 test_tree1, address_cells, 1
104	propu32	test_tree1, size_cells, 0
105
106	beginn	"subnode@1"
107	propstr	test_tree1, compatible, "subnode1"
108	propu32	test_tree1, reg, 1
109	propu32	test_tree1, prop_int, TEST_VALUE_1
110
111	beginn	"subsubnode"
112	propstr	test_tree1, compatible, "subsubnode1\0subsubnode"
113	propstr	test_tree1, placeholder, "this is a placeholder string\0string2"
114	propu32	test_tree1, prop_int, TEST_VALUE_1
115	endn
116
117	beginn	"ss1"
118	endn
119
120	endn
121
122	beginn	"subnode@2"
123	propu32	test_tree1, reg, 2
124	propu32	test_tree1, linux_phandle, PHANDLE_1
125	propu32	test_tree1, prop_int, TEST_VALUE_2
126	propu32	test_tree1, address_cells, 1
127	propu32	test_tree1, size_cells, 0
128
129	beginn	"subsubnode@0"
130	propu32	test_tree1, reg, 0
131	propu32	test_tree1, phandle, PHANDLE_2
132	propstr	test_tree1, compatible, "subsubnode2\0subsubnode"
133	propu32	test_tree1, prop_int, TEST_VALUE_2
134	endn
135
136	beginn	"ss2"
137	endn
138
139	endn
140
141	endn
142	fdtlong	FDT_END
143test_tree1_struct_end:
144
145test_tree1_strings:
146	string	test_tree1, compatible, "compatible"
147	string	test_tree1, prop_int, "prop-int"
148	string	test_tree1, prop_int64, "prop-int64"
149	string	test_tree1, prop_str, "prop-str"
150	string	test_tree1, linux_phandle, "linux,phandle"
151	string	test_tree1, phandle, "phandle"
152	string	test_tree1, reg, "reg"
153	string	test_tree1, placeholder, "placeholder"
154	string	test_tree1, address_cells, "#address-cells"
155	string	test_tree1, size_cells, "#size-cells"
156test_tree1_strings_end:
157test_tree1_end:
158
159
160	treehdr	truncated_property
161	empty_rsvmap	truncated_property
162
163truncated_property_struct:
164	beginn	""
165	prophdr	truncated_property, prop_truncated, 4
166	/* Oops, no actual property data here */
167truncated_property_struct_end:
168
169truncated_property_strings:
170	string	truncated_property, prop_truncated, "truncated"
171truncated_property_strings_end:
172
173truncated_property_end:
174
175
176	treehdr	bad_node_char
177	empty_rsvmap	bad_node_char
178
179bad_node_char_struct:
180	beginn	""
181	beginn	"sub$node"
182	endn
183	endn
184	fdtlong	FDT_END
185bad_node_char_struct_end:
186
187bad_node_char_strings:
188bad_node_char_strings_end:
189bad_node_char_end:
190
191
192	treehdr	bad_node_format
193	empty_rsvmap	bad_node_format
194
195bad_node_format_struct:
196	beginn	""
197	beginn	"subnode@1@2"
198	endn
199	endn
200	fdtlong	FDT_END
201bad_node_format_struct_end:
202
203bad_node_format_strings:
204bad_node_format_strings_end:
205bad_node_format_end:
206
207
208	treehdr	bad_prop_char
209	empty_rsvmap	bad_prop_char
210
211bad_prop_char_struct:
212	beginn	""
213	propu32	bad_prop_char, prop, TEST_VALUE_1
214	endn
215	fdtlong	FDT_END
216bad_prop_char_struct_end:
217
218bad_prop_char_strings:
219	string	bad_prop_char, prop, "prop$erty"
220bad_prop_char_strings_end:
221bad_prop_char_end:
222
223
224	/* overflow_size_strings */
225	.balign	8
226	.globl	ovf_size_strings
227ovf_size_strings:
228	fdtlong	FDT_MAGIC
229	fdtlong	(ovf_size_strings_end - ovf_size_strings)
230	fdtlong	(ovf_size_strings_struct - ovf_size_strings)
231	fdtlong	(ovf_size_strings_strings - ovf_size_strings)
232	fdtlong	(ovf_size_strings_rsvmap - ovf_size_strings)
233	fdtlong	0x11
234	fdtlong	0x10
235	fdtlong	0
236	fdtlong	0xffffffff
237	fdtlong	(ovf_size_strings_struct_end - ovf_size_strings_struct)
238	empty_rsvmap	ovf_size_strings
239
240ovf_size_strings_struct:
241	beginn	""
242	propu32	ovf_size_strings, bad_string, 0
243	endn
244	fdtlong	FDT_END
245ovf_size_strings_struct_end:
246
247ovf_size_strings_strings:
248	string	ovf_size_strings, x, "x"
249	ovf_size_strings_bad_string = ovf_size_strings_strings + 0x10000000
250ovf_size_strings_strings_end:
251ovf_size_strings_end:
252
253
254	/* truncated_string */
255	treehdr	truncated_string
256	empty_rsvmap	truncated_string
257
258truncated_string_struct:
259	beginn	""
260	propnil	truncated_string, good_string
261	propnil	truncated_string, bad_string
262	endn
263	fdtlong	FDT_END
264truncated_string_struct_end:
265
266truncated_string_strings:
267	string	truncated_string, good_string, "good"
268truncated_string_bad_string:
269	.ascii	"bad"
270	/* NOTE: terminating \0 deliberately missing */
271truncated_string_strings_end:
272truncated_string_end:
273
274
275	/* truncated_memrsv */
276	treehdr	truncated_memrsv
277
278truncated_memrsv_struct:
279	beginn	""
280	endn
281	fdtlong	FDT_END
282truncated_memrsv_struct_end:
283
284truncated_memrsv_strings:
285truncated_memrsv_strings_end:
286
287	.balign	8
288truncated_memrsv_rsvmap:
289	rsvmape	TEST_ADDR_1H, TEST_ADDR_1L, TEST_SIZE_1H, TEST_SIZE_1L
290truncated_memrsv_rsvmap_end:
291
292truncated_memrsv_end:
293
294
295        /* two root nodes */
296	treehdr	two_roots
297	empty_rsvmap	two_roots
298
299two_roots_struct:
300	beginn	""
301	endn
302	beginn	""
303	endn
304	fdtlong	FDT_END
305two_roots_struct_end:
306
307two_roots_strings:
308two_roots_strings_end:
309
310two_roots_end:
311
312
313        /* root node with a non-empty name */
314	treehdr	named_root
315	empty_rsvmap	named_root
316
317named_root_struct:
318	beginn	"fake"
319	endn
320	fdtlong	FDT_END
321named_root_struct_end:
322
323named_root_strings:
324named_root_strings_end:
325
326named_root_end:
327