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