1 /* 2 * Procedures for creating, accessing and interpreting the device tree. 3 * 4 * Paul Mackerras August 1996. 5 * Copyright (C) 1996-2005 Paul Mackerras. 6 * 7 * Adapted for 64bit PowerPC by Dave Engebretsen and Peter Bergner. 8 * {engebret|bergner}@us.ibm.com 9 * 10 * Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net 11 * 12 * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell and 13 * Grant Likely. 14 * 15 * This program is free software; you can redistribute it and/or 16 * modify it under the terms of the GNU General Public License 17 * as published by the Free Software Foundation; either version 18 * 2 of the License, or (at your option) any later version. 19 */ 20 #include <linux/ctype.h> 21 #include <linux/module.h> 22 #include <linux/of.h> 23 #include <linux/spinlock.h> 24 #include <linux/slab.h> 25 #include <linux/proc_fs.h> 26 27 /** 28 * struct alias_prop - Alias property in 'aliases' node 29 * @link: List node to link the structure in aliases_lookup list 30 * @alias: Alias property name 31 * @np: Pointer to device_node that the alias stands for 32 * @id: Index value from end of alias name 33 * @stem: Alias string without the index 34 * 35 * The structure represents one alias property of 'aliases' node as 36 * an entry in aliases_lookup list. 37 */ 38 struct alias_prop { 39 struct list_head link; 40 const char *alias; 41 struct device_node *np; 42 int id; 43 char stem[0]; 44 }; 45 46 static LIST_HEAD(aliases_lookup); 47 48 struct device_node *allnodes; 49 struct device_node *of_chosen; 50 struct device_node *of_aliases; 51 52 static DEFINE_MUTEX(of_aliases_mutex); 53 54 /* use when traversing tree through the allnext, child, sibling, 55 * or parent members of struct device_node. 56 */ 57 DEFINE_RWLOCK(devtree_lock); 58 59 int of_n_addr_cells(struct device_node *np) 60 { 61 const __be32 *ip; 62 63 do { 64 if (np->parent) 65 np = np->parent; 66 ip = of_get_property(np, "#address-cells", NULL); 67 if (ip) 68 return be32_to_cpup(ip); 69 } while (np->parent); 70 /* No #address-cells property for the root node */ 71 return OF_ROOT_NODE_ADDR_CELLS_DEFAULT; 72 } 73 EXPORT_SYMBOL(of_n_addr_cells); 74 75 int of_n_size_cells(struct device_node *np) 76 { 77 const __be32 *ip; 78 79 do { 80 if (np->parent) 81 np = np->parent; 82 ip = of_get_property(np, "#size-cells", NULL); 83 if (ip) 84 return be32_to_cpup(ip); 85 } while (np->parent); 86 /* No #size-cells property for the root node */ 87 return OF_ROOT_NODE_SIZE_CELLS_DEFAULT; 88 } 89 EXPORT_SYMBOL(of_n_size_cells); 90 91 #if defined(CONFIG_OF_DYNAMIC) 92 /** 93 * of_node_get - Increment refcount of a node 94 * @node: Node to inc refcount, NULL is supported to 95 * simplify writing of callers 96 * 97 * Returns node. 98 */ 99 struct device_node *of_node_get(struct device_node *node) 100 { 101 if (node) 102 kref_get(&node->kref); 103 return node; 104 } 105 EXPORT_SYMBOL(of_node_get); 106 107 static inline struct device_node *kref_to_device_node(struct kref *kref) 108 { 109 return container_of(kref, struct device_node, kref); 110 } 111 112 /** 113 * of_node_release - release a dynamically allocated node 114 * @kref: kref element of the node to be released 115 * 116 * In of_node_put() this function is passed to kref_put() 117 * as the destructor. 118 */ 119 static void of_node_release(struct kref *kref) 120 { 121 struct device_node *node = kref_to_device_node(kref); 122 struct property *prop = node->properties; 123 124 /* We should never be releasing nodes that haven't been detached. */ 125 if (!of_node_check_flag(node, OF_DETACHED)) { 126 pr_err("ERROR: Bad of_node_put() on %s\n", node->full_name); 127 dump_stack(); 128 kref_init(&node->kref); 129 return; 130 } 131 132 if (!of_node_check_flag(node, OF_DYNAMIC)) 133 return; 134 135 while (prop) { 136 struct property *next = prop->next; 137 kfree(prop->name); 138 kfree(prop->value); 139 kfree(prop); 140 prop = next; 141 142 if (!prop) { 143 prop = node->deadprops; 144 node->deadprops = NULL; 145 } 146 } 147 kfree(node->full_name); 148 kfree(node->data); 149 kfree(node); 150 } 151 152 /** 153 * of_node_put - Decrement refcount of a node 154 * @node: Node to dec refcount, NULL is supported to 155 * simplify writing of callers 156 * 157 */ 158 void of_node_put(struct device_node *node) 159 { 160 if (node) 161 kref_put(&node->kref, of_node_release); 162 } 163 EXPORT_SYMBOL(of_node_put); 164 #endif /* CONFIG_OF_DYNAMIC */ 165 166 struct property *of_find_property(const struct device_node *np, 167 const char *name, 168 int *lenp) 169 { 170 struct property *pp; 171 172 if (!np) 173 return NULL; 174 175 read_lock(&devtree_lock); 176 for (pp = np->properties; pp != 0; pp = pp->next) { 177 if (of_prop_cmp(pp->name, name) == 0) { 178 if (lenp != 0) 179 *lenp = pp->length; 180 break; 181 } 182 } 183 read_unlock(&devtree_lock); 184 185 return pp; 186 } 187 EXPORT_SYMBOL(of_find_property); 188 189 /** 190 * of_find_all_nodes - Get next node in global list 191 * @prev: Previous node or NULL to start iteration 192 * of_node_put() will be called on it 193 * 194 * Returns a node pointer with refcount incremented, use 195 * of_node_put() on it when done. 196 */ 197 struct device_node *of_find_all_nodes(struct device_node *prev) 198 { 199 struct device_node *np; 200 201 read_lock(&devtree_lock); 202 np = prev ? prev->allnext : allnodes; 203 for (; np != NULL; np = np->allnext) 204 if (of_node_get(np)) 205 break; 206 of_node_put(prev); 207 read_unlock(&devtree_lock); 208 return np; 209 } 210 EXPORT_SYMBOL(of_find_all_nodes); 211 212 /* 213 * Find a property with a given name for a given node 214 * and return the value. 215 */ 216 const void *of_get_property(const struct device_node *np, const char *name, 217 int *lenp) 218 { 219 struct property *pp = of_find_property(np, name, lenp); 220 221 return pp ? pp->value : NULL; 222 } 223 EXPORT_SYMBOL(of_get_property); 224 225 /** Checks if the given "compat" string matches one of the strings in 226 * the device's "compatible" property 227 */ 228 int of_device_is_compatible(const struct device_node *device, 229 const char *compat) 230 { 231 const char* cp; 232 int cplen, l; 233 234 cp = of_get_property(device, "compatible", &cplen); 235 if (cp == NULL) 236 return 0; 237 while (cplen > 0) { 238 if (of_compat_cmp(cp, compat, strlen(compat)) == 0) 239 return 1; 240 l = strlen(cp) + 1; 241 cp += l; 242 cplen -= l; 243 } 244 245 return 0; 246 } 247 EXPORT_SYMBOL(of_device_is_compatible); 248 249 /** 250 * of_machine_is_compatible - Test root of device tree for a given compatible value 251 * @compat: compatible string to look for in root node's compatible property. 252 * 253 * Returns true if the root node has the given value in its 254 * compatible property. 255 */ 256 int of_machine_is_compatible(const char *compat) 257 { 258 struct device_node *root; 259 int rc = 0; 260 261 root = of_find_node_by_path("/"); 262 if (root) { 263 rc = of_device_is_compatible(root, compat); 264 of_node_put(root); 265 } 266 return rc; 267 } 268 EXPORT_SYMBOL(of_machine_is_compatible); 269 270 /** 271 * of_device_is_available - check if a device is available for use 272 * 273 * @device: Node to check for availability 274 * 275 * Returns 1 if the status property is absent or set to "okay" or "ok", 276 * 0 otherwise 277 */ 278 int of_device_is_available(const struct device_node *device) 279 { 280 const char *status; 281 int statlen; 282 283 status = of_get_property(device, "status", &statlen); 284 if (status == NULL) 285 return 1; 286 287 if (statlen > 0) { 288 if (!strcmp(status, "okay") || !strcmp(status, "ok")) 289 return 1; 290 } 291 292 return 0; 293 } 294 EXPORT_SYMBOL(of_device_is_available); 295 296 /** 297 * of_get_parent - Get a node's parent if any 298 * @node: Node to get parent 299 * 300 * Returns a node pointer with refcount incremented, use 301 * of_node_put() on it when done. 302 */ 303 struct device_node *of_get_parent(const struct device_node *node) 304 { 305 struct device_node *np; 306 307 if (!node) 308 return NULL; 309 310 read_lock(&devtree_lock); 311 np = of_node_get(node->parent); 312 read_unlock(&devtree_lock); 313 return np; 314 } 315 EXPORT_SYMBOL(of_get_parent); 316 317 /** 318 * of_get_next_parent - Iterate to a node's parent 319 * @node: Node to get parent of 320 * 321 * This is like of_get_parent() except that it drops the 322 * refcount on the passed node, making it suitable for iterating 323 * through a node's parents. 324 * 325 * Returns a node pointer with refcount incremented, use 326 * of_node_put() on it when done. 327 */ 328 struct device_node *of_get_next_parent(struct device_node *node) 329 { 330 struct device_node *parent; 331 332 if (!node) 333 return NULL; 334 335 read_lock(&devtree_lock); 336 parent = of_node_get(node->parent); 337 of_node_put(node); 338 read_unlock(&devtree_lock); 339 return parent; 340 } 341 342 /** 343 * of_get_next_child - Iterate a node childs 344 * @node: parent node 345 * @prev: previous child of the parent node, or NULL to get first 346 * 347 * Returns a node pointer with refcount incremented, use 348 * of_node_put() on it when done. 349 */ 350 struct device_node *of_get_next_child(const struct device_node *node, 351 struct device_node *prev) 352 { 353 struct device_node *next; 354 355 read_lock(&devtree_lock); 356 next = prev ? prev->sibling : node->child; 357 for (; next; next = next->sibling) 358 if (of_node_get(next)) 359 break; 360 of_node_put(prev); 361 read_unlock(&devtree_lock); 362 return next; 363 } 364 EXPORT_SYMBOL(of_get_next_child); 365 366 /** 367 * of_find_node_by_path - Find a node matching a full OF path 368 * @path: The full path to match 369 * 370 * Returns a node pointer with refcount incremented, use 371 * of_node_put() on it when done. 372 */ 373 struct device_node *of_find_node_by_path(const char *path) 374 { 375 struct device_node *np = allnodes; 376 377 read_lock(&devtree_lock); 378 for (; np; np = np->allnext) { 379 if (np->full_name && (of_node_cmp(np->full_name, path) == 0) 380 && of_node_get(np)) 381 break; 382 } 383 read_unlock(&devtree_lock); 384 return np; 385 } 386 EXPORT_SYMBOL(of_find_node_by_path); 387 388 /** 389 * of_find_node_by_name - Find a node by its "name" property 390 * @from: The node to start searching from or NULL, the node 391 * you pass will not be searched, only the next one 392 * will; typically, you pass what the previous call 393 * returned. of_node_put() will be called on it 394 * @name: The name string to match against 395 * 396 * Returns a node pointer with refcount incremented, use 397 * of_node_put() on it when done. 398 */ 399 struct device_node *of_find_node_by_name(struct device_node *from, 400 const char *name) 401 { 402 struct device_node *np; 403 404 read_lock(&devtree_lock); 405 np = from ? from->allnext : allnodes; 406 for (; np; np = np->allnext) 407 if (np->name && (of_node_cmp(np->name, name) == 0) 408 && of_node_get(np)) 409 break; 410 of_node_put(from); 411 read_unlock(&devtree_lock); 412 return np; 413 } 414 EXPORT_SYMBOL(of_find_node_by_name); 415 416 /** 417 * of_find_node_by_type - Find a node by its "device_type" property 418 * @from: The node to start searching from, or NULL to start searching 419 * the entire device tree. The node you pass will not be 420 * searched, only the next one will; typically, you pass 421 * what the previous call returned. of_node_put() will be 422 * called on from for you. 423 * @type: The type string to match against 424 * 425 * Returns a node pointer with refcount incremented, use 426 * of_node_put() on it when done. 427 */ 428 struct device_node *of_find_node_by_type(struct device_node *from, 429 const char *type) 430 { 431 struct device_node *np; 432 433 read_lock(&devtree_lock); 434 np = from ? from->allnext : allnodes; 435 for (; np; np = np->allnext) 436 if (np->type && (of_node_cmp(np->type, type) == 0) 437 && of_node_get(np)) 438 break; 439 of_node_put(from); 440 read_unlock(&devtree_lock); 441 return np; 442 } 443 EXPORT_SYMBOL(of_find_node_by_type); 444 445 /** 446 * of_find_compatible_node - Find a node based on type and one of the 447 * tokens in its "compatible" property 448 * @from: The node to start searching from or NULL, the node 449 * you pass will not be searched, only the next one 450 * will; typically, you pass what the previous call 451 * returned. of_node_put() will be called on it 452 * @type: The type string to match "device_type" or NULL to ignore 453 * @compatible: The string to match to one of the tokens in the device 454 * "compatible" list. 455 * 456 * Returns a node pointer with refcount incremented, use 457 * of_node_put() on it when done. 458 */ 459 struct device_node *of_find_compatible_node(struct device_node *from, 460 const char *type, const char *compatible) 461 { 462 struct device_node *np; 463 464 read_lock(&devtree_lock); 465 np = from ? from->allnext : allnodes; 466 for (; np; np = np->allnext) { 467 if (type 468 && !(np->type && (of_node_cmp(np->type, type) == 0))) 469 continue; 470 if (of_device_is_compatible(np, compatible) && of_node_get(np)) 471 break; 472 } 473 of_node_put(from); 474 read_unlock(&devtree_lock); 475 return np; 476 } 477 EXPORT_SYMBOL(of_find_compatible_node); 478 479 /** 480 * of_find_node_with_property - Find a node which has a property with 481 * the given name. 482 * @from: The node to start searching from or NULL, the node 483 * you pass will not be searched, only the next one 484 * will; typically, you pass what the previous call 485 * returned. of_node_put() will be called on it 486 * @prop_name: The name of the property to look for. 487 * 488 * Returns a node pointer with refcount incremented, use 489 * of_node_put() on it when done. 490 */ 491 struct device_node *of_find_node_with_property(struct device_node *from, 492 const char *prop_name) 493 { 494 struct device_node *np; 495 struct property *pp; 496 497 read_lock(&devtree_lock); 498 np = from ? from->allnext : allnodes; 499 for (; np; np = np->allnext) { 500 for (pp = np->properties; pp != 0; pp = pp->next) { 501 if (of_prop_cmp(pp->name, prop_name) == 0) { 502 of_node_get(np); 503 goto out; 504 } 505 } 506 } 507 out: 508 of_node_put(from); 509 read_unlock(&devtree_lock); 510 return np; 511 } 512 EXPORT_SYMBOL(of_find_node_with_property); 513 514 static const struct of_device_id *of_match_compat(const struct of_device_id *matches, 515 const char *compat) 516 { 517 while (matches->name[0] || matches->type[0] || matches->compatible[0]) { 518 const char *cp = matches->compatible; 519 int len = strlen(cp); 520 521 if (len > 0 && of_compat_cmp(compat, cp, len) == 0) 522 return matches; 523 524 matches++; 525 } 526 527 return NULL; 528 } 529 530 /** 531 * of_match_node - Tell if an device_node has a matching of_match structure 532 * @matches: array of of device match structures to search in 533 * @node: the of device structure to match against 534 * 535 * Low level utility function used by device matching. 536 */ 537 const struct of_device_id *of_match_node(const struct of_device_id *matches, 538 const struct device_node *node) 539 { 540 struct property *prop; 541 const char *cp; 542 543 if (!matches) 544 return NULL; 545 546 of_property_for_each_string(node, "compatible", prop, cp) { 547 const struct of_device_id *match = of_match_compat(matches, cp); 548 if (match) 549 return match; 550 } 551 552 while (matches->name[0] || matches->type[0] || matches->compatible[0]) { 553 int match = 1; 554 if (matches->name[0]) 555 match &= node->name 556 && !strcmp(matches->name, node->name); 557 if (matches->type[0]) 558 match &= node->type 559 && !strcmp(matches->type, node->type); 560 if (match && !matches->compatible[0]) 561 return matches; 562 matches++; 563 } 564 return NULL; 565 } 566 EXPORT_SYMBOL(of_match_node); 567 568 /** 569 * of_find_matching_node - Find a node based on an of_device_id match 570 * table. 571 * @from: The node to start searching from or NULL, the node 572 * you pass will not be searched, only the next one 573 * will; typically, you pass what the previous call 574 * returned. of_node_put() will be called on it 575 * @matches: array of of device match structures to search in 576 * 577 * Returns a node pointer with refcount incremented, use 578 * of_node_put() on it when done. 579 */ 580 struct device_node *of_find_matching_node(struct device_node *from, 581 const struct of_device_id *matches) 582 { 583 struct device_node *np; 584 585 read_lock(&devtree_lock); 586 np = from ? from->allnext : allnodes; 587 for (; np; np = np->allnext) { 588 if (of_match_node(matches, np) && of_node_get(np)) 589 break; 590 } 591 of_node_put(from); 592 read_unlock(&devtree_lock); 593 return np; 594 } 595 EXPORT_SYMBOL(of_find_matching_node); 596 597 /** 598 * of_modalias_node - Lookup appropriate modalias for a device node 599 * @node: pointer to a device tree node 600 * @modalias: Pointer to buffer that modalias value will be copied into 601 * @len: Length of modalias value 602 * 603 * Based on the value of the compatible property, this routine will attempt 604 * to choose an appropriate modalias value for a particular device tree node. 605 * It does this by stripping the manufacturer prefix (as delimited by a ',') 606 * from the first entry in the compatible list property. 607 * 608 * This routine returns 0 on success, <0 on failure. 609 */ 610 int of_modalias_node(struct device_node *node, char *modalias, int len) 611 { 612 const char *compatible, *p; 613 int cplen; 614 615 compatible = of_get_property(node, "compatible", &cplen); 616 if (!compatible || strlen(compatible) > cplen) 617 return -ENODEV; 618 p = strchr(compatible, ','); 619 strlcpy(modalias, p ? p + 1 : compatible, len); 620 return 0; 621 } 622 EXPORT_SYMBOL_GPL(of_modalias_node); 623 624 /** 625 * of_find_node_by_phandle - Find a node given a phandle 626 * @handle: phandle of the node to find 627 * 628 * Returns a node pointer with refcount incremented, use 629 * of_node_put() on it when done. 630 */ 631 struct device_node *of_find_node_by_phandle(phandle handle) 632 { 633 struct device_node *np; 634 635 read_lock(&devtree_lock); 636 for (np = allnodes; np; np = np->allnext) 637 if (np->phandle == handle) 638 break; 639 of_node_get(np); 640 read_unlock(&devtree_lock); 641 return np; 642 } 643 EXPORT_SYMBOL(of_find_node_by_phandle); 644 645 /** 646 * of_property_read_u32_array - Find and read an array of 32 bit integers 647 * from a property. 648 * 649 * @np: device node from which the property value is to be read. 650 * @propname: name of the property to be searched. 651 * @out_value: pointer to return value, modified only if return value is 0. 652 * 653 * Search for a property in a device node and read 32-bit value(s) from 654 * it. Returns 0 on success, -EINVAL if the property does not exist, 655 * -ENODATA if property does not have a value, and -EOVERFLOW if the 656 * property data isn't large enough. 657 * 658 * The out_value is modified only if a valid u32 value can be decoded. 659 */ 660 int of_property_read_u32_array(const struct device_node *np, 661 const char *propname, u32 *out_values, 662 size_t sz) 663 { 664 struct property *prop = of_find_property(np, propname, NULL); 665 const __be32 *val; 666 667 if (!prop) 668 return -EINVAL; 669 if (!prop->value) 670 return -ENODATA; 671 if ((sz * sizeof(*out_values)) > prop->length) 672 return -EOVERFLOW; 673 674 val = prop->value; 675 while (sz--) 676 *out_values++ = be32_to_cpup(val++); 677 return 0; 678 } 679 EXPORT_SYMBOL_GPL(of_property_read_u32_array); 680 681 /** 682 * of_property_read_u64 - Find and read a 64 bit integer from a property 683 * @np: device node from which the property value is to be read. 684 * @propname: name of the property to be searched. 685 * @out_value: pointer to return value, modified only if return value is 0. 686 * 687 * Search for a property in a device node and read a 64-bit value from 688 * it. Returns 0 on success, -EINVAL if the property does not exist, 689 * -ENODATA if property does not have a value, and -EOVERFLOW if the 690 * property data isn't large enough. 691 * 692 * The out_value is modified only if a valid u64 value can be decoded. 693 */ 694 int of_property_read_u64(const struct device_node *np, const char *propname, 695 u64 *out_value) 696 { 697 struct property *prop = of_find_property(np, propname, NULL); 698 699 if (!prop) 700 return -EINVAL; 701 if (!prop->value) 702 return -ENODATA; 703 if (sizeof(*out_value) > prop->length) 704 return -EOVERFLOW; 705 *out_value = of_read_number(prop->value, 2); 706 return 0; 707 } 708 EXPORT_SYMBOL_GPL(of_property_read_u64); 709 710 /** 711 * of_property_read_string - Find and read a string from a property 712 * @np: device node from which the property value is to be read. 713 * @propname: name of the property to be searched. 714 * @out_string: pointer to null terminated return string, modified only if 715 * return value is 0. 716 * 717 * Search for a property in a device tree node and retrieve a null 718 * terminated string value (pointer to data, not a copy). Returns 0 on 719 * success, -EINVAL if the property does not exist, -ENODATA if property 720 * does not have a value, and -EILSEQ if the string is not null-terminated 721 * within the length of the property data. 722 * 723 * The out_string pointer is modified only if a valid string can be decoded. 724 */ 725 int of_property_read_string(struct device_node *np, const char *propname, 726 const char **out_string) 727 { 728 struct property *prop = of_find_property(np, propname, NULL); 729 if (!prop) 730 return -EINVAL; 731 if (!prop->value) 732 return -ENODATA; 733 if (strnlen(prop->value, prop->length) >= prop->length) 734 return -EILSEQ; 735 *out_string = prop->value; 736 return 0; 737 } 738 EXPORT_SYMBOL_GPL(of_property_read_string); 739 740 /** 741 * of_property_read_string_index - Find and read a string from a multiple 742 * strings property. 743 * @np: device node from which the property value is to be read. 744 * @propname: name of the property to be searched. 745 * @index: index of the string in the list of strings 746 * @out_string: pointer to null terminated return string, modified only if 747 * return value is 0. 748 * 749 * Search for a property in a device tree node and retrieve a null 750 * terminated string value (pointer to data, not a copy) in the list of strings 751 * contained in that property. 752 * Returns 0 on success, -EINVAL if the property does not exist, -ENODATA if 753 * property does not have a value, and -EILSEQ if the string is not 754 * null-terminated within the length of the property data. 755 * 756 * The out_string pointer is modified only if a valid string can be decoded. 757 */ 758 int of_property_read_string_index(struct device_node *np, const char *propname, 759 int index, const char **output) 760 { 761 struct property *prop = of_find_property(np, propname, NULL); 762 int i = 0; 763 size_t l = 0, total = 0; 764 const char *p; 765 766 if (!prop) 767 return -EINVAL; 768 if (!prop->value) 769 return -ENODATA; 770 if (strnlen(prop->value, prop->length) >= prop->length) 771 return -EILSEQ; 772 773 p = prop->value; 774 775 for (i = 0; total < prop->length; total += l, p += l) { 776 l = strlen(p) + 1; 777 if (i++ == index) { 778 *output = p; 779 return 0; 780 } 781 } 782 return -ENODATA; 783 } 784 EXPORT_SYMBOL_GPL(of_property_read_string_index); 785 786 /** 787 * of_property_match_string() - Find string in a list and return index 788 * @np: pointer to node containing string list property 789 * @propname: string list property name 790 * @string: pointer to string to search for in string list 791 * 792 * This function searches a string list property and returns the index 793 * of a specific string value. 794 */ 795 int of_property_match_string(struct device_node *np, const char *propname, 796 const char *string) 797 { 798 struct property *prop = of_find_property(np, propname, NULL); 799 size_t l; 800 int i; 801 const char *p, *end; 802 803 if (!prop) 804 return -EINVAL; 805 if (!prop->value) 806 return -ENODATA; 807 808 p = prop->value; 809 end = p + prop->length; 810 811 for (i = 0; p < end; i++, p += l) { 812 l = strlen(p) + 1; 813 if (p + l > end) 814 return -EILSEQ; 815 pr_debug("comparing %s with %s\n", string, p); 816 if (strcmp(string, p) == 0) 817 return i; /* Found it; return index */ 818 } 819 return -ENODATA; 820 } 821 EXPORT_SYMBOL_GPL(of_property_match_string); 822 823 /** 824 * of_property_count_strings - Find and return the number of strings from a 825 * multiple strings property. 826 * @np: device node from which the property value is to be read. 827 * @propname: name of the property to be searched. 828 * 829 * Search for a property in a device tree node and retrieve the number of null 830 * terminated string contain in it. Returns the number of strings on 831 * success, -EINVAL if the property does not exist, -ENODATA if property 832 * does not have a value, and -EILSEQ if the string is not null-terminated 833 * within the length of the property data. 834 */ 835 int of_property_count_strings(struct device_node *np, const char *propname) 836 { 837 struct property *prop = of_find_property(np, propname, NULL); 838 int i = 0; 839 size_t l = 0, total = 0; 840 const char *p; 841 842 if (!prop) 843 return -EINVAL; 844 if (!prop->value) 845 return -ENODATA; 846 if (strnlen(prop->value, prop->length) >= prop->length) 847 return -EILSEQ; 848 849 p = prop->value; 850 851 for (i = 0; total < prop->length; total += l, p += l, i++) 852 l = strlen(p) + 1; 853 854 return i; 855 } 856 EXPORT_SYMBOL_GPL(of_property_count_strings); 857 858 /** 859 * of_parse_phandle - Resolve a phandle property to a device_node pointer 860 * @np: Pointer to device node holding phandle property 861 * @phandle_name: Name of property holding a phandle value 862 * @index: For properties holding a table of phandles, this is the index into 863 * the table 864 * 865 * Returns the device_node pointer with refcount incremented. Use 866 * of_node_put() on it when done. 867 */ 868 struct device_node * 869 of_parse_phandle(struct device_node *np, const char *phandle_name, int index) 870 { 871 const __be32 *phandle; 872 int size; 873 874 phandle = of_get_property(np, phandle_name, &size); 875 if ((!phandle) || (size < sizeof(*phandle) * (index + 1))) 876 return NULL; 877 878 return of_find_node_by_phandle(be32_to_cpup(phandle + index)); 879 } 880 EXPORT_SYMBOL(of_parse_phandle); 881 882 /** 883 * of_parse_phandle_with_args() - Find a node pointed by phandle in a list 884 * @np: pointer to a device tree node containing a list 885 * @list_name: property name that contains a list 886 * @cells_name: property name that specifies phandles' arguments count 887 * @index: index of a phandle to parse out 888 * @out_args: optional pointer to output arguments structure (will be filled) 889 * 890 * This function is useful to parse lists of phandles and their arguments. 891 * Returns 0 on success and fills out_args, on error returns appropriate 892 * errno value. 893 * 894 * Caller is responsible to call of_node_put() on the returned out_args->node 895 * pointer. 896 * 897 * Example: 898 * 899 * phandle1: node1 { 900 * #list-cells = <2>; 901 * } 902 * 903 * phandle2: node2 { 904 * #list-cells = <1>; 905 * } 906 * 907 * node3 { 908 * list = <&phandle1 1 2 &phandle2 3>; 909 * } 910 * 911 * To get a device_node of the `node2' node you may call this: 912 * of_parse_phandle_with_args(node3, "list", "#list-cells", 1, &args); 913 */ 914 int of_parse_phandle_with_args(struct device_node *np, const char *list_name, 915 const char *cells_name, int index, 916 struct of_phandle_args *out_args) 917 { 918 const __be32 *list, *list_end; 919 int size, cur_index = 0; 920 uint32_t count = 0; 921 struct device_node *node = NULL; 922 phandle phandle; 923 924 /* Retrieve the phandle list property */ 925 list = of_get_property(np, list_name, &size); 926 if (!list) 927 return -EINVAL; 928 list_end = list + size / sizeof(*list); 929 930 /* Loop over the phandles until all the requested entry is found */ 931 while (list < list_end) { 932 count = 0; 933 934 /* 935 * If phandle is 0, then it is an empty entry with no 936 * arguments. Skip forward to the next entry. 937 */ 938 phandle = be32_to_cpup(list++); 939 if (phandle) { 940 /* 941 * Find the provider node and parse the #*-cells 942 * property to determine the argument length 943 */ 944 node = of_find_node_by_phandle(phandle); 945 if (!node) { 946 pr_err("%s: could not find phandle\n", 947 np->full_name); 948 break; 949 } 950 if (of_property_read_u32(node, cells_name, &count)) { 951 pr_err("%s: could not get %s for %s\n", 952 np->full_name, cells_name, 953 node->full_name); 954 break; 955 } 956 957 /* 958 * Make sure that the arguments actually fit in the 959 * remaining property data length 960 */ 961 if (list + count > list_end) { 962 pr_err("%s: arguments longer than property\n", 963 np->full_name); 964 break; 965 } 966 } 967 968 /* 969 * All of the error cases above bail out of the loop, so at 970 * this point, the parsing is successful. If the requested 971 * index matches, then fill the out_args structure and return, 972 * or return -ENOENT for an empty entry. 973 */ 974 if (cur_index == index) { 975 if (!phandle) 976 return -ENOENT; 977 978 if (out_args) { 979 int i; 980 if (WARN_ON(count > MAX_PHANDLE_ARGS)) 981 count = MAX_PHANDLE_ARGS; 982 out_args->np = node; 983 out_args->args_count = count; 984 for (i = 0; i < count; i++) 985 out_args->args[i] = be32_to_cpup(list++); 986 } 987 return 0; 988 } 989 990 of_node_put(node); 991 node = NULL; 992 list += count; 993 cur_index++; 994 } 995 996 /* Loop exited without finding a valid entry; return an error */ 997 if (node) 998 of_node_put(node); 999 return -EINVAL; 1000 } 1001 EXPORT_SYMBOL(of_parse_phandle_with_args); 1002 1003 /** 1004 * prom_add_property - Add a property to a node 1005 */ 1006 int prom_add_property(struct device_node *np, struct property *prop) 1007 { 1008 struct property **next; 1009 unsigned long flags; 1010 1011 prop->next = NULL; 1012 write_lock_irqsave(&devtree_lock, flags); 1013 next = &np->properties; 1014 while (*next) { 1015 if (strcmp(prop->name, (*next)->name) == 0) { 1016 /* duplicate ! don't insert it */ 1017 write_unlock_irqrestore(&devtree_lock, flags); 1018 return -1; 1019 } 1020 next = &(*next)->next; 1021 } 1022 *next = prop; 1023 write_unlock_irqrestore(&devtree_lock, flags); 1024 1025 #ifdef CONFIG_PROC_DEVICETREE 1026 /* try to add to proc as well if it was initialized */ 1027 if (np->pde) 1028 proc_device_tree_add_prop(np->pde, prop); 1029 #endif /* CONFIG_PROC_DEVICETREE */ 1030 1031 return 0; 1032 } 1033 1034 /** 1035 * prom_remove_property - Remove a property from a node. 1036 * 1037 * Note that we don't actually remove it, since we have given out 1038 * who-knows-how-many pointers to the data using get-property. 1039 * Instead we just move the property to the "dead properties" 1040 * list, so it won't be found any more. 1041 */ 1042 int prom_remove_property(struct device_node *np, struct property *prop) 1043 { 1044 struct property **next; 1045 unsigned long flags; 1046 int found = 0; 1047 1048 write_lock_irqsave(&devtree_lock, flags); 1049 next = &np->properties; 1050 while (*next) { 1051 if (*next == prop) { 1052 /* found the node */ 1053 *next = prop->next; 1054 prop->next = np->deadprops; 1055 np->deadprops = prop; 1056 found = 1; 1057 break; 1058 } 1059 next = &(*next)->next; 1060 } 1061 write_unlock_irqrestore(&devtree_lock, flags); 1062 1063 if (!found) 1064 return -ENODEV; 1065 1066 #ifdef CONFIG_PROC_DEVICETREE 1067 /* try to remove the proc node as well */ 1068 if (np->pde) 1069 proc_device_tree_remove_prop(np->pde, prop); 1070 #endif /* CONFIG_PROC_DEVICETREE */ 1071 1072 return 0; 1073 } 1074 1075 /* 1076 * prom_update_property - Update a property in a node, if the property does 1077 * not exist, add it. 1078 * 1079 * Note that we don't actually remove it, since we have given out 1080 * who-knows-how-many pointers to the data using get-property. 1081 * Instead we just move the property to the "dead properties" list, 1082 * and add the new property to the property list 1083 */ 1084 int prom_update_property(struct device_node *np, 1085 struct property *newprop) 1086 { 1087 struct property **next, *oldprop; 1088 unsigned long flags; 1089 int found = 0; 1090 1091 if (!newprop->name) 1092 return -EINVAL; 1093 1094 oldprop = of_find_property(np, newprop->name, NULL); 1095 if (!oldprop) 1096 return prom_add_property(np, newprop); 1097 1098 write_lock_irqsave(&devtree_lock, flags); 1099 next = &np->properties; 1100 while (*next) { 1101 if (*next == oldprop) { 1102 /* found the node */ 1103 newprop->next = oldprop->next; 1104 *next = newprop; 1105 oldprop->next = np->deadprops; 1106 np->deadprops = oldprop; 1107 found = 1; 1108 break; 1109 } 1110 next = &(*next)->next; 1111 } 1112 write_unlock_irqrestore(&devtree_lock, flags); 1113 1114 if (!found) 1115 return -ENODEV; 1116 1117 #ifdef CONFIG_PROC_DEVICETREE 1118 /* try to add to proc as well if it was initialized */ 1119 if (np->pde) 1120 proc_device_tree_update_prop(np->pde, newprop, oldprop); 1121 #endif /* CONFIG_PROC_DEVICETREE */ 1122 1123 return 0; 1124 } 1125 1126 #if defined(CONFIG_OF_DYNAMIC) 1127 /* 1128 * Support for dynamic device trees. 1129 * 1130 * On some platforms, the device tree can be manipulated at runtime. 1131 * The routines in this section support adding, removing and changing 1132 * device tree nodes. 1133 */ 1134 1135 /** 1136 * of_attach_node - Plug a device node into the tree and global list. 1137 */ 1138 void of_attach_node(struct device_node *np) 1139 { 1140 unsigned long flags; 1141 1142 write_lock_irqsave(&devtree_lock, flags); 1143 np->sibling = np->parent->child; 1144 np->allnext = allnodes; 1145 np->parent->child = np; 1146 allnodes = np; 1147 write_unlock_irqrestore(&devtree_lock, flags); 1148 } 1149 1150 /** 1151 * of_detach_node - "Unplug" a node from the device tree. 1152 * 1153 * The caller must hold a reference to the node. The memory associated with 1154 * the node is not freed until its refcount goes to zero. 1155 */ 1156 void of_detach_node(struct device_node *np) 1157 { 1158 struct device_node *parent; 1159 unsigned long flags; 1160 1161 write_lock_irqsave(&devtree_lock, flags); 1162 1163 parent = np->parent; 1164 if (!parent) 1165 goto out_unlock; 1166 1167 if (allnodes == np) 1168 allnodes = np->allnext; 1169 else { 1170 struct device_node *prev; 1171 for (prev = allnodes; 1172 prev->allnext != np; 1173 prev = prev->allnext) 1174 ; 1175 prev->allnext = np->allnext; 1176 } 1177 1178 if (parent->child == np) 1179 parent->child = np->sibling; 1180 else { 1181 struct device_node *prevsib; 1182 for (prevsib = np->parent->child; 1183 prevsib->sibling != np; 1184 prevsib = prevsib->sibling) 1185 ; 1186 prevsib->sibling = np->sibling; 1187 } 1188 1189 of_node_set_flag(np, OF_DETACHED); 1190 1191 out_unlock: 1192 write_unlock_irqrestore(&devtree_lock, flags); 1193 } 1194 #endif /* defined(CONFIG_OF_DYNAMIC) */ 1195 1196 static void of_alias_add(struct alias_prop *ap, struct device_node *np, 1197 int id, const char *stem, int stem_len) 1198 { 1199 ap->np = np; 1200 ap->id = id; 1201 strncpy(ap->stem, stem, stem_len); 1202 ap->stem[stem_len] = 0; 1203 list_add_tail(&ap->link, &aliases_lookup); 1204 pr_debug("adding DT alias:%s: stem=%s id=%i node=%s\n", 1205 ap->alias, ap->stem, ap->id, np ? np->full_name : NULL); 1206 } 1207 1208 /** 1209 * of_alias_scan - Scan all properties of 'aliases' node 1210 * 1211 * The function scans all the properties of 'aliases' node and populate 1212 * the the global lookup table with the properties. It returns the 1213 * number of alias_prop found, or error code in error case. 1214 * 1215 * @dt_alloc: An allocator that provides a virtual address to memory 1216 * for the resulting tree 1217 */ 1218 void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)) 1219 { 1220 struct property *pp; 1221 1222 of_chosen = of_find_node_by_path("/chosen"); 1223 if (of_chosen == NULL) 1224 of_chosen = of_find_node_by_path("/chosen@0"); 1225 of_aliases = of_find_node_by_path("/aliases"); 1226 if (!of_aliases) 1227 return; 1228 1229 for_each_property_of_node(of_aliases, pp) { 1230 const char *start = pp->name; 1231 const char *end = start + strlen(start); 1232 struct device_node *np; 1233 struct alias_prop *ap; 1234 int id, len; 1235 1236 /* Skip those we do not want to proceed */ 1237 if (!strcmp(pp->name, "name") || 1238 !strcmp(pp->name, "phandle") || 1239 !strcmp(pp->name, "linux,phandle")) 1240 continue; 1241 1242 np = of_find_node_by_path(pp->value); 1243 if (!np) 1244 continue; 1245 1246 /* walk the alias backwards to extract the id and work out 1247 * the 'stem' string */ 1248 while (isdigit(*(end-1)) && end > start) 1249 end--; 1250 len = end - start; 1251 1252 if (kstrtoint(end, 10, &id) < 0) 1253 continue; 1254 1255 /* Allocate an alias_prop with enough space for the stem */ 1256 ap = dt_alloc(sizeof(*ap) + len + 1, 4); 1257 if (!ap) 1258 continue; 1259 ap->alias = start; 1260 of_alias_add(ap, np, id, start, len); 1261 } 1262 } 1263 1264 /** 1265 * of_alias_get_id - Get alias id for the given device_node 1266 * @np: Pointer to the given device_node 1267 * @stem: Alias stem of the given device_node 1268 * 1269 * The function travels the lookup table to get alias id for the given 1270 * device_node and alias stem. It returns the alias id if find it. 1271 */ 1272 int of_alias_get_id(struct device_node *np, const char *stem) 1273 { 1274 struct alias_prop *app; 1275 int id = -ENODEV; 1276 1277 mutex_lock(&of_aliases_mutex); 1278 list_for_each_entry(app, &aliases_lookup, link) { 1279 if (strcmp(app->stem, stem) != 0) 1280 continue; 1281 1282 if (np == app->np) { 1283 id = app->id; 1284 break; 1285 } 1286 } 1287 mutex_unlock(&of_aliases_mutex); 1288 1289 return id; 1290 } 1291 EXPORT_SYMBOL_GPL(of_alias_get_id); 1292 1293 const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur, 1294 u32 *pu) 1295 { 1296 const void *curv = cur; 1297 1298 if (!prop) 1299 return NULL; 1300 1301 if (!cur) { 1302 curv = prop->value; 1303 goto out_val; 1304 } 1305 1306 curv += sizeof(*cur); 1307 if (curv >= prop->value + prop->length) 1308 return NULL; 1309 1310 out_val: 1311 *pu = be32_to_cpup(curv); 1312 return curv; 1313 } 1314 EXPORT_SYMBOL_GPL(of_prop_next_u32); 1315 1316 const char *of_prop_next_string(struct property *prop, const char *cur) 1317 { 1318 const void *curv = cur; 1319 1320 if (!prop) 1321 return NULL; 1322 1323 if (!cur) 1324 return prop->value; 1325 1326 curv += strlen(cur) + 1; 1327 if (curv >= prop->value + prop->length) 1328 return NULL; 1329 1330 return curv; 1331 } 1332 EXPORT_SYMBOL_GPL(of_prop_next_string); 1333