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; pp = pp->next) { 177 if (of_prop_cmp(pp->name, name) == 0) { 178 if (lenp) 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; 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 (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 * of_property_match_string() - Find string in a list and return index 766 * @np: pointer to node containing string list property 767 * @propname: string list property name 768 * @string: pointer to string to search for in string list 769 * 770 * This function searches a string list property and returns the index 771 * of a specific string value. 772 */ 773 int of_property_match_string(struct device_node *np, const char *propname, 774 const char *string) 775 { 776 struct property *prop = of_find_property(np, propname, NULL); 777 size_t l; 778 int i; 779 const char *p, *end; 780 781 if (!prop) 782 return -EINVAL; 783 if (!prop->value) 784 return -ENODATA; 785 786 p = prop->value; 787 end = p + prop->length; 788 789 for (i = 0; p < end; i++, p += l) { 790 l = strlen(p) + 1; 791 if (p + l > end) 792 return -EILSEQ; 793 pr_debug("comparing %s with %s\n", string, p); 794 if (strcmp(string, p) == 0) 795 return i; /* Found it; return index */ 796 } 797 return -ENODATA; 798 } 799 EXPORT_SYMBOL_GPL(of_property_match_string); 800 801 /** 802 * of_property_count_strings - Find and return the number of strings from a 803 * multiple strings property. 804 * @np: device node from which the property value is to be read. 805 * @propname: name of the property to be searched. 806 * 807 * Search for a property in a device tree node and retrieve the number of null 808 * terminated string contain in it. Returns the number of strings on 809 * success, -EINVAL if the property does not exist, -ENODATA if property 810 * does not have a value, and -EILSEQ if the string is not null-terminated 811 * within the length of the property data. 812 */ 813 int of_property_count_strings(struct device_node *np, const char *propname) 814 { 815 struct property *prop = of_find_property(np, propname, NULL); 816 int i = 0; 817 size_t l = 0, total = 0; 818 const char *p; 819 820 if (!prop) 821 return -EINVAL; 822 if (!prop->value) 823 return -ENODATA; 824 if (strnlen(prop->value, prop->length) >= prop->length) 825 return -EILSEQ; 826 827 p = prop->value; 828 829 for (i = 0; total < prop->length; total += l, p += l, i++) 830 l = strlen(p) + 1; 831 832 return i; 833 } 834 EXPORT_SYMBOL_GPL(of_property_count_strings); 835 836 /** 837 * of_parse_phandle - Resolve a phandle property to a device_node pointer 838 * @np: Pointer to device node holding phandle property 839 * @phandle_name: Name of property holding a phandle value 840 * @index: For properties holding a table of phandles, this is the index into 841 * the table 842 * 843 * Returns the device_node pointer with refcount incremented. Use 844 * of_node_put() on it when done. 845 */ 846 struct device_node * 847 of_parse_phandle(struct device_node *np, const char *phandle_name, int index) 848 { 849 const __be32 *phandle; 850 int size; 851 852 phandle = of_get_property(np, phandle_name, &size); 853 if ((!phandle) || (size < sizeof(*phandle) * (index + 1))) 854 return NULL; 855 856 return of_find_node_by_phandle(be32_to_cpup(phandle + index)); 857 } 858 EXPORT_SYMBOL(of_parse_phandle); 859 860 /** 861 * of_parse_phandle_with_args() - Find a node pointed by phandle in a list 862 * @np: pointer to a device tree node containing a list 863 * @list_name: property name that contains a list 864 * @cells_name: property name that specifies phandles' arguments count 865 * @index: index of a phandle to parse out 866 * @out_args: optional pointer to output arguments structure (will be filled) 867 * 868 * This function is useful to parse lists of phandles and their arguments. 869 * Returns 0 on success and fills out_args, on error returns appropriate 870 * errno value. 871 * 872 * Caller is responsible to call of_node_put() on the returned out_args->node 873 * pointer. 874 * 875 * Example: 876 * 877 * phandle1: node1 { 878 * #list-cells = <2>; 879 * } 880 * 881 * phandle2: node2 { 882 * #list-cells = <1>; 883 * } 884 * 885 * node3 { 886 * list = <&phandle1 1 2 &phandle2 3>; 887 * } 888 * 889 * To get a device_node of the `node2' node you may call this: 890 * of_parse_phandle_with_args(node3, "list", "#list-cells", 1, &args); 891 */ 892 int of_parse_phandle_with_args(struct device_node *np, const char *list_name, 893 const char *cells_name, int index, 894 struct of_phandle_args *out_args) 895 { 896 const __be32 *list, *list_end; 897 int size, cur_index = 0; 898 uint32_t count = 0; 899 struct device_node *node = NULL; 900 phandle phandle; 901 902 /* Retrieve the phandle list property */ 903 list = of_get_property(np, list_name, &size); 904 if (!list) 905 return -ENOENT; 906 list_end = list + size / sizeof(*list); 907 908 /* Loop over the phandles until all the requested entry is found */ 909 while (list < list_end) { 910 count = 0; 911 912 /* 913 * If phandle is 0, then it is an empty entry with no 914 * arguments. Skip forward to the next entry. 915 */ 916 phandle = be32_to_cpup(list++); 917 if (phandle) { 918 /* 919 * Find the provider node and parse the #*-cells 920 * property to determine the argument length 921 */ 922 node = of_find_node_by_phandle(phandle); 923 if (!node) { 924 pr_err("%s: could not find phandle\n", 925 np->full_name); 926 break; 927 } 928 if (of_property_read_u32(node, cells_name, &count)) { 929 pr_err("%s: could not get %s for %s\n", 930 np->full_name, cells_name, 931 node->full_name); 932 break; 933 } 934 935 /* 936 * Make sure that the arguments actually fit in the 937 * remaining property data length 938 */ 939 if (list + count > list_end) { 940 pr_err("%s: arguments longer than property\n", 941 np->full_name); 942 break; 943 } 944 } 945 946 /* 947 * All of the error cases above bail out of the loop, so at 948 * this point, the parsing is successful. If the requested 949 * index matches, then fill the out_args structure and return, 950 * or return -ENOENT for an empty entry. 951 */ 952 if (cur_index == index) { 953 if (!phandle) 954 return -ENOENT; 955 956 if (out_args) { 957 int i; 958 if (WARN_ON(count > MAX_PHANDLE_ARGS)) 959 count = MAX_PHANDLE_ARGS; 960 out_args->np = node; 961 out_args->args_count = count; 962 for (i = 0; i < count; i++) 963 out_args->args[i] = be32_to_cpup(list++); 964 } 965 return 0; 966 } 967 968 of_node_put(node); 969 node = NULL; 970 list += count; 971 cur_index++; 972 } 973 974 /* Loop exited without finding a valid entry; return an error */ 975 if (node) 976 of_node_put(node); 977 return -EINVAL; 978 } 979 EXPORT_SYMBOL(of_parse_phandle_with_args); 980 981 /** 982 * prom_add_property - Add a property to a node 983 */ 984 int prom_add_property(struct device_node *np, struct property *prop) 985 { 986 struct property **next; 987 unsigned long flags; 988 989 prop->next = NULL; 990 write_lock_irqsave(&devtree_lock, flags); 991 next = &np->properties; 992 while (*next) { 993 if (strcmp(prop->name, (*next)->name) == 0) { 994 /* duplicate ! don't insert it */ 995 write_unlock_irqrestore(&devtree_lock, flags); 996 return -1; 997 } 998 next = &(*next)->next; 999 } 1000 *next = prop; 1001 write_unlock_irqrestore(&devtree_lock, flags); 1002 1003 #ifdef CONFIG_PROC_DEVICETREE 1004 /* try to add to proc as well if it was initialized */ 1005 if (np->pde) 1006 proc_device_tree_add_prop(np->pde, prop); 1007 #endif /* CONFIG_PROC_DEVICETREE */ 1008 1009 return 0; 1010 } 1011 1012 /** 1013 * prom_remove_property - Remove a property from a node. 1014 * 1015 * Note that we don't actually remove it, since we have given out 1016 * who-knows-how-many pointers to the data using get-property. 1017 * Instead we just move the property to the "dead properties" 1018 * list, so it won't be found any more. 1019 */ 1020 int prom_remove_property(struct device_node *np, struct property *prop) 1021 { 1022 struct property **next; 1023 unsigned long flags; 1024 int found = 0; 1025 1026 write_lock_irqsave(&devtree_lock, flags); 1027 next = &np->properties; 1028 while (*next) { 1029 if (*next == prop) { 1030 /* found the node */ 1031 *next = prop->next; 1032 prop->next = np->deadprops; 1033 np->deadprops = prop; 1034 found = 1; 1035 break; 1036 } 1037 next = &(*next)->next; 1038 } 1039 write_unlock_irqrestore(&devtree_lock, flags); 1040 1041 if (!found) 1042 return -ENODEV; 1043 1044 #ifdef CONFIG_PROC_DEVICETREE 1045 /* try to remove the proc node as well */ 1046 if (np->pde) 1047 proc_device_tree_remove_prop(np->pde, prop); 1048 #endif /* CONFIG_PROC_DEVICETREE */ 1049 1050 return 0; 1051 } 1052 1053 /* 1054 * prom_update_property - Update a property in a node, if the property does 1055 * not exist, add it. 1056 * 1057 * Note that we don't actually remove it, since we have given out 1058 * who-knows-how-many pointers to the data using get-property. 1059 * Instead we just move the property to the "dead properties" list, 1060 * and add the new property to the property list 1061 */ 1062 int prom_update_property(struct device_node *np, 1063 struct property *newprop) 1064 { 1065 struct property **next, *oldprop; 1066 unsigned long flags; 1067 int found = 0; 1068 1069 if (!newprop->name) 1070 return -EINVAL; 1071 1072 oldprop = of_find_property(np, newprop->name, NULL); 1073 if (!oldprop) 1074 return prom_add_property(np, newprop); 1075 1076 write_lock_irqsave(&devtree_lock, flags); 1077 next = &np->properties; 1078 while (*next) { 1079 if (*next == oldprop) { 1080 /* found the node */ 1081 newprop->next = oldprop->next; 1082 *next = newprop; 1083 oldprop->next = np->deadprops; 1084 np->deadprops = oldprop; 1085 found = 1; 1086 break; 1087 } 1088 next = &(*next)->next; 1089 } 1090 write_unlock_irqrestore(&devtree_lock, flags); 1091 1092 if (!found) 1093 return -ENODEV; 1094 1095 #ifdef CONFIG_PROC_DEVICETREE 1096 /* try to add to proc as well if it was initialized */ 1097 if (np->pde) 1098 proc_device_tree_update_prop(np->pde, newprop, oldprop); 1099 #endif /* CONFIG_PROC_DEVICETREE */ 1100 1101 return 0; 1102 } 1103 1104 #if defined(CONFIG_OF_DYNAMIC) 1105 /* 1106 * Support for dynamic device trees. 1107 * 1108 * On some platforms, the device tree can be manipulated at runtime. 1109 * The routines in this section support adding, removing and changing 1110 * device tree nodes. 1111 */ 1112 1113 /** 1114 * of_attach_node - Plug a device node into the tree and global list. 1115 */ 1116 void of_attach_node(struct device_node *np) 1117 { 1118 unsigned long flags; 1119 1120 write_lock_irqsave(&devtree_lock, flags); 1121 np->sibling = np->parent->child; 1122 np->allnext = allnodes; 1123 np->parent->child = np; 1124 allnodes = np; 1125 write_unlock_irqrestore(&devtree_lock, flags); 1126 } 1127 1128 /** 1129 * of_detach_node - "Unplug" a node from the device tree. 1130 * 1131 * The caller must hold a reference to the node. The memory associated with 1132 * the node is not freed until its refcount goes to zero. 1133 */ 1134 void of_detach_node(struct device_node *np) 1135 { 1136 struct device_node *parent; 1137 unsigned long flags; 1138 1139 write_lock_irqsave(&devtree_lock, flags); 1140 1141 parent = np->parent; 1142 if (!parent) 1143 goto out_unlock; 1144 1145 if (allnodes == np) 1146 allnodes = np->allnext; 1147 else { 1148 struct device_node *prev; 1149 for (prev = allnodes; 1150 prev->allnext != np; 1151 prev = prev->allnext) 1152 ; 1153 prev->allnext = np->allnext; 1154 } 1155 1156 if (parent->child == np) 1157 parent->child = np->sibling; 1158 else { 1159 struct device_node *prevsib; 1160 for (prevsib = np->parent->child; 1161 prevsib->sibling != np; 1162 prevsib = prevsib->sibling) 1163 ; 1164 prevsib->sibling = np->sibling; 1165 } 1166 1167 of_node_set_flag(np, OF_DETACHED); 1168 1169 out_unlock: 1170 write_unlock_irqrestore(&devtree_lock, flags); 1171 } 1172 #endif /* defined(CONFIG_OF_DYNAMIC) */ 1173 1174 static void of_alias_add(struct alias_prop *ap, struct device_node *np, 1175 int id, const char *stem, int stem_len) 1176 { 1177 ap->np = np; 1178 ap->id = id; 1179 strncpy(ap->stem, stem, stem_len); 1180 ap->stem[stem_len] = 0; 1181 list_add_tail(&ap->link, &aliases_lookup); 1182 pr_debug("adding DT alias:%s: stem=%s id=%i node=%s\n", 1183 ap->alias, ap->stem, ap->id, of_node_full_name(np)); 1184 } 1185 1186 /** 1187 * of_alias_scan - Scan all properties of 'aliases' node 1188 * 1189 * The function scans all the properties of 'aliases' node and populate 1190 * the the global lookup table with the properties. It returns the 1191 * number of alias_prop found, or error code in error case. 1192 * 1193 * @dt_alloc: An allocator that provides a virtual address to memory 1194 * for the resulting tree 1195 */ 1196 void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)) 1197 { 1198 struct property *pp; 1199 1200 of_chosen = of_find_node_by_path("/chosen"); 1201 if (of_chosen == NULL) 1202 of_chosen = of_find_node_by_path("/chosen@0"); 1203 of_aliases = of_find_node_by_path("/aliases"); 1204 if (!of_aliases) 1205 return; 1206 1207 for_each_property_of_node(of_aliases, pp) { 1208 const char *start = pp->name; 1209 const char *end = start + strlen(start); 1210 struct device_node *np; 1211 struct alias_prop *ap; 1212 int id, len; 1213 1214 /* Skip those we do not want to proceed */ 1215 if (!strcmp(pp->name, "name") || 1216 !strcmp(pp->name, "phandle") || 1217 !strcmp(pp->name, "linux,phandle")) 1218 continue; 1219 1220 np = of_find_node_by_path(pp->value); 1221 if (!np) 1222 continue; 1223 1224 /* walk the alias backwards to extract the id and work out 1225 * the 'stem' string */ 1226 while (isdigit(*(end-1)) && end > start) 1227 end--; 1228 len = end - start; 1229 1230 if (kstrtoint(end, 10, &id) < 0) 1231 continue; 1232 1233 /* Allocate an alias_prop with enough space for the stem */ 1234 ap = dt_alloc(sizeof(*ap) + len + 1, 4); 1235 if (!ap) 1236 continue; 1237 ap->alias = start; 1238 of_alias_add(ap, np, id, start, len); 1239 } 1240 } 1241 1242 /** 1243 * of_alias_get_id - Get alias id for the given device_node 1244 * @np: Pointer to the given device_node 1245 * @stem: Alias stem of the given device_node 1246 * 1247 * The function travels the lookup table to get alias id for the given 1248 * device_node and alias stem. It returns the alias id if find it. 1249 */ 1250 int of_alias_get_id(struct device_node *np, const char *stem) 1251 { 1252 struct alias_prop *app; 1253 int id = -ENODEV; 1254 1255 mutex_lock(&of_aliases_mutex); 1256 list_for_each_entry(app, &aliases_lookup, link) { 1257 if (strcmp(app->stem, stem) != 0) 1258 continue; 1259 1260 if (np == app->np) { 1261 id = app->id; 1262 break; 1263 } 1264 } 1265 mutex_unlock(&of_aliases_mutex); 1266 1267 return id; 1268 } 1269 EXPORT_SYMBOL_GPL(of_alias_get_id); 1270 1271 const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur, 1272 u32 *pu) 1273 { 1274 const void *curv = cur; 1275 1276 if (!prop) 1277 return NULL; 1278 1279 if (!cur) { 1280 curv = prop->value; 1281 goto out_val; 1282 } 1283 1284 curv += sizeof(*cur); 1285 if (curv >= prop->value + prop->length) 1286 return NULL; 1287 1288 out_val: 1289 *pu = be32_to_cpup(curv); 1290 return curv; 1291 } 1292 EXPORT_SYMBOL_GPL(of_prop_next_u32); 1293 1294 const char *of_prop_next_string(struct property *prop, const char *cur) 1295 { 1296 const void *curv = cur; 1297 1298 if (!prop) 1299 return NULL; 1300 1301 if (!cur) 1302 return prop->value; 1303 1304 curv += strlen(cur) + 1; 1305 if (curv >= prop->value + prop->length) 1306 return NULL; 1307 1308 return curv; 1309 } 1310 EXPORT_SYMBOL_GPL(of_prop_next_string); 1311