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_SPARC) /* SPARC doesn't do ref counting (yet) */ 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_SPARC */ 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 /** 515 * of_match_node - Tell if an device_node has a matching of_match structure 516 * @matches: array of of device match structures to search in 517 * @node: the of device structure to match against 518 * 519 * Low level utility function used by device matching. 520 */ 521 const struct of_device_id *of_match_node(const struct of_device_id *matches, 522 const struct device_node *node) 523 { 524 if (!matches) 525 return NULL; 526 527 while (matches->name[0] || matches->type[0] || matches->compatible[0]) { 528 int match = 1; 529 if (matches->name[0]) 530 match &= node->name 531 && !strcmp(matches->name, node->name); 532 if (matches->type[0]) 533 match &= node->type 534 && !strcmp(matches->type, node->type); 535 if (matches->compatible[0]) 536 match &= of_device_is_compatible(node, 537 matches->compatible); 538 if (match) 539 return matches; 540 matches++; 541 } 542 return NULL; 543 } 544 EXPORT_SYMBOL(of_match_node); 545 546 /** 547 * of_find_matching_node - Find a node based on an of_device_id match 548 * table. 549 * @from: The node to start searching from or NULL, the node 550 * you pass will not be searched, only the next one 551 * will; typically, you pass what the previous call 552 * returned. of_node_put() will be called on it 553 * @matches: array of of device match structures to search in 554 * 555 * Returns a node pointer with refcount incremented, use 556 * of_node_put() on it when done. 557 */ 558 struct device_node *of_find_matching_node(struct device_node *from, 559 const struct of_device_id *matches) 560 { 561 struct device_node *np; 562 563 read_lock(&devtree_lock); 564 np = from ? from->allnext : allnodes; 565 for (; np; np = np->allnext) { 566 if (of_match_node(matches, np) && of_node_get(np)) 567 break; 568 } 569 of_node_put(from); 570 read_unlock(&devtree_lock); 571 return np; 572 } 573 EXPORT_SYMBOL(of_find_matching_node); 574 575 /** 576 * of_modalias_node - Lookup appropriate modalias for a device node 577 * @node: pointer to a device tree node 578 * @modalias: Pointer to buffer that modalias value will be copied into 579 * @len: Length of modalias value 580 * 581 * Based on the value of the compatible property, this routine will attempt 582 * to choose an appropriate modalias value for a particular device tree node. 583 * It does this by stripping the manufacturer prefix (as delimited by a ',') 584 * from the first entry in the compatible list property. 585 * 586 * This routine returns 0 on success, <0 on failure. 587 */ 588 int of_modalias_node(struct device_node *node, char *modalias, int len) 589 { 590 const char *compatible, *p; 591 int cplen; 592 593 compatible = of_get_property(node, "compatible", &cplen); 594 if (!compatible || strlen(compatible) > cplen) 595 return -ENODEV; 596 p = strchr(compatible, ','); 597 strlcpy(modalias, p ? p + 1 : compatible, len); 598 return 0; 599 } 600 EXPORT_SYMBOL_GPL(of_modalias_node); 601 602 /** 603 * of_find_node_by_phandle - Find a node given a phandle 604 * @handle: phandle of the node to find 605 * 606 * Returns a node pointer with refcount incremented, use 607 * of_node_put() on it when done. 608 */ 609 struct device_node *of_find_node_by_phandle(phandle handle) 610 { 611 struct device_node *np; 612 613 read_lock(&devtree_lock); 614 for (np = allnodes; np; np = np->allnext) 615 if (np->phandle == handle) 616 break; 617 of_node_get(np); 618 read_unlock(&devtree_lock); 619 return np; 620 } 621 EXPORT_SYMBOL(of_find_node_by_phandle); 622 623 /** 624 * of_property_read_u32_array - Find and read an array of 32 bit integers 625 * from a property. 626 * 627 * @np: device node from which the property value is to be read. 628 * @propname: name of the property to be searched. 629 * @out_value: pointer to return value, modified only if return value is 0. 630 * 631 * Search for a property in a device node and read 32-bit value(s) from 632 * it. Returns 0 on success, -EINVAL if the property does not exist, 633 * -ENODATA if property does not have a value, and -EOVERFLOW if the 634 * property data isn't large enough. 635 * 636 * The out_value is modified only if a valid u32 value can be decoded. 637 */ 638 int of_property_read_u32_array(const struct device_node *np, 639 const char *propname, u32 *out_values, 640 size_t sz) 641 { 642 struct property *prop = of_find_property(np, propname, NULL); 643 const __be32 *val; 644 645 if (!prop) 646 return -EINVAL; 647 if (!prop->value) 648 return -ENODATA; 649 if ((sz * sizeof(*out_values)) > prop->length) 650 return -EOVERFLOW; 651 652 val = prop->value; 653 while (sz--) 654 *out_values++ = be32_to_cpup(val++); 655 return 0; 656 } 657 EXPORT_SYMBOL_GPL(of_property_read_u32_array); 658 659 /** 660 * of_property_read_u64 - Find and read a 64 bit integer from a property 661 * @np: device node from which the property value is to be read. 662 * @propname: name of the property to be searched. 663 * @out_value: pointer to return value, modified only if return value is 0. 664 * 665 * Search for a property in a device node and read a 64-bit value from 666 * it. Returns 0 on success, -EINVAL if the property does not exist, 667 * -ENODATA if property does not have a value, and -EOVERFLOW if the 668 * property data isn't large enough. 669 * 670 * The out_value is modified only if a valid u64 value can be decoded. 671 */ 672 int of_property_read_u64(const struct device_node *np, const char *propname, 673 u64 *out_value) 674 { 675 struct property *prop = of_find_property(np, propname, NULL); 676 677 if (!prop) 678 return -EINVAL; 679 if (!prop->value) 680 return -ENODATA; 681 if (sizeof(*out_value) > prop->length) 682 return -EOVERFLOW; 683 *out_value = of_read_number(prop->value, 2); 684 return 0; 685 } 686 EXPORT_SYMBOL_GPL(of_property_read_u64); 687 688 /** 689 * of_property_read_string - Find and read a string from a property 690 * @np: device node from which the property value is to be read. 691 * @propname: name of the property to be searched. 692 * @out_string: pointer to null terminated return string, modified only if 693 * return value is 0. 694 * 695 * Search for a property in a device tree node and retrieve a null 696 * terminated string value (pointer to data, not a copy). Returns 0 on 697 * success, -EINVAL if the property does not exist, -ENODATA if property 698 * does not have a value, and -EILSEQ if the string is not null-terminated 699 * within the length of the property data. 700 * 701 * The out_string pointer is modified only if a valid string can be decoded. 702 */ 703 int of_property_read_string(struct device_node *np, const char *propname, 704 const char **out_string) 705 { 706 struct property *prop = of_find_property(np, propname, NULL); 707 if (!prop) 708 return -EINVAL; 709 if (!prop->value) 710 return -ENODATA; 711 if (strnlen(prop->value, prop->length) >= prop->length) 712 return -EILSEQ; 713 *out_string = prop->value; 714 return 0; 715 } 716 EXPORT_SYMBOL_GPL(of_property_read_string); 717 718 /** 719 * of_property_read_string_index - Find and read a string from a multiple 720 * strings property. 721 * @np: device node from which the property value is to be read. 722 * @propname: name of the property to be searched. 723 * @index: index of the string in the list of strings 724 * @out_string: pointer to null terminated return string, modified only if 725 * return value is 0. 726 * 727 * Search for a property in a device tree node and retrieve a null 728 * terminated string value (pointer to data, not a copy) in the list of strings 729 * contained in that property. 730 * Returns 0 on success, -EINVAL if the property does not exist, -ENODATA if 731 * property does not have a value, and -EILSEQ if the string is not 732 * null-terminated within the length of the property data. 733 * 734 * The out_string pointer is modified only if a valid string can be decoded. 735 */ 736 int of_property_read_string_index(struct device_node *np, const char *propname, 737 int index, const char **output) 738 { 739 struct property *prop = of_find_property(np, propname, NULL); 740 int i = 0; 741 size_t l = 0, total = 0; 742 const char *p; 743 744 if (!prop) 745 return -EINVAL; 746 if (!prop->value) 747 return -ENODATA; 748 if (strnlen(prop->value, prop->length) >= prop->length) 749 return -EILSEQ; 750 751 p = prop->value; 752 753 for (i = 0; total < prop->length; total += l, p += l) { 754 l = strlen(p) + 1; 755 if ((*p != 0) && (i++ == index)) { 756 *output = p; 757 return 0; 758 } 759 } 760 return -ENODATA; 761 } 762 EXPORT_SYMBOL_GPL(of_property_read_string_index); 763 764 765 /** 766 * of_property_count_strings - Find and return the number of strings from a 767 * multiple strings property. 768 * @np: device node from which the property value is to be read. 769 * @propname: name of the property to be searched. 770 * 771 * Search for a property in a device tree node and retrieve the number of null 772 * terminated string contain in it. Returns the number of strings on 773 * success, -EINVAL if the property does not exist, -ENODATA if property 774 * does not have a value, and -EILSEQ if the string is not null-terminated 775 * within the length of the property data. 776 */ 777 int of_property_count_strings(struct device_node *np, const char *propname) 778 { 779 struct property *prop = of_find_property(np, propname, NULL); 780 int i = 0; 781 size_t l = 0, total = 0; 782 const char *p; 783 784 if (!prop) 785 return -EINVAL; 786 if (!prop->value) 787 return -ENODATA; 788 if (strnlen(prop->value, prop->length) >= prop->length) 789 return -EILSEQ; 790 791 p = prop->value; 792 793 for (i = 0; total < prop->length; total += l, p += l) { 794 l = strlen(p) + 1; 795 if (*p != 0) 796 i++; 797 } 798 return i; 799 } 800 EXPORT_SYMBOL_GPL(of_property_count_strings); 801 802 /** 803 * of_parse_phandle - Resolve a phandle property to a device_node pointer 804 * @np: Pointer to device node holding phandle property 805 * @phandle_name: Name of property holding a phandle value 806 * @index: For properties holding a table of phandles, this is the index into 807 * the table 808 * 809 * Returns the device_node pointer with refcount incremented. Use 810 * of_node_put() on it when done. 811 */ 812 struct device_node * 813 of_parse_phandle(struct device_node *np, const char *phandle_name, int index) 814 { 815 const __be32 *phandle; 816 int size; 817 818 phandle = of_get_property(np, phandle_name, &size); 819 if ((!phandle) || (size < sizeof(*phandle) * (index + 1))) 820 return NULL; 821 822 return of_find_node_by_phandle(be32_to_cpup(phandle + index)); 823 } 824 EXPORT_SYMBOL(of_parse_phandle); 825 826 /** 827 * of_parse_phandles_with_args - Find a node pointed by phandle in a list 828 * @np: pointer to a device tree node containing a list 829 * @list_name: property name that contains a list 830 * @cells_name: property name that specifies phandles' arguments count 831 * @index: index of a phandle to parse out 832 * @out_node: optional pointer to device_node struct pointer (will be filled) 833 * @out_args: optional pointer to arguments pointer (will be filled) 834 * 835 * This function is useful to parse lists of phandles and their arguments. 836 * Returns 0 on success and fills out_node and out_args, on error returns 837 * appropriate errno value. 838 * 839 * Example: 840 * 841 * phandle1: node1 { 842 * #list-cells = <2>; 843 * } 844 * 845 * phandle2: node2 { 846 * #list-cells = <1>; 847 * } 848 * 849 * node3 { 850 * list = <&phandle1 1 2 &phandle2 3>; 851 * } 852 * 853 * To get a device_node of the `node2' node you may call this: 854 * of_parse_phandles_with_args(node3, "list", "#list-cells", 2, &node2, &args); 855 */ 856 int of_parse_phandles_with_args(struct device_node *np, const char *list_name, 857 const char *cells_name, int index, 858 struct device_node **out_node, 859 const void **out_args) 860 { 861 int ret = -EINVAL; 862 const __be32 *list; 863 const __be32 *list_end; 864 int size; 865 int cur_index = 0; 866 struct device_node *node = NULL; 867 const void *args = NULL; 868 869 list = of_get_property(np, list_name, &size); 870 if (!list) { 871 ret = -ENOENT; 872 goto err0; 873 } 874 list_end = list + size / sizeof(*list); 875 876 while (list < list_end) { 877 const __be32 *cells; 878 phandle phandle; 879 880 phandle = be32_to_cpup(list++); 881 args = list; 882 883 /* one cell hole in the list = <>; */ 884 if (!phandle) 885 goto next; 886 887 node = of_find_node_by_phandle(phandle); 888 if (!node) { 889 pr_debug("%s: could not find phandle\n", 890 np->full_name); 891 goto err0; 892 } 893 894 cells = of_get_property(node, cells_name, &size); 895 if (!cells || size != sizeof(*cells)) { 896 pr_debug("%s: could not get %s for %s\n", 897 np->full_name, cells_name, node->full_name); 898 goto err1; 899 } 900 901 list += be32_to_cpup(cells); 902 if (list > list_end) { 903 pr_debug("%s: insufficient arguments length\n", 904 np->full_name); 905 goto err1; 906 } 907 next: 908 if (cur_index == index) 909 break; 910 911 of_node_put(node); 912 node = NULL; 913 args = NULL; 914 cur_index++; 915 } 916 917 if (!node) { 918 /* 919 * args w/o node indicates that the loop above has stopped at 920 * the 'hole' cell. Report this differently. 921 */ 922 if (args) 923 ret = -EEXIST; 924 else 925 ret = -ENOENT; 926 goto err0; 927 } 928 929 if (out_node) 930 *out_node = node; 931 if (out_args) 932 *out_args = args; 933 934 return 0; 935 err1: 936 of_node_put(node); 937 err0: 938 pr_debug("%s failed with status %d\n", __func__, ret); 939 return ret; 940 } 941 EXPORT_SYMBOL(of_parse_phandles_with_args); 942 943 /** 944 * prom_add_property - Add a property to a node 945 */ 946 int prom_add_property(struct device_node *np, struct property *prop) 947 { 948 struct property **next; 949 unsigned long flags; 950 951 prop->next = NULL; 952 write_lock_irqsave(&devtree_lock, flags); 953 next = &np->properties; 954 while (*next) { 955 if (strcmp(prop->name, (*next)->name) == 0) { 956 /* duplicate ! don't insert it */ 957 write_unlock_irqrestore(&devtree_lock, flags); 958 return -1; 959 } 960 next = &(*next)->next; 961 } 962 *next = prop; 963 write_unlock_irqrestore(&devtree_lock, flags); 964 965 #ifdef CONFIG_PROC_DEVICETREE 966 /* try to add to proc as well if it was initialized */ 967 if (np->pde) 968 proc_device_tree_add_prop(np->pde, prop); 969 #endif /* CONFIG_PROC_DEVICETREE */ 970 971 return 0; 972 } 973 974 /** 975 * prom_remove_property - Remove a property from a node. 976 * 977 * Note that we don't actually remove it, since we have given out 978 * who-knows-how-many pointers to the data using get-property. 979 * Instead we just move the property to the "dead properties" 980 * list, so it won't be found any more. 981 */ 982 int prom_remove_property(struct device_node *np, struct property *prop) 983 { 984 struct property **next; 985 unsigned long flags; 986 int found = 0; 987 988 write_lock_irqsave(&devtree_lock, flags); 989 next = &np->properties; 990 while (*next) { 991 if (*next == prop) { 992 /* found the node */ 993 *next = prop->next; 994 prop->next = np->deadprops; 995 np->deadprops = prop; 996 found = 1; 997 break; 998 } 999 next = &(*next)->next; 1000 } 1001 write_unlock_irqrestore(&devtree_lock, flags); 1002 1003 if (!found) 1004 return -ENODEV; 1005 1006 #ifdef CONFIG_PROC_DEVICETREE 1007 /* try to remove the proc node as well */ 1008 if (np->pde) 1009 proc_device_tree_remove_prop(np->pde, prop); 1010 #endif /* CONFIG_PROC_DEVICETREE */ 1011 1012 return 0; 1013 } 1014 1015 /* 1016 * prom_update_property - Update a property in a node. 1017 * 1018 * Note that we don't actually remove it, since we have given out 1019 * who-knows-how-many pointers to the data using get-property. 1020 * Instead we just move the property to the "dead properties" list, 1021 * and add the new property to the property list 1022 */ 1023 int prom_update_property(struct device_node *np, 1024 struct property *newprop, 1025 struct property *oldprop) 1026 { 1027 struct property **next; 1028 unsigned long flags; 1029 int found = 0; 1030 1031 write_lock_irqsave(&devtree_lock, flags); 1032 next = &np->properties; 1033 while (*next) { 1034 if (*next == oldprop) { 1035 /* found the node */ 1036 newprop->next = oldprop->next; 1037 *next = newprop; 1038 oldprop->next = np->deadprops; 1039 np->deadprops = oldprop; 1040 found = 1; 1041 break; 1042 } 1043 next = &(*next)->next; 1044 } 1045 write_unlock_irqrestore(&devtree_lock, flags); 1046 1047 if (!found) 1048 return -ENODEV; 1049 1050 #ifdef CONFIG_PROC_DEVICETREE 1051 /* try to add to proc as well if it was initialized */ 1052 if (np->pde) 1053 proc_device_tree_update_prop(np->pde, newprop, oldprop); 1054 #endif /* CONFIG_PROC_DEVICETREE */ 1055 1056 return 0; 1057 } 1058 1059 #if defined(CONFIG_OF_DYNAMIC) 1060 /* 1061 * Support for dynamic device trees. 1062 * 1063 * On some platforms, the device tree can be manipulated at runtime. 1064 * The routines in this section support adding, removing and changing 1065 * device tree nodes. 1066 */ 1067 1068 /** 1069 * of_attach_node - Plug a device node into the tree and global list. 1070 */ 1071 void of_attach_node(struct device_node *np) 1072 { 1073 unsigned long flags; 1074 1075 write_lock_irqsave(&devtree_lock, flags); 1076 np->sibling = np->parent->child; 1077 np->allnext = allnodes; 1078 np->parent->child = np; 1079 allnodes = np; 1080 write_unlock_irqrestore(&devtree_lock, flags); 1081 } 1082 1083 /** 1084 * of_detach_node - "Unplug" a node from the device tree. 1085 * 1086 * The caller must hold a reference to the node. The memory associated with 1087 * the node is not freed until its refcount goes to zero. 1088 */ 1089 void of_detach_node(struct device_node *np) 1090 { 1091 struct device_node *parent; 1092 unsigned long flags; 1093 1094 write_lock_irqsave(&devtree_lock, flags); 1095 1096 parent = np->parent; 1097 if (!parent) 1098 goto out_unlock; 1099 1100 if (allnodes == np) 1101 allnodes = np->allnext; 1102 else { 1103 struct device_node *prev; 1104 for (prev = allnodes; 1105 prev->allnext != np; 1106 prev = prev->allnext) 1107 ; 1108 prev->allnext = np->allnext; 1109 } 1110 1111 if (parent->child == np) 1112 parent->child = np->sibling; 1113 else { 1114 struct device_node *prevsib; 1115 for (prevsib = np->parent->child; 1116 prevsib->sibling != np; 1117 prevsib = prevsib->sibling) 1118 ; 1119 prevsib->sibling = np->sibling; 1120 } 1121 1122 of_node_set_flag(np, OF_DETACHED); 1123 1124 out_unlock: 1125 write_unlock_irqrestore(&devtree_lock, flags); 1126 } 1127 #endif /* defined(CONFIG_OF_DYNAMIC) */ 1128 1129 static void of_alias_add(struct alias_prop *ap, struct device_node *np, 1130 int id, const char *stem, int stem_len) 1131 { 1132 ap->np = np; 1133 ap->id = id; 1134 strncpy(ap->stem, stem, stem_len); 1135 ap->stem[stem_len] = 0; 1136 list_add_tail(&ap->link, &aliases_lookup); 1137 pr_debug("adding DT alias:%s: stem=%s id=%i node=%s\n", 1138 ap->alias, ap->stem, ap->id, np ? np->full_name : NULL); 1139 } 1140 1141 /** 1142 * of_alias_scan - Scan all properties of 'aliases' node 1143 * 1144 * The function scans all the properties of 'aliases' node and populate 1145 * the the global lookup table with the properties. It returns the 1146 * number of alias_prop found, or error code in error case. 1147 * 1148 * @dt_alloc: An allocator that provides a virtual address to memory 1149 * for the resulting tree 1150 */ 1151 void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)) 1152 { 1153 struct property *pp; 1154 1155 of_chosen = of_find_node_by_path("/chosen"); 1156 if (of_chosen == NULL) 1157 of_chosen = of_find_node_by_path("/chosen@0"); 1158 of_aliases = of_find_node_by_path("/aliases"); 1159 if (!of_aliases) 1160 return; 1161 1162 for_each_property(pp, of_aliases->properties) { 1163 const char *start = pp->name; 1164 const char *end = start + strlen(start); 1165 struct device_node *np; 1166 struct alias_prop *ap; 1167 int id, len; 1168 1169 /* Skip those we do not want to proceed */ 1170 if (!strcmp(pp->name, "name") || 1171 !strcmp(pp->name, "phandle") || 1172 !strcmp(pp->name, "linux,phandle")) 1173 continue; 1174 1175 np = of_find_node_by_path(pp->value); 1176 if (!np) 1177 continue; 1178 1179 /* walk the alias backwards to extract the id and work out 1180 * the 'stem' string */ 1181 while (isdigit(*(end-1)) && end > start) 1182 end--; 1183 len = end - start; 1184 1185 if (kstrtoint(end, 10, &id) < 0) 1186 continue; 1187 1188 /* Allocate an alias_prop with enough space for the stem */ 1189 ap = dt_alloc(sizeof(*ap) + len + 1, 4); 1190 if (!ap) 1191 continue; 1192 ap->alias = start; 1193 of_alias_add(ap, np, id, start, len); 1194 } 1195 } 1196 1197 /** 1198 * of_alias_get_id - Get alias id for the given device_node 1199 * @np: Pointer to the given device_node 1200 * @stem: Alias stem of the given device_node 1201 * 1202 * The function travels the lookup table to get alias id for the given 1203 * device_node and alias stem. It returns the alias id if find it. 1204 */ 1205 int of_alias_get_id(struct device_node *np, const char *stem) 1206 { 1207 struct alias_prop *app; 1208 int id = -ENODEV; 1209 1210 mutex_lock(&of_aliases_mutex); 1211 list_for_each_entry(app, &aliases_lookup, link) { 1212 if (strcmp(app->stem, stem) != 0) 1213 continue; 1214 1215 if (np == app->np) { 1216 id = app->id; 1217 break; 1218 } 1219 } 1220 mutex_unlock(&of_aliases_mutex); 1221 1222 return id; 1223 } 1224 EXPORT_SYMBOL_GPL(of_alias_get_id); 1225