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/cpu.h> 22 #include <linux/module.h> 23 #include <linux/of.h> 24 #include <linux/spinlock.h> 25 #include <linux/slab.h> 26 #include <linux/proc_fs.h> 27 28 #include "of_private.h" 29 30 LIST_HEAD(aliases_lookup); 31 32 struct device_node *of_allnodes; 33 EXPORT_SYMBOL(of_allnodes); 34 struct device_node *of_chosen; 35 struct device_node *of_aliases; 36 static struct device_node *of_stdout; 37 38 DEFINE_MUTEX(of_aliases_mutex); 39 40 /* use when traversing tree through the allnext, child, sibling, 41 * or parent members of struct device_node. 42 */ 43 DEFINE_RAW_SPINLOCK(devtree_lock); 44 45 int of_n_addr_cells(struct device_node *np) 46 { 47 const __be32 *ip; 48 49 do { 50 if (np->parent) 51 np = np->parent; 52 ip = of_get_property(np, "#address-cells", NULL); 53 if (ip) 54 return be32_to_cpup(ip); 55 } while (np->parent); 56 /* No #address-cells property for the root node */ 57 return OF_ROOT_NODE_ADDR_CELLS_DEFAULT; 58 } 59 EXPORT_SYMBOL(of_n_addr_cells); 60 61 int of_n_size_cells(struct device_node *np) 62 { 63 const __be32 *ip; 64 65 do { 66 if (np->parent) 67 np = np->parent; 68 ip = of_get_property(np, "#size-cells", NULL); 69 if (ip) 70 return be32_to_cpup(ip); 71 } while (np->parent); 72 /* No #size-cells property for the root node */ 73 return OF_ROOT_NODE_SIZE_CELLS_DEFAULT; 74 } 75 EXPORT_SYMBOL(of_n_size_cells); 76 77 #if defined(CONFIG_OF_DYNAMIC) 78 /** 79 * of_node_get - Increment refcount of a node 80 * @node: Node to inc refcount, NULL is supported to 81 * simplify writing of callers 82 * 83 * Returns node. 84 */ 85 struct device_node *of_node_get(struct device_node *node) 86 { 87 if (node) 88 kref_get(&node->kref); 89 return node; 90 } 91 EXPORT_SYMBOL(of_node_get); 92 93 static inline struct device_node *kref_to_device_node(struct kref *kref) 94 { 95 return container_of(kref, struct device_node, kref); 96 } 97 98 /** 99 * of_node_release - release a dynamically allocated node 100 * @kref: kref element of the node to be released 101 * 102 * In of_node_put() this function is passed to kref_put() 103 * as the destructor. 104 */ 105 static void of_node_release(struct kref *kref) 106 { 107 struct device_node *node = kref_to_device_node(kref); 108 struct property *prop = node->properties; 109 110 /* We should never be releasing nodes that haven't been detached. */ 111 if (!of_node_check_flag(node, OF_DETACHED)) { 112 pr_err("ERROR: Bad of_node_put() on %s\n", node->full_name); 113 dump_stack(); 114 kref_init(&node->kref); 115 return; 116 } 117 118 if (!of_node_check_flag(node, OF_DYNAMIC)) 119 return; 120 121 while (prop) { 122 struct property *next = prop->next; 123 kfree(prop->name); 124 kfree(prop->value); 125 kfree(prop); 126 prop = next; 127 128 if (!prop) { 129 prop = node->deadprops; 130 node->deadprops = NULL; 131 } 132 } 133 kfree(node->full_name); 134 kfree(node->data); 135 kfree(node); 136 } 137 138 /** 139 * of_node_put - Decrement refcount of a node 140 * @node: Node to dec refcount, NULL is supported to 141 * simplify writing of callers 142 * 143 */ 144 void of_node_put(struct device_node *node) 145 { 146 if (node) 147 kref_put(&node->kref, of_node_release); 148 } 149 EXPORT_SYMBOL(of_node_put); 150 #endif /* CONFIG_OF_DYNAMIC */ 151 152 static struct property *__of_find_property(const struct device_node *np, 153 const char *name, int *lenp) 154 { 155 struct property *pp; 156 157 if (!np) 158 return NULL; 159 160 for (pp = np->properties; pp; pp = pp->next) { 161 if (of_prop_cmp(pp->name, name) == 0) { 162 if (lenp) 163 *lenp = pp->length; 164 break; 165 } 166 } 167 168 return pp; 169 } 170 171 struct property *of_find_property(const struct device_node *np, 172 const char *name, 173 int *lenp) 174 { 175 struct property *pp; 176 unsigned long flags; 177 178 raw_spin_lock_irqsave(&devtree_lock, flags); 179 pp = __of_find_property(np, name, lenp); 180 raw_spin_unlock_irqrestore(&devtree_lock, flags); 181 182 return pp; 183 } 184 EXPORT_SYMBOL(of_find_property); 185 186 /** 187 * of_find_all_nodes - Get next node in global list 188 * @prev: Previous node or NULL to start iteration 189 * of_node_put() will be called on it 190 * 191 * Returns a node pointer with refcount incremented, use 192 * of_node_put() on it when done. 193 */ 194 struct device_node *of_find_all_nodes(struct device_node *prev) 195 { 196 struct device_node *np; 197 unsigned long flags; 198 199 raw_spin_lock_irqsave(&devtree_lock, flags); 200 np = prev ? prev->allnext : of_allnodes; 201 for (; np != NULL; np = np->allnext) 202 if (of_node_get(np)) 203 break; 204 of_node_put(prev); 205 raw_spin_unlock_irqrestore(&devtree_lock, flags); 206 return np; 207 } 208 EXPORT_SYMBOL(of_find_all_nodes); 209 210 /* 211 * Find a property with a given name for a given node 212 * and return the value. 213 */ 214 static const void *__of_get_property(const struct device_node *np, 215 const char *name, int *lenp) 216 { 217 struct property *pp = __of_find_property(np, name, lenp); 218 219 return pp ? pp->value : NULL; 220 } 221 222 /* 223 * Find a property with a given name for a given node 224 * and return the value. 225 */ 226 const void *of_get_property(const struct device_node *np, const char *name, 227 int *lenp) 228 { 229 struct property *pp = of_find_property(np, name, lenp); 230 231 return pp ? pp->value : NULL; 232 } 233 EXPORT_SYMBOL(of_get_property); 234 235 /* 236 * arch_match_cpu_phys_id - Match the given logical CPU and physical id 237 * 238 * @cpu: logical cpu index of a core/thread 239 * @phys_id: physical identifier of a core/thread 240 * 241 * CPU logical to physical index mapping is architecture specific. 242 * However this __weak function provides a default match of physical 243 * id to logical cpu index. phys_id provided here is usually values read 244 * from the device tree which must match the hardware internal registers. 245 * 246 * Returns true if the physical identifier and the logical cpu index 247 * correspond to the same core/thread, false otherwise. 248 */ 249 bool __weak arch_match_cpu_phys_id(int cpu, u64 phys_id) 250 { 251 return (u32)phys_id == cpu; 252 } 253 254 /** 255 * Checks if the given "prop_name" property holds the physical id of the 256 * core/thread corresponding to the logical cpu 'cpu'. If 'thread' is not 257 * NULL, local thread number within the core is returned in it. 258 */ 259 static bool __of_find_n_match_cpu_property(struct device_node *cpun, 260 const char *prop_name, int cpu, unsigned int *thread) 261 { 262 const __be32 *cell; 263 int ac, prop_len, tid; 264 u64 hwid; 265 266 ac = of_n_addr_cells(cpun); 267 cell = of_get_property(cpun, prop_name, &prop_len); 268 if (!cell) 269 return false; 270 prop_len /= sizeof(*cell); 271 for (tid = 0; tid < prop_len; tid++) { 272 hwid = of_read_number(cell, ac); 273 if (arch_match_cpu_phys_id(cpu, hwid)) { 274 if (thread) 275 *thread = tid; 276 return true; 277 } 278 cell += ac; 279 } 280 return false; 281 } 282 283 /** 284 * of_get_cpu_node - Get device node associated with the given logical CPU 285 * 286 * @cpu: CPU number(logical index) for which device node is required 287 * @thread: if not NULL, local thread number within the physical core is 288 * returned 289 * 290 * The main purpose of this function is to retrieve the device node for the 291 * given logical CPU index. It should be used to initialize the of_node in 292 * cpu device. Once of_node in cpu device is populated, all the further 293 * references can use that instead. 294 * 295 * CPU logical to physical index mapping is architecture specific and is built 296 * before booting secondary cores. This function uses arch_match_cpu_phys_id 297 * which can be overridden by architecture specific implementation. 298 * 299 * Returns a node pointer for the logical cpu if found, else NULL. 300 */ 301 struct device_node *of_get_cpu_node(int cpu, unsigned int *thread) 302 { 303 struct device_node *cpun, *cpus; 304 305 cpus = of_find_node_by_path("/cpus"); 306 if (!cpus) 307 return NULL; 308 309 for_each_child_of_node(cpus, cpun) { 310 if (of_node_cmp(cpun->type, "cpu")) 311 continue; 312 /* Check for non-standard "ibm,ppc-interrupt-server#s" property 313 * for thread ids on PowerPC. If it doesn't exist fallback to 314 * standard "reg" property. 315 */ 316 if (IS_ENABLED(CONFIG_PPC) && 317 __of_find_n_match_cpu_property(cpun, 318 "ibm,ppc-interrupt-server#s", cpu, thread)) 319 return cpun; 320 if (__of_find_n_match_cpu_property(cpun, "reg", cpu, thread)) 321 return cpun; 322 } 323 return NULL; 324 } 325 EXPORT_SYMBOL(of_get_cpu_node); 326 327 /** Checks if the given "compat" string matches one of the strings in 328 * the device's "compatible" property 329 */ 330 static int __of_device_is_compatible(const struct device_node *device, 331 const char *compat) 332 { 333 const char* cp; 334 int cplen, l; 335 336 cp = __of_get_property(device, "compatible", &cplen); 337 if (cp == NULL) 338 return 0; 339 while (cplen > 0) { 340 if (of_compat_cmp(cp, compat, strlen(compat)) == 0) 341 return 1; 342 l = strlen(cp) + 1; 343 cp += l; 344 cplen -= l; 345 } 346 347 return 0; 348 } 349 350 /** Checks if the given "compat" string matches one of the strings in 351 * the device's "compatible" property 352 */ 353 int of_device_is_compatible(const struct device_node *device, 354 const char *compat) 355 { 356 unsigned long flags; 357 int res; 358 359 raw_spin_lock_irqsave(&devtree_lock, flags); 360 res = __of_device_is_compatible(device, compat); 361 raw_spin_unlock_irqrestore(&devtree_lock, flags); 362 return res; 363 } 364 EXPORT_SYMBOL(of_device_is_compatible); 365 366 /** 367 * of_machine_is_compatible - Test root of device tree for a given compatible value 368 * @compat: compatible string to look for in root node's compatible property. 369 * 370 * Returns true if the root node has the given value in its 371 * compatible property. 372 */ 373 int of_machine_is_compatible(const char *compat) 374 { 375 struct device_node *root; 376 int rc = 0; 377 378 root = of_find_node_by_path("/"); 379 if (root) { 380 rc = of_device_is_compatible(root, compat); 381 of_node_put(root); 382 } 383 return rc; 384 } 385 EXPORT_SYMBOL(of_machine_is_compatible); 386 387 /** 388 * __of_device_is_available - check if a device is available for use 389 * 390 * @device: Node to check for availability, with locks already held 391 * 392 * Returns 1 if the status property is absent or set to "okay" or "ok", 393 * 0 otherwise 394 */ 395 static int __of_device_is_available(const struct device_node *device) 396 { 397 const char *status; 398 int statlen; 399 400 status = __of_get_property(device, "status", &statlen); 401 if (status == NULL) 402 return 1; 403 404 if (statlen > 0) { 405 if (!strcmp(status, "okay") || !strcmp(status, "ok")) 406 return 1; 407 } 408 409 return 0; 410 } 411 412 /** 413 * of_device_is_available - check if a device is available for use 414 * 415 * @device: Node to check for availability 416 * 417 * Returns 1 if the status property is absent or set to "okay" or "ok", 418 * 0 otherwise 419 */ 420 int of_device_is_available(const struct device_node *device) 421 { 422 unsigned long flags; 423 int res; 424 425 raw_spin_lock_irqsave(&devtree_lock, flags); 426 res = __of_device_is_available(device); 427 raw_spin_unlock_irqrestore(&devtree_lock, flags); 428 return res; 429 430 } 431 EXPORT_SYMBOL(of_device_is_available); 432 433 /** 434 * of_get_parent - Get a node's parent if any 435 * @node: Node to get parent 436 * 437 * Returns a node pointer with refcount incremented, use 438 * of_node_put() on it when done. 439 */ 440 struct device_node *of_get_parent(const struct device_node *node) 441 { 442 struct device_node *np; 443 unsigned long flags; 444 445 if (!node) 446 return NULL; 447 448 raw_spin_lock_irqsave(&devtree_lock, flags); 449 np = of_node_get(node->parent); 450 raw_spin_unlock_irqrestore(&devtree_lock, flags); 451 return np; 452 } 453 EXPORT_SYMBOL(of_get_parent); 454 455 /** 456 * of_get_next_parent - Iterate to a node's parent 457 * @node: Node to get parent of 458 * 459 * This is like of_get_parent() except that it drops the 460 * refcount on the passed node, making it suitable for iterating 461 * through a node's parents. 462 * 463 * Returns a node pointer with refcount incremented, use 464 * of_node_put() on it when done. 465 */ 466 struct device_node *of_get_next_parent(struct device_node *node) 467 { 468 struct device_node *parent; 469 unsigned long flags; 470 471 if (!node) 472 return NULL; 473 474 raw_spin_lock_irqsave(&devtree_lock, flags); 475 parent = of_node_get(node->parent); 476 of_node_put(node); 477 raw_spin_unlock_irqrestore(&devtree_lock, flags); 478 return parent; 479 } 480 EXPORT_SYMBOL(of_get_next_parent); 481 482 /** 483 * of_get_next_child - Iterate a node childs 484 * @node: parent node 485 * @prev: previous child of the parent node, or NULL to get first 486 * 487 * Returns a node pointer with refcount incremented, use 488 * of_node_put() on it when done. 489 */ 490 struct device_node *of_get_next_child(const struct device_node *node, 491 struct device_node *prev) 492 { 493 struct device_node *next; 494 unsigned long flags; 495 496 raw_spin_lock_irqsave(&devtree_lock, flags); 497 next = prev ? prev->sibling : node->child; 498 for (; next; next = next->sibling) 499 if (of_node_get(next)) 500 break; 501 of_node_put(prev); 502 raw_spin_unlock_irqrestore(&devtree_lock, flags); 503 return next; 504 } 505 EXPORT_SYMBOL(of_get_next_child); 506 507 /** 508 * of_get_next_available_child - Find the next available child node 509 * @node: parent node 510 * @prev: previous child of the parent node, or NULL to get first 511 * 512 * This function is like of_get_next_child(), except that it 513 * automatically skips any disabled nodes (i.e. status = "disabled"). 514 */ 515 struct device_node *of_get_next_available_child(const struct device_node *node, 516 struct device_node *prev) 517 { 518 struct device_node *next; 519 unsigned long flags; 520 521 raw_spin_lock_irqsave(&devtree_lock, flags); 522 next = prev ? prev->sibling : node->child; 523 for (; next; next = next->sibling) { 524 if (!__of_device_is_available(next)) 525 continue; 526 if (of_node_get(next)) 527 break; 528 } 529 of_node_put(prev); 530 raw_spin_unlock_irqrestore(&devtree_lock, flags); 531 return next; 532 } 533 EXPORT_SYMBOL(of_get_next_available_child); 534 535 /** 536 * of_get_child_by_name - Find the child node by name for a given parent 537 * @node: parent node 538 * @name: child name to look for. 539 * 540 * This function looks for child node for given matching name 541 * 542 * Returns a node pointer if found, with refcount incremented, use 543 * of_node_put() on it when done. 544 * Returns NULL if node is not found. 545 */ 546 struct device_node *of_get_child_by_name(const struct device_node *node, 547 const char *name) 548 { 549 struct device_node *child; 550 551 for_each_child_of_node(node, child) 552 if (child->name && (of_node_cmp(child->name, name) == 0)) 553 break; 554 return child; 555 } 556 EXPORT_SYMBOL(of_get_child_by_name); 557 558 /** 559 * of_find_node_by_path - Find a node matching a full OF path 560 * @path: The full path to match 561 * 562 * Returns a node pointer with refcount incremented, use 563 * of_node_put() on it when done. 564 */ 565 struct device_node *of_find_node_by_path(const char *path) 566 { 567 struct device_node *np = of_allnodes; 568 unsigned long flags; 569 570 raw_spin_lock_irqsave(&devtree_lock, flags); 571 for (; np; np = np->allnext) { 572 if (np->full_name && (of_node_cmp(np->full_name, path) == 0) 573 && of_node_get(np)) 574 break; 575 } 576 raw_spin_unlock_irqrestore(&devtree_lock, flags); 577 return np; 578 } 579 EXPORT_SYMBOL(of_find_node_by_path); 580 581 /** 582 * of_find_node_by_name - Find a node by its "name" property 583 * @from: The node to start searching from or NULL, the node 584 * you pass will not be searched, only the next one 585 * will; typically, you pass what the previous call 586 * returned. of_node_put() will be called on it 587 * @name: The name string to match against 588 * 589 * Returns a node pointer with refcount incremented, use 590 * of_node_put() on it when done. 591 */ 592 struct device_node *of_find_node_by_name(struct device_node *from, 593 const char *name) 594 { 595 struct device_node *np; 596 unsigned long flags; 597 598 raw_spin_lock_irqsave(&devtree_lock, flags); 599 np = from ? from->allnext : of_allnodes; 600 for (; np; np = np->allnext) 601 if (np->name && (of_node_cmp(np->name, name) == 0) 602 && of_node_get(np)) 603 break; 604 of_node_put(from); 605 raw_spin_unlock_irqrestore(&devtree_lock, flags); 606 return np; 607 } 608 EXPORT_SYMBOL(of_find_node_by_name); 609 610 /** 611 * of_find_node_by_type - Find a node by its "device_type" property 612 * @from: The node to start searching from, or NULL to start searching 613 * the entire device tree. The node you pass will not be 614 * searched, only the next one will; typically, you pass 615 * what the previous call returned. of_node_put() will be 616 * called on from for you. 617 * @type: The type string to match against 618 * 619 * Returns a node pointer with refcount incremented, use 620 * of_node_put() on it when done. 621 */ 622 struct device_node *of_find_node_by_type(struct device_node *from, 623 const char *type) 624 { 625 struct device_node *np; 626 unsigned long flags; 627 628 raw_spin_lock_irqsave(&devtree_lock, flags); 629 np = from ? from->allnext : of_allnodes; 630 for (; np; np = np->allnext) 631 if (np->type && (of_node_cmp(np->type, type) == 0) 632 && of_node_get(np)) 633 break; 634 of_node_put(from); 635 raw_spin_unlock_irqrestore(&devtree_lock, flags); 636 return np; 637 } 638 EXPORT_SYMBOL(of_find_node_by_type); 639 640 /** 641 * of_find_compatible_node - Find a node based on type and one of the 642 * tokens in its "compatible" property 643 * @from: The node to start searching from or NULL, the node 644 * you pass will not be searched, only the next one 645 * will; typically, you pass what the previous call 646 * returned. of_node_put() will be called on it 647 * @type: The type string to match "device_type" or NULL to ignore 648 * @compatible: The string to match to one of the tokens in the device 649 * "compatible" list. 650 * 651 * Returns a node pointer with refcount incremented, use 652 * of_node_put() on it when done. 653 */ 654 struct device_node *of_find_compatible_node(struct device_node *from, 655 const char *type, const char *compatible) 656 { 657 struct device_node *np; 658 unsigned long flags; 659 660 raw_spin_lock_irqsave(&devtree_lock, flags); 661 np = from ? from->allnext : of_allnodes; 662 for (; np; np = np->allnext) { 663 if (type 664 && !(np->type && (of_node_cmp(np->type, type) == 0))) 665 continue; 666 if (__of_device_is_compatible(np, compatible) && 667 of_node_get(np)) 668 break; 669 } 670 of_node_put(from); 671 raw_spin_unlock_irqrestore(&devtree_lock, flags); 672 return np; 673 } 674 EXPORT_SYMBOL(of_find_compatible_node); 675 676 /** 677 * of_find_node_with_property - Find a node which has a property with 678 * the given name. 679 * @from: The node to start searching from or NULL, the node 680 * you pass will not be searched, only the next one 681 * will; typically, you pass what the previous call 682 * returned. of_node_put() will be called on it 683 * @prop_name: The name of the property to look for. 684 * 685 * Returns a node pointer with refcount incremented, use 686 * of_node_put() on it when done. 687 */ 688 struct device_node *of_find_node_with_property(struct device_node *from, 689 const char *prop_name) 690 { 691 struct device_node *np; 692 struct property *pp; 693 unsigned long flags; 694 695 raw_spin_lock_irqsave(&devtree_lock, flags); 696 np = from ? from->allnext : of_allnodes; 697 for (; np; np = np->allnext) { 698 for (pp = np->properties; pp; pp = pp->next) { 699 if (of_prop_cmp(pp->name, prop_name) == 0) { 700 of_node_get(np); 701 goto out; 702 } 703 } 704 } 705 out: 706 of_node_put(from); 707 raw_spin_unlock_irqrestore(&devtree_lock, flags); 708 return np; 709 } 710 EXPORT_SYMBOL(of_find_node_with_property); 711 712 static 713 const struct of_device_id *__of_match_node(const struct of_device_id *matches, 714 const struct device_node *node) 715 { 716 if (!matches) 717 return NULL; 718 719 while (matches->name[0] || matches->type[0] || matches->compatible[0]) { 720 int match = 1; 721 if (matches->name[0]) 722 match &= node->name 723 && !strcmp(matches->name, node->name); 724 if (matches->type[0]) 725 match &= node->type 726 && !strcmp(matches->type, node->type); 727 if (matches->compatible[0]) 728 match &= __of_device_is_compatible(node, 729 matches->compatible); 730 if (match) 731 return matches; 732 matches++; 733 } 734 return NULL; 735 } 736 737 /** 738 * of_match_node - Tell if an device_node has a matching of_match structure 739 * @matches: array of of device match structures to search in 740 * @node: the of device structure to match against 741 * 742 * Low level utility function used by device matching. 743 */ 744 const struct of_device_id *of_match_node(const struct of_device_id *matches, 745 const struct device_node *node) 746 { 747 const struct of_device_id *match; 748 unsigned long flags; 749 750 raw_spin_lock_irqsave(&devtree_lock, flags); 751 match = __of_match_node(matches, node); 752 raw_spin_unlock_irqrestore(&devtree_lock, flags); 753 return match; 754 } 755 EXPORT_SYMBOL(of_match_node); 756 757 /** 758 * of_find_matching_node_and_match - Find a node based on an of_device_id 759 * match table. 760 * @from: The node to start searching from or NULL, the node 761 * you pass will not be searched, only the next one 762 * will; typically, you pass what the previous call 763 * returned. of_node_put() will be called on it 764 * @matches: array of of device match structures to search in 765 * @match Updated to point at the matches entry which matched 766 * 767 * Returns a node pointer with refcount incremented, use 768 * of_node_put() on it when done. 769 */ 770 struct device_node *of_find_matching_node_and_match(struct device_node *from, 771 const struct of_device_id *matches, 772 const struct of_device_id **match) 773 { 774 struct device_node *np; 775 const struct of_device_id *m; 776 unsigned long flags; 777 778 if (match) 779 *match = NULL; 780 781 raw_spin_lock_irqsave(&devtree_lock, flags); 782 np = from ? from->allnext : of_allnodes; 783 for (; np; np = np->allnext) { 784 m = __of_match_node(matches, np); 785 if (m && of_node_get(np)) { 786 if (match) 787 *match = m; 788 break; 789 } 790 } 791 of_node_put(from); 792 raw_spin_unlock_irqrestore(&devtree_lock, flags); 793 return np; 794 } 795 EXPORT_SYMBOL(of_find_matching_node_and_match); 796 797 /** 798 * of_modalias_node - Lookup appropriate modalias for a device node 799 * @node: pointer to a device tree node 800 * @modalias: Pointer to buffer that modalias value will be copied into 801 * @len: Length of modalias value 802 * 803 * Based on the value of the compatible property, this routine will attempt 804 * to choose an appropriate modalias value for a particular device tree node. 805 * It does this by stripping the manufacturer prefix (as delimited by a ',') 806 * from the first entry in the compatible list property. 807 * 808 * This routine returns 0 on success, <0 on failure. 809 */ 810 int of_modalias_node(struct device_node *node, char *modalias, int len) 811 { 812 const char *compatible, *p; 813 int cplen; 814 815 compatible = of_get_property(node, "compatible", &cplen); 816 if (!compatible || strlen(compatible) > cplen) 817 return -ENODEV; 818 p = strchr(compatible, ','); 819 strlcpy(modalias, p ? p + 1 : compatible, len); 820 return 0; 821 } 822 EXPORT_SYMBOL_GPL(of_modalias_node); 823 824 /** 825 * of_find_node_by_phandle - Find a node given a phandle 826 * @handle: phandle of the node to find 827 * 828 * Returns a node pointer with refcount incremented, use 829 * of_node_put() on it when done. 830 */ 831 struct device_node *of_find_node_by_phandle(phandle handle) 832 { 833 struct device_node *np; 834 unsigned long flags; 835 836 raw_spin_lock_irqsave(&devtree_lock, flags); 837 for (np = of_allnodes; np; np = np->allnext) 838 if (np->phandle == handle) 839 break; 840 of_node_get(np); 841 raw_spin_unlock_irqrestore(&devtree_lock, flags); 842 return np; 843 } 844 EXPORT_SYMBOL(of_find_node_by_phandle); 845 846 /** 847 * of_find_property_value_of_size 848 * 849 * @np: device node from which the property value is to be read. 850 * @propname: name of the property to be searched. 851 * @len: requested length of property value 852 * 853 * Search for a property in a device node and valid the requested size. 854 * Returns the property value on success, -EINVAL if the property does not 855 * exist, -ENODATA if property does not have a value, and -EOVERFLOW if the 856 * property data isn't large enough. 857 * 858 */ 859 static void *of_find_property_value_of_size(const struct device_node *np, 860 const char *propname, u32 len) 861 { 862 struct property *prop = of_find_property(np, propname, NULL); 863 864 if (!prop) 865 return ERR_PTR(-EINVAL); 866 if (!prop->value) 867 return ERR_PTR(-ENODATA); 868 if (len > prop->length) 869 return ERR_PTR(-EOVERFLOW); 870 871 return prop->value; 872 } 873 874 /** 875 * of_property_read_u32_index - Find and read a u32 from a multi-value property. 876 * 877 * @np: device node from which the property value is to be read. 878 * @propname: name of the property to be searched. 879 * @index: index of the u32 in the list of values 880 * @out_value: pointer to return value, modified only if no error. 881 * 882 * Search for a property in a device node and read nth 32-bit value from 883 * it. Returns 0 on success, -EINVAL if the property does not exist, 884 * -ENODATA if property does not have a value, and -EOVERFLOW if the 885 * property data isn't large enough. 886 * 887 * The out_value is modified only if a valid u32 value can be decoded. 888 */ 889 int of_property_read_u32_index(const struct device_node *np, 890 const char *propname, 891 u32 index, u32 *out_value) 892 { 893 const u32 *val = of_find_property_value_of_size(np, propname, 894 ((index + 1) * sizeof(*out_value))); 895 896 if (IS_ERR(val)) 897 return PTR_ERR(val); 898 899 *out_value = be32_to_cpup(((__be32 *)val) + index); 900 return 0; 901 } 902 EXPORT_SYMBOL_GPL(of_property_read_u32_index); 903 904 /** 905 * of_property_read_u8_array - Find and read an array of u8 from a property. 906 * 907 * @np: device node from which the property value is to be read. 908 * @propname: name of the property to be searched. 909 * @out_values: pointer to return value, modified only if return value is 0. 910 * @sz: number of array elements to read 911 * 912 * Search for a property in a device node and read 8-bit value(s) from 913 * it. Returns 0 on success, -EINVAL if the property does not exist, 914 * -ENODATA if property does not have a value, and -EOVERFLOW if the 915 * property data isn't large enough. 916 * 917 * dts entry of array should be like: 918 * property = /bits/ 8 <0x50 0x60 0x70>; 919 * 920 * The out_values is modified only if a valid u8 value can be decoded. 921 */ 922 int of_property_read_u8_array(const struct device_node *np, 923 const char *propname, u8 *out_values, size_t sz) 924 { 925 const u8 *val = of_find_property_value_of_size(np, propname, 926 (sz * sizeof(*out_values))); 927 928 if (IS_ERR(val)) 929 return PTR_ERR(val); 930 931 while (sz--) 932 *out_values++ = *val++; 933 return 0; 934 } 935 EXPORT_SYMBOL_GPL(of_property_read_u8_array); 936 937 /** 938 * of_property_read_u16_array - Find and read an array of u16 from a property. 939 * 940 * @np: device node from which the property value is to be read. 941 * @propname: name of the property to be searched. 942 * @out_values: pointer to return value, modified only if return value is 0. 943 * @sz: number of array elements to read 944 * 945 * Search for a property in a device node and read 16-bit value(s) from 946 * it. Returns 0 on success, -EINVAL if the property does not exist, 947 * -ENODATA if property does not have a value, and -EOVERFLOW if the 948 * property data isn't large enough. 949 * 950 * dts entry of array should be like: 951 * property = /bits/ 16 <0x5000 0x6000 0x7000>; 952 * 953 * The out_values is modified only if a valid u16 value can be decoded. 954 */ 955 int of_property_read_u16_array(const struct device_node *np, 956 const char *propname, u16 *out_values, size_t sz) 957 { 958 const __be16 *val = of_find_property_value_of_size(np, propname, 959 (sz * sizeof(*out_values))); 960 961 if (IS_ERR(val)) 962 return PTR_ERR(val); 963 964 while (sz--) 965 *out_values++ = be16_to_cpup(val++); 966 return 0; 967 } 968 EXPORT_SYMBOL_GPL(of_property_read_u16_array); 969 970 /** 971 * of_property_read_u32_array - Find and read an array of 32 bit integers 972 * from a property. 973 * 974 * @np: device node from which the property value is to be read. 975 * @propname: name of the property to be searched. 976 * @out_values: pointer to return value, modified only if return value is 0. 977 * @sz: number of array elements to read 978 * 979 * Search for a property in a device node and read 32-bit value(s) from 980 * it. Returns 0 on success, -EINVAL if the property does not exist, 981 * -ENODATA if property does not have a value, and -EOVERFLOW if the 982 * property data isn't large enough. 983 * 984 * The out_values is modified only if a valid u32 value can be decoded. 985 */ 986 int of_property_read_u32_array(const struct device_node *np, 987 const char *propname, u32 *out_values, 988 size_t sz) 989 { 990 const __be32 *val = of_find_property_value_of_size(np, propname, 991 (sz * sizeof(*out_values))); 992 993 if (IS_ERR(val)) 994 return PTR_ERR(val); 995 996 while (sz--) 997 *out_values++ = be32_to_cpup(val++); 998 return 0; 999 } 1000 EXPORT_SYMBOL_GPL(of_property_read_u32_array); 1001 1002 /** 1003 * of_property_read_u64 - Find and read a 64 bit integer from a property 1004 * @np: device node from which the property value is to be read. 1005 * @propname: name of the property to be searched. 1006 * @out_value: pointer to return value, modified only if return value is 0. 1007 * 1008 * Search for a property in a device node and read a 64-bit value from 1009 * it. Returns 0 on success, -EINVAL if the property does not exist, 1010 * -ENODATA if property does not have a value, and -EOVERFLOW if the 1011 * property data isn't large enough. 1012 * 1013 * The out_value is modified only if a valid u64 value can be decoded. 1014 */ 1015 int of_property_read_u64(const struct device_node *np, const char *propname, 1016 u64 *out_value) 1017 { 1018 const __be32 *val = of_find_property_value_of_size(np, propname, 1019 sizeof(*out_value)); 1020 1021 if (IS_ERR(val)) 1022 return PTR_ERR(val); 1023 1024 *out_value = of_read_number(val, 2); 1025 return 0; 1026 } 1027 EXPORT_SYMBOL_GPL(of_property_read_u64); 1028 1029 /** 1030 * of_property_read_string - Find and read a string from a property 1031 * @np: device node from which the property value is to be read. 1032 * @propname: name of the property to be searched. 1033 * @out_string: pointer to null terminated return string, modified only if 1034 * return value is 0. 1035 * 1036 * Search for a property in a device tree node and retrieve a null 1037 * terminated string value (pointer to data, not a copy). Returns 0 on 1038 * success, -EINVAL if the property does not exist, -ENODATA if property 1039 * does not have a value, and -EILSEQ if the string is not null-terminated 1040 * within the length of the property data. 1041 * 1042 * The out_string pointer is modified only if a valid string can be decoded. 1043 */ 1044 int of_property_read_string(struct device_node *np, const char *propname, 1045 const char **out_string) 1046 { 1047 struct property *prop = of_find_property(np, propname, NULL); 1048 if (!prop) 1049 return -EINVAL; 1050 if (!prop->value) 1051 return -ENODATA; 1052 if (strnlen(prop->value, prop->length) >= prop->length) 1053 return -EILSEQ; 1054 *out_string = prop->value; 1055 return 0; 1056 } 1057 EXPORT_SYMBOL_GPL(of_property_read_string); 1058 1059 /** 1060 * of_property_read_string_index - Find and read a string from a multiple 1061 * strings property. 1062 * @np: device node from which the property value is to be read. 1063 * @propname: name of the property to be searched. 1064 * @index: index of the string in the list of strings 1065 * @out_string: pointer to null terminated return string, modified only if 1066 * return value is 0. 1067 * 1068 * Search for a property in a device tree node and retrieve a null 1069 * terminated string value (pointer to data, not a copy) in the list of strings 1070 * contained in that property. 1071 * Returns 0 on success, -EINVAL if the property does not exist, -ENODATA if 1072 * property does not have a value, and -EILSEQ if the string is not 1073 * null-terminated within the length of the property data. 1074 * 1075 * The out_string pointer is modified only if a valid string can be decoded. 1076 */ 1077 int of_property_read_string_index(struct device_node *np, const char *propname, 1078 int index, const char **output) 1079 { 1080 struct property *prop = of_find_property(np, propname, NULL); 1081 int i = 0; 1082 size_t l = 0, total = 0; 1083 const char *p; 1084 1085 if (!prop) 1086 return -EINVAL; 1087 if (!prop->value) 1088 return -ENODATA; 1089 if (strnlen(prop->value, prop->length) >= prop->length) 1090 return -EILSEQ; 1091 1092 p = prop->value; 1093 1094 for (i = 0; total < prop->length; total += l, p += l) { 1095 l = strlen(p) + 1; 1096 if (i++ == index) { 1097 *output = p; 1098 return 0; 1099 } 1100 } 1101 return -ENODATA; 1102 } 1103 EXPORT_SYMBOL_GPL(of_property_read_string_index); 1104 1105 /** 1106 * of_property_match_string() - Find string in a list and return index 1107 * @np: pointer to node containing string list property 1108 * @propname: string list property name 1109 * @string: pointer to string to search for in string list 1110 * 1111 * This function searches a string list property and returns the index 1112 * of a specific string value. 1113 */ 1114 int of_property_match_string(struct device_node *np, const char *propname, 1115 const char *string) 1116 { 1117 struct property *prop = of_find_property(np, propname, NULL); 1118 size_t l; 1119 int i; 1120 const char *p, *end; 1121 1122 if (!prop) 1123 return -EINVAL; 1124 if (!prop->value) 1125 return -ENODATA; 1126 1127 p = prop->value; 1128 end = p + prop->length; 1129 1130 for (i = 0; p < end; i++, p += l) { 1131 l = strlen(p) + 1; 1132 if (p + l > end) 1133 return -EILSEQ; 1134 pr_debug("comparing %s with %s\n", string, p); 1135 if (strcmp(string, p) == 0) 1136 return i; /* Found it; return index */ 1137 } 1138 return -ENODATA; 1139 } 1140 EXPORT_SYMBOL_GPL(of_property_match_string); 1141 1142 /** 1143 * of_property_count_strings - Find and return the number of strings from a 1144 * multiple strings property. 1145 * @np: device node from which the property value is to be read. 1146 * @propname: name of the property to be searched. 1147 * 1148 * Search for a property in a device tree node and retrieve the number of null 1149 * terminated string contain in it. Returns the number of strings on 1150 * success, -EINVAL if the property does not exist, -ENODATA if property 1151 * does not have a value, and -EILSEQ if the string is not null-terminated 1152 * within the length of the property data. 1153 */ 1154 int of_property_count_strings(struct device_node *np, const char *propname) 1155 { 1156 struct property *prop = of_find_property(np, propname, NULL); 1157 int i = 0; 1158 size_t l = 0, total = 0; 1159 const char *p; 1160 1161 if (!prop) 1162 return -EINVAL; 1163 if (!prop->value) 1164 return -ENODATA; 1165 if (strnlen(prop->value, prop->length) >= prop->length) 1166 return -EILSEQ; 1167 1168 p = prop->value; 1169 1170 for (i = 0; total < prop->length; total += l, p += l, i++) 1171 l = strlen(p) + 1; 1172 1173 return i; 1174 } 1175 EXPORT_SYMBOL_GPL(of_property_count_strings); 1176 1177 static int __of_parse_phandle_with_args(const struct device_node *np, 1178 const char *list_name, 1179 const char *cells_name, 1180 int cell_count, int index, 1181 struct of_phandle_args *out_args) 1182 { 1183 const __be32 *list, *list_end; 1184 int rc = 0, size, cur_index = 0; 1185 uint32_t count = 0; 1186 struct device_node *node = NULL; 1187 phandle phandle; 1188 1189 /* Retrieve the phandle list property */ 1190 list = of_get_property(np, list_name, &size); 1191 if (!list) 1192 return -ENOENT; 1193 list_end = list + size / sizeof(*list); 1194 1195 /* Loop over the phandles until all the requested entry is found */ 1196 while (list < list_end) { 1197 rc = -EINVAL; 1198 count = 0; 1199 1200 /* 1201 * If phandle is 0, then it is an empty entry with no 1202 * arguments. Skip forward to the next entry. 1203 */ 1204 phandle = be32_to_cpup(list++); 1205 if (phandle) { 1206 /* 1207 * Find the provider node and parse the #*-cells 1208 * property to determine the argument length. 1209 * 1210 * This is not needed if the cell count is hard-coded 1211 * (i.e. cells_name not set, but cell_count is set), 1212 * except when we're going to return the found node 1213 * below. 1214 */ 1215 if (cells_name || cur_index == index) { 1216 node = of_find_node_by_phandle(phandle); 1217 if (!node) { 1218 pr_err("%s: could not find phandle\n", 1219 np->full_name); 1220 goto err; 1221 } 1222 } 1223 1224 if (cells_name) { 1225 if (of_property_read_u32(node, cells_name, 1226 &count)) { 1227 pr_err("%s: could not get %s for %s\n", 1228 np->full_name, cells_name, 1229 node->full_name); 1230 goto err; 1231 } 1232 } else { 1233 count = cell_count; 1234 } 1235 1236 /* 1237 * Make sure that the arguments actually fit in the 1238 * remaining property data length 1239 */ 1240 if (list + count > list_end) { 1241 pr_err("%s: arguments longer than property\n", 1242 np->full_name); 1243 goto err; 1244 } 1245 } 1246 1247 /* 1248 * All of the error cases above bail out of the loop, so at 1249 * this point, the parsing is successful. If the requested 1250 * index matches, then fill the out_args structure and return, 1251 * or return -ENOENT for an empty entry. 1252 */ 1253 rc = -ENOENT; 1254 if (cur_index == index) { 1255 if (!phandle) 1256 goto err; 1257 1258 if (out_args) { 1259 int i; 1260 if (WARN_ON(count > MAX_PHANDLE_ARGS)) 1261 count = MAX_PHANDLE_ARGS; 1262 out_args->np = node; 1263 out_args->args_count = count; 1264 for (i = 0; i < count; i++) 1265 out_args->args[i] = be32_to_cpup(list++); 1266 } else { 1267 of_node_put(node); 1268 } 1269 1270 /* Found it! return success */ 1271 return 0; 1272 } 1273 1274 of_node_put(node); 1275 node = NULL; 1276 list += count; 1277 cur_index++; 1278 } 1279 1280 /* 1281 * Unlock node before returning result; will be one of: 1282 * -ENOENT : index is for empty phandle 1283 * -EINVAL : parsing error on data 1284 * [1..n] : Number of phandle (count mode; when index = -1) 1285 */ 1286 rc = index < 0 ? cur_index : -ENOENT; 1287 err: 1288 if (node) 1289 of_node_put(node); 1290 return rc; 1291 } 1292 1293 /** 1294 * of_parse_phandle - Resolve a phandle property to a device_node pointer 1295 * @np: Pointer to device node holding phandle property 1296 * @phandle_name: Name of property holding a phandle value 1297 * @index: For properties holding a table of phandles, this is the index into 1298 * the table 1299 * 1300 * Returns the device_node pointer with refcount incremented. Use 1301 * of_node_put() on it when done. 1302 */ 1303 struct device_node *of_parse_phandle(const struct device_node *np, 1304 const char *phandle_name, int index) 1305 { 1306 struct of_phandle_args args; 1307 1308 if (index < 0) 1309 return NULL; 1310 1311 if (__of_parse_phandle_with_args(np, phandle_name, NULL, 0, 1312 index, &args)) 1313 return NULL; 1314 1315 return args.np; 1316 } 1317 EXPORT_SYMBOL(of_parse_phandle); 1318 1319 /** 1320 * of_parse_phandle_with_args() - Find a node pointed by phandle in a list 1321 * @np: pointer to a device tree node containing a list 1322 * @list_name: property name that contains a list 1323 * @cells_name: property name that specifies phandles' arguments count 1324 * @index: index of a phandle to parse out 1325 * @out_args: optional pointer to output arguments structure (will be filled) 1326 * 1327 * This function is useful to parse lists of phandles and their arguments. 1328 * Returns 0 on success and fills out_args, on error returns appropriate 1329 * errno value. 1330 * 1331 * Caller is responsible to call of_node_put() on the returned out_args->node 1332 * pointer. 1333 * 1334 * Example: 1335 * 1336 * phandle1: node1 { 1337 * #list-cells = <2>; 1338 * } 1339 * 1340 * phandle2: node2 { 1341 * #list-cells = <1>; 1342 * } 1343 * 1344 * node3 { 1345 * list = <&phandle1 1 2 &phandle2 3>; 1346 * } 1347 * 1348 * To get a device_node of the `node2' node you may call this: 1349 * of_parse_phandle_with_args(node3, "list", "#list-cells", 1, &args); 1350 */ 1351 int of_parse_phandle_with_args(const struct device_node *np, const char *list_name, 1352 const char *cells_name, int index, 1353 struct of_phandle_args *out_args) 1354 { 1355 if (index < 0) 1356 return -EINVAL; 1357 return __of_parse_phandle_with_args(np, list_name, cells_name, 0, 1358 index, out_args); 1359 } 1360 EXPORT_SYMBOL(of_parse_phandle_with_args); 1361 1362 /** 1363 * of_parse_phandle_with_fixed_args() - Find a node pointed by phandle in a list 1364 * @np: pointer to a device tree node containing a list 1365 * @list_name: property name that contains a list 1366 * @cell_count: number of argument cells following the phandle 1367 * @index: index of a phandle to parse out 1368 * @out_args: optional pointer to output arguments structure (will be filled) 1369 * 1370 * This function is useful to parse lists of phandles and their arguments. 1371 * Returns 0 on success and fills out_args, on error returns appropriate 1372 * errno value. 1373 * 1374 * Caller is responsible to call of_node_put() on the returned out_args->node 1375 * pointer. 1376 * 1377 * Example: 1378 * 1379 * phandle1: node1 { 1380 * } 1381 * 1382 * phandle2: node2 { 1383 * } 1384 * 1385 * node3 { 1386 * list = <&phandle1 0 2 &phandle2 2 3>; 1387 * } 1388 * 1389 * To get a device_node of the `node2' node you may call this: 1390 * of_parse_phandle_with_fixed_args(node3, "list", 2, 1, &args); 1391 */ 1392 int of_parse_phandle_with_fixed_args(const struct device_node *np, 1393 const char *list_name, int cell_count, 1394 int index, struct of_phandle_args *out_args) 1395 { 1396 if (index < 0) 1397 return -EINVAL; 1398 return __of_parse_phandle_with_args(np, list_name, NULL, cell_count, 1399 index, out_args); 1400 } 1401 EXPORT_SYMBOL(of_parse_phandle_with_fixed_args); 1402 1403 /** 1404 * of_count_phandle_with_args() - Find the number of phandles references in a property 1405 * @np: pointer to a device tree node containing a list 1406 * @list_name: property name that contains a list 1407 * @cells_name: property name that specifies phandles' arguments count 1408 * 1409 * Returns the number of phandle + argument tuples within a property. It 1410 * is a typical pattern to encode a list of phandle and variable 1411 * arguments into a single property. The number of arguments is encoded 1412 * by a property in the phandle-target node. For example, a gpios 1413 * property would contain a list of GPIO specifies consisting of a 1414 * phandle and 1 or more arguments. The number of arguments are 1415 * determined by the #gpio-cells property in the node pointed to by the 1416 * phandle. 1417 */ 1418 int of_count_phandle_with_args(const struct device_node *np, const char *list_name, 1419 const char *cells_name) 1420 { 1421 return __of_parse_phandle_with_args(np, list_name, cells_name, 0, -1, 1422 NULL); 1423 } 1424 EXPORT_SYMBOL(of_count_phandle_with_args); 1425 1426 #if defined(CONFIG_OF_DYNAMIC) 1427 static int of_property_notify(int action, struct device_node *np, 1428 struct property *prop) 1429 { 1430 struct of_prop_reconfig pr; 1431 1432 pr.dn = np; 1433 pr.prop = prop; 1434 return of_reconfig_notify(action, &pr); 1435 } 1436 #else 1437 static int of_property_notify(int action, struct device_node *np, 1438 struct property *prop) 1439 { 1440 return 0; 1441 } 1442 #endif 1443 1444 /** 1445 * of_add_property - Add a property to a node 1446 */ 1447 int of_add_property(struct device_node *np, struct property *prop) 1448 { 1449 struct property **next; 1450 unsigned long flags; 1451 int rc; 1452 1453 rc = of_property_notify(OF_RECONFIG_ADD_PROPERTY, np, prop); 1454 if (rc) 1455 return rc; 1456 1457 prop->next = NULL; 1458 raw_spin_lock_irqsave(&devtree_lock, flags); 1459 next = &np->properties; 1460 while (*next) { 1461 if (strcmp(prop->name, (*next)->name) == 0) { 1462 /* duplicate ! don't insert it */ 1463 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1464 return -1; 1465 } 1466 next = &(*next)->next; 1467 } 1468 *next = prop; 1469 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1470 1471 #ifdef CONFIG_PROC_DEVICETREE 1472 /* try to add to proc as well if it was initialized */ 1473 if (np->pde) 1474 proc_device_tree_add_prop(np->pde, prop); 1475 #endif /* CONFIG_PROC_DEVICETREE */ 1476 1477 return 0; 1478 } 1479 1480 /** 1481 * of_remove_property - Remove a property from a node. 1482 * 1483 * Note that we don't actually remove it, since we have given out 1484 * who-knows-how-many pointers to the data using get-property. 1485 * Instead we just move the property to the "dead properties" 1486 * list, so it won't be found any more. 1487 */ 1488 int of_remove_property(struct device_node *np, struct property *prop) 1489 { 1490 struct property **next; 1491 unsigned long flags; 1492 int found = 0; 1493 int rc; 1494 1495 rc = of_property_notify(OF_RECONFIG_REMOVE_PROPERTY, np, prop); 1496 if (rc) 1497 return rc; 1498 1499 raw_spin_lock_irqsave(&devtree_lock, flags); 1500 next = &np->properties; 1501 while (*next) { 1502 if (*next == prop) { 1503 /* found the node */ 1504 *next = prop->next; 1505 prop->next = np->deadprops; 1506 np->deadprops = prop; 1507 found = 1; 1508 break; 1509 } 1510 next = &(*next)->next; 1511 } 1512 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1513 1514 if (!found) 1515 return -ENODEV; 1516 1517 #ifdef CONFIG_PROC_DEVICETREE 1518 /* try to remove the proc node as well */ 1519 if (np->pde) 1520 proc_device_tree_remove_prop(np->pde, prop); 1521 #endif /* CONFIG_PROC_DEVICETREE */ 1522 1523 return 0; 1524 } 1525 1526 /* 1527 * of_update_property - Update a property in a node, if the property does 1528 * not exist, add it. 1529 * 1530 * Note that we don't actually remove it, since we have given out 1531 * who-knows-how-many pointers to the data using get-property. 1532 * Instead we just move the property to the "dead properties" list, 1533 * and add the new property to the property list 1534 */ 1535 int of_update_property(struct device_node *np, struct property *newprop) 1536 { 1537 struct property **next, *oldprop; 1538 unsigned long flags; 1539 int rc, found = 0; 1540 1541 rc = of_property_notify(OF_RECONFIG_UPDATE_PROPERTY, np, newprop); 1542 if (rc) 1543 return rc; 1544 1545 if (!newprop->name) 1546 return -EINVAL; 1547 1548 oldprop = of_find_property(np, newprop->name, NULL); 1549 if (!oldprop) 1550 return of_add_property(np, newprop); 1551 1552 raw_spin_lock_irqsave(&devtree_lock, flags); 1553 next = &np->properties; 1554 while (*next) { 1555 if (*next == oldprop) { 1556 /* found the node */ 1557 newprop->next = oldprop->next; 1558 *next = newprop; 1559 oldprop->next = np->deadprops; 1560 np->deadprops = oldprop; 1561 found = 1; 1562 break; 1563 } 1564 next = &(*next)->next; 1565 } 1566 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1567 1568 if (!found) 1569 return -ENODEV; 1570 1571 #ifdef CONFIG_PROC_DEVICETREE 1572 /* try to add to proc as well if it was initialized */ 1573 if (np->pde) 1574 proc_device_tree_update_prop(np->pde, newprop, oldprop); 1575 #endif /* CONFIG_PROC_DEVICETREE */ 1576 1577 return 0; 1578 } 1579 1580 #if defined(CONFIG_OF_DYNAMIC) 1581 /* 1582 * Support for dynamic device trees. 1583 * 1584 * On some platforms, the device tree can be manipulated at runtime. 1585 * The routines in this section support adding, removing and changing 1586 * device tree nodes. 1587 */ 1588 1589 static BLOCKING_NOTIFIER_HEAD(of_reconfig_chain); 1590 1591 int of_reconfig_notifier_register(struct notifier_block *nb) 1592 { 1593 return blocking_notifier_chain_register(&of_reconfig_chain, nb); 1594 } 1595 EXPORT_SYMBOL_GPL(of_reconfig_notifier_register); 1596 1597 int of_reconfig_notifier_unregister(struct notifier_block *nb) 1598 { 1599 return blocking_notifier_chain_unregister(&of_reconfig_chain, nb); 1600 } 1601 EXPORT_SYMBOL_GPL(of_reconfig_notifier_unregister); 1602 1603 int of_reconfig_notify(unsigned long action, void *p) 1604 { 1605 int rc; 1606 1607 rc = blocking_notifier_call_chain(&of_reconfig_chain, action, p); 1608 return notifier_to_errno(rc); 1609 } 1610 1611 #ifdef CONFIG_PROC_DEVICETREE 1612 static void of_add_proc_dt_entry(struct device_node *dn) 1613 { 1614 struct proc_dir_entry *ent; 1615 1616 ent = proc_mkdir(strrchr(dn->full_name, '/') + 1, dn->parent->pde); 1617 if (ent) 1618 proc_device_tree_add_node(dn, ent); 1619 } 1620 #else 1621 static void of_add_proc_dt_entry(struct device_node *dn) 1622 { 1623 return; 1624 } 1625 #endif 1626 1627 /** 1628 * of_attach_node - Plug a device node into the tree and global list. 1629 */ 1630 int of_attach_node(struct device_node *np) 1631 { 1632 unsigned long flags; 1633 int rc; 1634 1635 rc = of_reconfig_notify(OF_RECONFIG_ATTACH_NODE, np); 1636 if (rc) 1637 return rc; 1638 1639 raw_spin_lock_irqsave(&devtree_lock, flags); 1640 np->sibling = np->parent->child; 1641 np->allnext = of_allnodes; 1642 np->parent->child = np; 1643 of_allnodes = np; 1644 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1645 1646 of_add_proc_dt_entry(np); 1647 return 0; 1648 } 1649 1650 #ifdef CONFIG_PROC_DEVICETREE 1651 static void of_remove_proc_dt_entry(struct device_node *dn) 1652 { 1653 proc_remove(dn->pde); 1654 } 1655 #else 1656 static void of_remove_proc_dt_entry(struct device_node *dn) 1657 { 1658 return; 1659 } 1660 #endif 1661 1662 /** 1663 * of_detach_node - "Unplug" a node from the device tree. 1664 * 1665 * The caller must hold a reference to the node. The memory associated with 1666 * the node is not freed until its refcount goes to zero. 1667 */ 1668 int of_detach_node(struct device_node *np) 1669 { 1670 struct device_node *parent; 1671 unsigned long flags; 1672 int rc = 0; 1673 1674 rc = of_reconfig_notify(OF_RECONFIG_DETACH_NODE, np); 1675 if (rc) 1676 return rc; 1677 1678 raw_spin_lock_irqsave(&devtree_lock, flags); 1679 1680 if (of_node_check_flag(np, OF_DETACHED)) { 1681 /* someone already detached it */ 1682 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1683 return rc; 1684 } 1685 1686 parent = np->parent; 1687 if (!parent) { 1688 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1689 return rc; 1690 } 1691 1692 if (of_allnodes == np) 1693 of_allnodes = np->allnext; 1694 else { 1695 struct device_node *prev; 1696 for (prev = of_allnodes; 1697 prev->allnext != np; 1698 prev = prev->allnext) 1699 ; 1700 prev->allnext = np->allnext; 1701 } 1702 1703 if (parent->child == np) 1704 parent->child = np->sibling; 1705 else { 1706 struct device_node *prevsib; 1707 for (prevsib = np->parent->child; 1708 prevsib->sibling != np; 1709 prevsib = prevsib->sibling) 1710 ; 1711 prevsib->sibling = np->sibling; 1712 } 1713 1714 of_node_set_flag(np, OF_DETACHED); 1715 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1716 1717 of_remove_proc_dt_entry(np); 1718 return rc; 1719 } 1720 #endif /* defined(CONFIG_OF_DYNAMIC) */ 1721 1722 static void of_alias_add(struct alias_prop *ap, struct device_node *np, 1723 int id, const char *stem, int stem_len) 1724 { 1725 ap->np = np; 1726 ap->id = id; 1727 strncpy(ap->stem, stem, stem_len); 1728 ap->stem[stem_len] = 0; 1729 list_add_tail(&ap->link, &aliases_lookup); 1730 pr_debug("adding DT alias:%s: stem=%s id=%i node=%s\n", 1731 ap->alias, ap->stem, ap->id, of_node_full_name(np)); 1732 } 1733 1734 /** 1735 * of_alias_scan - Scan all properties of 'aliases' node 1736 * 1737 * The function scans all the properties of 'aliases' node and populate 1738 * the the global lookup table with the properties. It returns the 1739 * number of alias_prop found, or error code in error case. 1740 * 1741 * @dt_alloc: An allocator that provides a virtual address to memory 1742 * for the resulting tree 1743 */ 1744 void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)) 1745 { 1746 struct property *pp; 1747 1748 of_chosen = of_find_node_by_path("/chosen"); 1749 if (of_chosen == NULL) 1750 of_chosen = of_find_node_by_path("/chosen@0"); 1751 1752 if (of_chosen) { 1753 const char *name; 1754 1755 name = of_get_property(of_chosen, "linux,stdout-path", NULL); 1756 if (name) 1757 of_stdout = of_find_node_by_path(name); 1758 } 1759 1760 of_aliases = of_find_node_by_path("/aliases"); 1761 if (!of_aliases) 1762 return; 1763 1764 for_each_property_of_node(of_aliases, pp) { 1765 const char *start = pp->name; 1766 const char *end = start + strlen(start); 1767 struct device_node *np; 1768 struct alias_prop *ap; 1769 int id, len; 1770 1771 /* Skip those we do not want to proceed */ 1772 if (!strcmp(pp->name, "name") || 1773 !strcmp(pp->name, "phandle") || 1774 !strcmp(pp->name, "linux,phandle")) 1775 continue; 1776 1777 np = of_find_node_by_path(pp->value); 1778 if (!np) 1779 continue; 1780 1781 /* walk the alias backwards to extract the id and work out 1782 * the 'stem' string */ 1783 while (isdigit(*(end-1)) && end > start) 1784 end--; 1785 len = end - start; 1786 1787 if (kstrtoint(end, 10, &id) < 0) 1788 continue; 1789 1790 /* Allocate an alias_prop with enough space for the stem */ 1791 ap = dt_alloc(sizeof(*ap) + len + 1, 4); 1792 if (!ap) 1793 continue; 1794 memset(ap, 0, sizeof(*ap) + len + 1); 1795 ap->alias = start; 1796 of_alias_add(ap, np, id, start, len); 1797 } 1798 } 1799 1800 /** 1801 * of_alias_get_id - Get alias id for the given device_node 1802 * @np: Pointer to the given device_node 1803 * @stem: Alias stem of the given device_node 1804 * 1805 * The function travels the lookup table to get alias id for the given 1806 * device_node and alias stem. It returns the alias id if find it. 1807 */ 1808 int of_alias_get_id(struct device_node *np, const char *stem) 1809 { 1810 struct alias_prop *app; 1811 int id = -ENODEV; 1812 1813 mutex_lock(&of_aliases_mutex); 1814 list_for_each_entry(app, &aliases_lookup, link) { 1815 if (strcmp(app->stem, stem) != 0) 1816 continue; 1817 1818 if (np == app->np) { 1819 id = app->id; 1820 break; 1821 } 1822 } 1823 mutex_unlock(&of_aliases_mutex); 1824 1825 return id; 1826 } 1827 EXPORT_SYMBOL_GPL(of_alias_get_id); 1828 1829 const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur, 1830 u32 *pu) 1831 { 1832 const void *curv = cur; 1833 1834 if (!prop) 1835 return NULL; 1836 1837 if (!cur) { 1838 curv = prop->value; 1839 goto out_val; 1840 } 1841 1842 curv += sizeof(*cur); 1843 if (curv >= prop->value + prop->length) 1844 return NULL; 1845 1846 out_val: 1847 *pu = be32_to_cpup(curv); 1848 return curv; 1849 } 1850 EXPORT_SYMBOL_GPL(of_prop_next_u32); 1851 1852 const char *of_prop_next_string(struct property *prop, const char *cur) 1853 { 1854 const void *curv = cur; 1855 1856 if (!prop) 1857 return NULL; 1858 1859 if (!cur) 1860 return prop->value; 1861 1862 curv += strlen(cur) + 1; 1863 if (curv >= prop->value + prop->length) 1864 return NULL; 1865 1866 return curv; 1867 } 1868 EXPORT_SYMBOL_GPL(of_prop_next_string); 1869 1870 /** 1871 * of_device_is_stdout_path - check if a device node matches the 1872 * linux,stdout-path property 1873 * 1874 * Check if this device node matches the linux,stdout-path property 1875 * in the chosen node. return true if yes, false otherwise. 1876 */ 1877 int of_device_is_stdout_path(struct device_node *dn) 1878 { 1879 if (!of_stdout) 1880 return false; 1881 1882 return of_stdout == dn; 1883 } 1884 EXPORT_SYMBOL_GPL(of_device_is_stdout_path); 1885