1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Procedures for creating, accessing and interpreting the device tree. 4 * 5 * Paul Mackerras August 1996. 6 * Copyright (C) 1996-2005 Paul Mackerras. 7 * 8 * Adapted for 64bit PowerPC by Dave Engebretsen and Peter Bergner. 9 * {engebret|bergner}@us.ibm.com 10 * 11 * Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net 12 * 13 * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell and 14 * Grant Likely. 15 */ 16 17 #define pr_fmt(fmt) "OF: " fmt 18 19 #include <linux/bitmap.h> 20 #include <linux/console.h> 21 #include <linux/ctype.h> 22 #include <linux/cpu.h> 23 #include <linux/module.h> 24 #include <linux/of.h> 25 #include <linux/of_device.h> 26 #include <linux/of_graph.h> 27 #include <linux/spinlock.h> 28 #include <linux/slab.h> 29 #include <linux/string.h> 30 #include <linux/proc_fs.h> 31 32 #include "of_private.h" 33 34 LIST_HEAD(aliases_lookup); 35 36 struct device_node *of_root; 37 EXPORT_SYMBOL(of_root); 38 struct device_node *of_chosen; 39 struct device_node *of_aliases; 40 struct device_node *of_stdout; 41 static const char *of_stdout_options; 42 43 struct kset *of_kset; 44 45 /* 46 * Used to protect the of_aliases, to hold off addition of nodes to sysfs. 47 * This mutex must be held whenever modifications are being made to the 48 * device tree. The of_{attach,detach}_node() and 49 * of_{add,remove,update}_property() helpers make sure this happens. 50 */ 51 DEFINE_MUTEX(of_mutex); 52 53 /* use when traversing tree through the child, sibling, 54 * or parent members of struct device_node. 55 */ 56 DEFINE_RAW_SPINLOCK(devtree_lock); 57 58 bool of_node_name_eq(const struct device_node *np, const char *name) 59 { 60 const char *node_name; 61 size_t len; 62 63 if (!np) 64 return false; 65 66 node_name = kbasename(np->full_name); 67 len = strchrnul(node_name, '@') - node_name; 68 69 return (strlen(name) == len) && (strncmp(node_name, name, len) == 0); 70 } 71 EXPORT_SYMBOL(of_node_name_eq); 72 73 bool of_node_name_prefix(const struct device_node *np, const char *prefix) 74 { 75 if (!np) 76 return false; 77 78 return strncmp(kbasename(np->full_name), prefix, strlen(prefix)) == 0; 79 } 80 EXPORT_SYMBOL(of_node_name_prefix); 81 82 static bool __of_node_is_type(const struct device_node *np, const char *type) 83 { 84 const char *match = __of_get_property(np, "device_type", NULL); 85 86 return np && match && type && !strcmp(match, type); 87 } 88 89 int of_bus_n_addr_cells(struct device_node *np) 90 { 91 u32 cells; 92 93 for (; np; np = np->parent) 94 if (!of_property_read_u32(np, "#address-cells", &cells)) 95 return cells; 96 97 /* No #address-cells property for the root node */ 98 return OF_ROOT_NODE_ADDR_CELLS_DEFAULT; 99 } 100 101 int of_n_addr_cells(struct device_node *np) 102 { 103 if (np->parent) 104 np = np->parent; 105 106 return of_bus_n_addr_cells(np); 107 } 108 EXPORT_SYMBOL(of_n_addr_cells); 109 110 int of_bus_n_size_cells(struct device_node *np) 111 { 112 u32 cells; 113 114 for (; np; np = np->parent) 115 if (!of_property_read_u32(np, "#size-cells", &cells)) 116 return cells; 117 118 /* No #size-cells property for the root node */ 119 return OF_ROOT_NODE_SIZE_CELLS_DEFAULT; 120 } 121 122 int of_n_size_cells(struct device_node *np) 123 { 124 if (np->parent) 125 np = np->parent; 126 127 return of_bus_n_size_cells(np); 128 } 129 EXPORT_SYMBOL(of_n_size_cells); 130 131 #ifdef CONFIG_NUMA 132 int __weak of_node_to_nid(struct device_node *np) 133 { 134 return NUMA_NO_NODE; 135 } 136 #endif 137 138 #define OF_PHANDLE_CACHE_BITS 7 139 #define OF_PHANDLE_CACHE_SZ BIT(OF_PHANDLE_CACHE_BITS) 140 141 static struct device_node *phandle_cache[OF_PHANDLE_CACHE_SZ]; 142 143 static u32 of_phandle_cache_hash(phandle handle) 144 { 145 return hash_32(handle, OF_PHANDLE_CACHE_BITS); 146 } 147 148 /* 149 * Caller must hold devtree_lock. 150 */ 151 void __of_phandle_cache_inv_entry(phandle handle) 152 { 153 u32 handle_hash; 154 struct device_node *np; 155 156 if (!handle) 157 return; 158 159 handle_hash = of_phandle_cache_hash(handle); 160 161 np = phandle_cache[handle_hash]; 162 if (np && handle == np->phandle) 163 phandle_cache[handle_hash] = NULL; 164 } 165 166 void __init of_core_init(void) 167 { 168 struct device_node *np; 169 170 171 /* Create the kset, and register existing nodes */ 172 mutex_lock(&of_mutex); 173 of_kset = kset_create_and_add("devicetree", NULL, firmware_kobj); 174 if (!of_kset) { 175 mutex_unlock(&of_mutex); 176 pr_err("failed to register existing nodes\n"); 177 return; 178 } 179 for_each_of_allnodes(np) { 180 __of_attach_node_sysfs(np); 181 if (np->phandle && !phandle_cache[of_phandle_cache_hash(np->phandle)]) 182 phandle_cache[of_phandle_cache_hash(np->phandle)] = np; 183 } 184 mutex_unlock(&of_mutex); 185 186 /* Symlink in /proc as required by userspace ABI */ 187 if (of_root) 188 proc_symlink("device-tree", NULL, "/sys/firmware/devicetree/base"); 189 } 190 191 static struct property *__of_find_property(const struct device_node *np, 192 const char *name, int *lenp) 193 { 194 struct property *pp; 195 196 if (!np) 197 return NULL; 198 199 for (pp = np->properties; pp; pp = pp->next) { 200 if (of_prop_cmp(pp->name, name) == 0) { 201 if (lenp) 202 *lenp = pp->length; 203 break; 204 } 205 } 206 207 return pp; 208 } 209 210 struct property *of_find_property(const struct device_node *np, 211 const char *name, 212 int *lenp) 213 { 214 struct property *pp; 215 unsigned long flags; 216 217 raw_spin_lock_irqsave(&devtree_lock, flags); 218 pp = __of_find_property(np, name, lenp); 219 raw_spin_unlock_irqrestore(&devtree_lock, flags); 220 221 return pp; 222 } 223 EXPORT_SYMBOL(of_find_property); 224 225 struct device_node *__of_find_all_nodes(struct device_node *prev) 226 { 227 struct device_node *np; 228 if (!prev) { 229 np = of_root; 230 } else if (prev->child) { 231 np = prev->child; 232 } else { 233 /* Walk back up looking for a sibling, or the end of the structure */ 234 np = prev; 235 while (np->parent && !np->sibling) 236 np = np->parent; 237 np = np->sibling; /* Might be null at the end of the tree */ 238 } 239 return np; 240 } 241 242 /** 243 * of_find_all_nodes - Get next node in global list 244 * @prev: Previous node or NULL to start iteration 245 * of_node_put() will be called on it 246 * 247 * Return: A node pointer with refcount incremented, use 248 * of_node_put() on it when done. 249 */ 250 struct device_node *of_find_all_nodes(struct device_node *prev) 251 { 252 struct device_node *np; 253 unsigned long flags; 254 255 raw_spin_lock_irqsave(&devtree_lock, flags); 256 np = __of_find_all_nodes(prev); 257 of_node_get(np); 258 of_node_put(prev); 259 raw_spin_unlock_irqrestore(&devtree_lock, flags); 260 return np; 261 } 262 EXPORT_SYMBOL(of_find_all_nodes); 263 264 /* 265 * Find a property with a given name for a given node 266 * and return the value. 267 */ 268 const void *__of_get_property(const struct device_node *np, 269 const char *name, int *lenp) 270 { 271 struct property *pp = __of_find_property(np, name, lenp); 272 273 return pp ? pp->value : NULL; 274 } 275 276 /* 277 * Find a property with a given name for a given node 278 * and return the value. 279 */ 280 const void *of_get_property(const struct device_node *np, const char *name, 281 int *lenp) 282 { 283 struct property *pp = of_find_property(np, name, lenp); 284 285 return pp ? pp->value : NULL; 286 } 287 EXPORT_SYMBOL(of_get_property); 288 289 /* 290 * arch_match_cpu_phys_id - Match the given logical CPU and physical id 291 * 292 * @cpu: logical cpu index of a core/thread 293 * @phys_id: physical identifier of a core/thread 294 * 295 * CPU logical to physical index mapping is architecture specific. 296 * However this __weak function provides a default match of physical 297 * id to logical cpu index. phys_id provided here is usually values read 298 * from the device tree which must match the hardware internal registers. 299 * 300 * Returns true if the physical identifier and the logical cpu index 301 * correspond to the same core/thread, false otherwise. 302 */ 303 bool __weak arch_match_cpu_phys_id(int cpu, u64 phys_id) 304 { 305 return (u32)phys_id == cpu; 306 } 307 308 /* 309 * Checks if the given "prop_name" property holds the physical id of the 310 * core/thread corresponding to the logical cpu 'cpu'. If 'thread' is not 311 * NULL, local thread number within the core is returned in it. 312 */ 313 static bool __of_find_n_match_cpu_property(struct device_node *cpun, 314 const char *prop_name, int cpu, unsigned int *thread) 315 { 316 const __be32 *cell; 317 int ac, prop_len, tid; 318 u64 hwid; 319 320 ac = of_n_addr_cells(cpun); 321 cell = of_get_property(cpun, prop_name, &prop_len); 322 if (!cell && !ac && arch_match_cpu_phys_id(cpu, 0)) 323 return true; 324 if (!cell || !ac) 325 return false; 326 prop_len /= sizeof(*cell) * ac; 327 for (tid = 0; tid < prop_len; tid++) { 328 hwid = of_read_number(cell, ac); 329 if (arch_match_cpu_phys_id(cpu, hwid)) { 330 if (thread) 331 *thread = tid; 332 return true; 333 } 334 cell += ac; 335 } 336 return false; 337 } 338 339 /* 340 * arch_find_n_match_cpu_physical_id - See if the given device node is 341 * for the cpu corresponding to logical cpu 'cpu'. Return true if so, 342 * else false. If 'thread' is non-NULL, the local thread number within the 343 * core is returned in it. 344 */ 345 bool __weak arch_find_n_match_cpu_physical_id(struct device_node *cpun, 346 int cpu, unsigned int *thread) 347 { 348 /* Check for non-standard "ibm,ppc-interrupt-server#s" property 349 * for thread ids on PowerPC. If it doesn't exist fallback to 350 * standard "reg" property. 351 */ 352 if (IS_ENABLED(CONFIG_PPC) && 353 __of_find_n_match_cpu_property(cpun, 354 "ibm,ppc-interrupt-server#s", 355 cpu, thread)) 356 return true; 357 358 return __of_find_n_match_cpu_property(cpun, "reg", cpu, thread); 359 } 360 361 /** 362 * of_get_cpu_node - Get device node associated with the given logical CPU 363 * 364 * @cpu: CPU number(logical index) for which device node is required 365 * @thread: if not NULL, local thread number within the physical core is 366 * returned 367 * 368 * The main purpose of this function is to retrieve the device node for the 369 * given logical CPU index. It should be used to initialize the of_node in 370 * cpu device. Once of_node in cpu device is populated, all the further 371 * references can use that instead. 372 * 373 * CPU logical to physical index mapping is architecture specific and is built 374 * before booting secondary cores. This function uses arch_match_cpu_phys_id 375 * which can be overridden by architecture specific implementation. 376 * 377 * Return: A node pointer for the logical cpu with refcount incremented, use 378 * of_node_put() on it when done. Returns NULL if not found. 379 */ 380 struct device_node *of_get_cpu_node(int cpu, unsigned int *thread) 381 { 382 struct device_node *cpun; 383 384 for_each_of_cpu_node(cpun) { 385 if (arch_find_n_match_cpu_physical_id(cpun, cpu, thread)) 386 return cpun; 387 } 388 return NULL; 389 } 390 EXPORT_SYMBOL(of_get_cpu_node); 391 392 /** 393 * of_cpu_node_to_id: Get the logical CPU number for a given device_node 394 * 395 * @cpu_node: Pointer to the device_node for CPU. 396 * 397 * Return: The logical CPU number of the given CPU device_node or -ENODEV if the 398 * CPU is not found. 399 */ 400 int of_cpu_node_to_id(struct device_node *cpu_node) 401 { 402 int cpu; 403 bool found = false; 404 struct device_node *np; 405 406 for_each_possible_cpu(cpu) { 407 np = of_cpu_device_node_get(cpu); 408 found = (cpu_node == np); 409 of_node_put(np); 410 if (found) 411 return cpu; 412 } 413 414 return -ENODEV; 415 } 416 EXPORT_SYMBOL(of_cpu_node_to_id); 417 418 /** 419 * of_get_cpu_state_node - Get CPU's idle state node at the given index 420 * 421 * @cpu_node: The device node for the CPU 422 * @index: The index in the list of the idle states 423 * 424 * Two generic methods can be used to describe a CPU's idle states, either via 425 * a flattened description through the "cpu-idle-states" binding or via the 426 * hierarchical layout, using the "power-domains" and the "domain-idle-states" 427 * bindings. This function check for both and returns the idle state node for 428 * the requested index. 429 * 430 * Return: An idle state node if found at @index. The refcount is incremented 431 * for it, so call of_node_put() on it when done. Returns NULL if not found. 432 */ 433 struct device_node *of_get_cpu_state_node(struct device_node *cpu_node, 434 int index) 435 { 436 struct of_phandle_args args; 437 int err; 438 439 err = of_parse_phandle_with_args(cpu_node, "power-domains", 440 "#power-domain-cells", 0, &args); 441 if (!err) { 442 struct device_node *state_node = 443 of_parse_phandle(args.np, "domain-idle-states", index); 444 445 of_node_put(args.np); 446 if (state_node) 447 return state_node; 448 } 449 450 return of_parse_phandle(cpu_node, "cpu-idle-states", index); 451 } 452 EXPORT_SYMBOL(of_get_cpu_state_node); 453 454 /** 455 * __of_device_is_compatible() - Check if the node matches given constraints 456 * @device: pointer to node 457 * @compat: required compatible string, NULL or "" for any match 458 * @type: required device_type value, NULL or "" for any match 459 * @name: required node name, NULL or "" for any match 460 * 461 * Checks if the given @compat, @type and @name strings match the 462 * properties of the given @device. A constraints can be skipped by 463 * passing NULL or an empty string as the constraint. 464 * 465 * Returns 0 for no match, and a positive integer on match. The return 466 * value is a relative score with larger values indicating better 467 * matches. The score is weighted for the most specific compatible value 468 * to get the highest score. Matching type is next, followed by matching 469 * name. Practically speaking, this results in the following priority 470 * order for matches: 471 * 472 * 1. specific compatible && type && name 473 * 2. specific compatible && type 474 * 3. specific compatible && name 475 * 4. specific compatible 476 * 5. general compatible && type && name 477 * 6. general compatible && type 478 * 7. general compatible && name 479 * 8. general compatible 480 * 9. type && name 481 * 10. type 482 * 11. name 483 */ 484 static int __of_device_is_compatible(const struct device_node *device, 485 const char *compat, const char *type, const char *name) 486 { 487 struct property *prop; 488 const char *cp; 489 int index = 0, score = 0; 490 491 /* Compatible match has highest priority */ 492 if (compat && compat[0]) { 493 prop = __of_find_property(device, "compatible", NULL); 494 for (cp = of_prop_next_string(prop, NULL); cp; 495 cp = of_prop_next_string(prop, cp), index++) { 496 if (of_compat_cmp(cp, compat, strlen(compat)) == 0) { 497 score = INT_MAX/2 - (index << 2); 498 break; 499 } 500 } 501 if (!score) 502 return 0; 503 } 504 505 /* Matching type is better than matching name */ 506 if (type && type[0]) { 507 if (!__of_node_is_type(device, type)) 508 return 0; 509 score += 2; 510 } 511 512 /* Matching name is a bit better than not */ 513 if (name && name[0]) { 514 if (!of_node_name_eq(device, name)) 515 return 0; 516 score++; 517 } 518 519 return score; 520 } 521 522 /** Checks if the given "compat" string matches one of the strings in 523 * the device's "compatible" property 524 */ 525 int of_device_is_compatible(const struct device_node *device, 526 const char *compat) 527 { 528 unsigned long flags; 529 int res; 530 531 raw_spin_lock_irqsave(&devtree_lock, flags); 532 res = __of_device_is_compatible(device, compat, NULL, NULL); 533 raw_spin_unlock_irqrestore(&devtree_lock, flags); 534 return res; 535 } 536 EXPORT_SYMBOL(of_device_is_compatible); 537 538 /** Checks if the device is compatible with any of the entries in 539 * a NULL terminated array of strings. Returns the best match 540 * score or 0. 541 */ 542 int of_device_compatible_match(struct device_node *device, 543 const char *const *compat) 544 { 545 unsigned int tmp, score = 0; 546 547 if (!compat) 548 return 0; 549 550 while (*compat) { 551 tmp = of_device_is_compatible(device, *compat); 552 if (tmp > score) 553 score = tmp; 554 compat++; 555 } 556 557 return score; 558 } 559 560 /** 561 * of_machine_is_compatible - Test root of device tree for a given compatible value 562 * @compat: compatible string to look for in root node's compatible property. 563 * 564 * Return: A positive integer if the root node has the given value in its 565 * compatible property. 566 */ 567 int of_machine_is_compatible(const char *compat) 568 { 569 struct device_node *root; 570 int rc = 0; 571 572 root = of_find_node_by_path("/"); 573 if (root) { 574 rc = of_device_is_compatible(root, compat); 575 of_node_put(root); 576 } 577 return rc; 578 } 579 EXPORT_SYMBOL(of_machine_is_compatible); 580 581 /** 582 * __of_device_is_available - check if a device is available for use 583 * 584 * @device: Node to check for availability, with locks already held 585 * 586 * Return: True if the status property is absent or set to "okay" or "ok", 587 * false otherwise 588 */ 589 static bool __of_device_is_available(const struct device_node *device) 590 { 591 const char *status; 592 int statlen; 593 594 if (!device) 595 return false; 596 597 status = __of_get_property(device, "status", &statlen); 598 if (status == NULL) 599 return true; 600 601 if (statlen > 0) { 602 if (!strcmp(status, "okay") || !strcmp(status, "ok")) 603 return true; 604 } 605 606 return false; 607 } 608 609 /** 610 * of_device_is_available - check if a device is available for use 611 * 612 * @device: Node to check for availability 613 * 614 * Return: True if the status property is absent or set to "okay" or "ok", 615 * false otherwise 616 */ 617 bool of_device_is_available(const struct device_node *device) 618 { 619 unsigned long flags; 620 bool res; 621 622 raw_spin_lock_irqsave(&devtree_lock, flags); 623 res = __of_device_is_available(device); 624 raw_spin_unlock_irqrestore(&devtree_lock, flags); 625 return res; 626 627 } 628 EXPORT_SYMBOL(of_device_is_available); 629 630 /** 631 * of_device_is_big_endian - check if a device has BE registers 632 * 633 * @device: Node to check for endianness 634 * 635 * Return: True if the device has a "big-endian" property, or if the kernel 636 * was compiled for BE *and* the device has a "native-endian" property. 637 * Returns false otherwise. 638 * 639 * Callers would nominally use ioread32be/iowrite32be if 640 * of_device_is_big_endian() == true, or readl/writel otherwise. 641 */ 642 bool of_device_is_big_endian(const struct device_node *device) 643 { 644 if (of_property_read_bool(device, "big-endian")) 645 return true; 646 if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) && 647 of_property_read_bool(device, "native-endian")) 648 return true; 649 return false; 650 } 651 EXPORT_SYMBOL(of_device_is_big_endian); 652 653 /** 654 * of_get_parent - Get a node's parent if any 655 * @node: Node to get parent 656 * 657 * Return: A node pointer with refcount incremented, use 658 * of_node_put() on it when done. 659 */ 660 struct device_node *of_get_parent(const struct device_node *node) 661 { 662 struct device_node *np; 663 unsigned long flags; 664 665 if (!node) 666 return NULL; 667 668 raw_spin_lock_irqsave(&devtree_lock, flags); 669 np = of_node_get(node->parent); 670 raw_spin_unlock_irqrestore(&devtree_lock, flags); 671 return np; 672 } 673 EXPORT_SYMBOL(of_get_parent); 674 675 /** 676 * of_get_next_parent - Iterate to a node's parent 677 * @node: Node to get parent of 678 * 679 * This is like of_get_parent() except that it drops the 680 * refcount on the passed node, making it suitable for iterating 681 * through a node's parents. 682 * 683 * Return: A node pointer with refcount incremented, use 684 * of_node_put() on it when done. 685 */ 686 struct device_node *of_get_next_parent(struct device_node *node) 687 { 688 struct device_node *parent; 689 unsigned long flags; 690 691 if (!node) 692 return NULL; 693 694 raw_spin_lock_irqsave(&devtree_lock, flags); 695 parent = of_node_get(node->parent); 696 of_node_put(node); 697 raw_spin_unlock_irqrestore(&devtree_lock, flags); 698 return parent; 699 } 700 EXPORT_SYMBOL(of_get_next_parent); 701 702 static struct device_node *__of_get_next_child(const struct device_node *node, 703 struct device_node *prev) 704 { 705 struct device_node *next; 706 707 if (!node) 708 return NULL; 709 710 next = prev ? prev->sibling : node->child; 711 of_node_get(next); 712 of_node_put(prev); 713 return next; 714 } 715 #define __for_each_child_of_node(parent, child) \ 716 for (child = __of_get_next_child(parent, NULL); child != NULL; \ 717 child = __of_get_next_child(parent, child)) 718 719 /** 720 * of_get_next_child - Iterate a node childs 721 * @node: parent node 722 * @prev: previous child of the parent node, or NULL to get first 723 * 724 * Return: A node pointer with refcount incremented, use of_node_put() on 725 * it when done. Returns NULL when prev is the last child. Decrements the 726 * refcount of prev. 727 */ 728 struct device_node *of_get_next_child(const struct device_node *node, 729 struct device_node *prev) 730 { 731 struct device_node *next; 732 unsigned long flags; 733 734 raw_spin_lock_irqsave(&devtree_lock, flags); 735 next = __of_get_next_child(node, prev); 736 raw_spin_unlock_irqrestore(&devtree_lock, flags); 737 return next; 738 } 739 EXPORT_SYMBOL(of_get_next_child); 740 741 /** 742 * of_get_next_available_child - Find the next available child node 743 * @node: parent node 744 * @prev: previous child of the parent node, or NULL to get first 745 * 746 * This function is like of_get_next_child(), except that it 747 * automatically skips any disabled nodes (i.e. status = "disabled"). 748 */ 749 struct device_node *of_get_next_available_child(const struct device_node *node, 750 struct device_node *prev) 751 { 752 struct device_node *next; 753 unsigned long flags; 754 755 if (!node) 756 return NULL; 757 758 raw_spin_lock_irqsave(&devtree_lock, flags); 759 next = prev ? prev->sibling : node->child; 760 for (; next; next = next->sibling) { 761 if (!__of_device_is_available(next)) 762 continue; 763 if (of_node_get(next)) 764 break; 765 } 766 of_node_put(prev); 767 raw_spin_unlock_irqrestore(&devtree_lock, flags); 768 return next; 769 } 770 EXPORT_SYMBOL(of_get_next_available_child); 771 772 /** 773 * of_get_next_cpu_node - Iterate on cpu nodes 774 * @prev: previous child of the /cpus node, or NULL to get first 775 * 776 * Return: A cpu node pointer with refcount incremented, use of_node_put() 777 * on it when done. Returns NULL when prev is the last child. Decrements 778 * the refcount of prev. 779 */ 780 struct device_node *of_get_next_cpu_node(struct device_node *prev) 781 { 782 struct device_node *next = NULL; 783 unsigned long flags; 784 struct device_node *node; 785 786 if (!prev) 787 node = of_find_node_by_path("/cpus"); 788 789 raw_spin_lock_irqsave(&devtree_lock, flags); 790 if (prev) 791 next = prev->sibling; 792 else if (node) { 793 next = node->child; 794 of_node_put(node); 795 } 796 for (; next; next = next->sibling) { 797 if (!(of_node_name_eq(next, "cpu") || 798 __of_node_is_type(next, "cpu"))) 799 continue; 800 if (of_node_get(next)) 801 break; 802 } 803 of_node_put(prev); 804 raw_spin_unlock_irqrestore(&devtree_lock, flags); 805 return next; 806 } 807 EXPORT_SYMBOL(of_get_next_cpu_node); 808 809 /** 810 * of_get_compatible_child - Find compatible child node 811 * @parent: parent node 812 * @compatible: compatible string 813 * 814 * Lookup child node whose compatible property contains the given compatible 815 * string. 816 * 817 * Return: a node pointer with refcount incremented, use of_node_put() on it 818 * when done; or NULL if not found. 819 */ 820 struct device_node *of_get_compatible_child(const struct device_node *parent, 821 const char *compatible) 822 { 823 struct device_node *child; 824 825 for_each_child_of_node(parent, child) { 826 if (of_device_is_compatible(child, compatible)) 827 break; 828 } 829 830 return child; 831 } 832 EXPORT_SYMBOL(of_get_compatible_child); 833 834 /** 835 * of_get_child_by_name - Find the child node by name for a given parent 836 * @node: parent node 837 * @name: child name to look for. 838 * 839 * This function looks for child node for given matching name 840 * 841 * Return: A node pointer if found, with refcount incremented, use 842 * of_node_put() on it when done. 843 * Returns NULL if node is not found. 844 */ 845 struct device_node *of_get_child_by_name(const struct device_node *node, 846 const char *name) 847 { 848 struct device_node *child; 849 850 for_each_child_of_node(node, child) 851 if (of_node_name_eq(child, name)) 852 break; 853 return child; 854 } 855 EXPORT_SYMBOL(of_get_child_by_name); 856 857 struct device_node *__of_find_node_by_path(struct device_node *parent, 858 const char *path) 859 { 860 struct device_node *child; 861 int len; 862 863 len = strcspn(path, "/:"); 864 if (!len) 865 return NULL; 866 867 __for_each_child_of_node(parent, child) { 868 const char *name = kbasename(child->full_name); 869 if (strncmp(path, name, len) == 0 && (strlen(name) == len)) 870 return child; 871 } 872 return NULL; 873 } 874 875 struct device_node *__of_find_node_by_full_path(struct device_node *node, 876 const char *path) 877 { 878 const char *separator = strchr(path, ':'); 879 880 while (node && *path == '/') { 881 struct device_node *tmp = node; 882 883 path++; /* Increment past '/' delimiter */ 884 node = __of_find_node_by_path(node, path); 885 of_node_put(tmp); 886 path = strchrnul(path, '/'); 887 if (separator && separator < path) 888 break; 889 } 890 return node; 891 } 892 893 /** 894 * of_find_node_opts_by_path - Find a node matching a full OF path 895 * @path: Either the full path to match, or if the path does not 896 * start with '/', the name of a property of the /aliases 897 * node (an alias). In the case of an alias, the node 898 * matching the alias' value will be returned. 899 * @opts: Address of a pointer into which to store the start of 900 * an options string appended to the end of the path with 901 * a ':' separator. 902 * 903 * Valid paths: 904 * * /foo/bar Full path 905 * * foo Valid alias 906 * * foo/bar Valid alias + relative path 907 * 908 * Return: A node pointer with refcount incremented, use 909 * of_node_put() on it when done. 910 */ 911 struct device_node *of_find_node_opts_by_path(const char *path, const char **opts) 912 { 913 struct device_node *np = NULL; 914 struct property *pp; 915 unsigned long flags; 916 const char *separator = strchr(path, ':'); 917 918 if (opts) 919 *opts = separator ? separator + 1 : NULL; 920 921 if (strcmp(path, "/") == 0) 922 return of_node_get(of_root); 923 924 /* The path could begin with an alias */ 925 if (*path != '/') { 926 int len; 927 const char *p = separator; 928 929 if (!p) 930 p = strchrnul(path, '/'); 931 len = p - path; 932 933 /* of_aliases must not be NULL */ 934 if (!of_aliases) 935 return NULL; 936 937 for_each_property_of_node(of_aliases, pp) { 938 if (strlen(pp->name) == len && !strncmp(pp->name, path, len)) { 939 np = of_find_node_by_path(pp->value); 940 break; 941 } 942 } 943 if (!np) 944 return NULL; 945 path = p; 946 } 947 948 /* Step down the tree matching path components */ 949 raw_spin_lock_irqsave(&devtree_lock, flags); 950 if (!np) 951 np = of_node_get(of_root); 952 np = __of_find_node_by_full_path(np, path); 953 raw_spin_unlock_irqrestore(&devtree_lock, flags); 954 return np; 955 } 956 EXPORT_SYMBOL(of_find_node_opts_by_path); 957 958 /** 959 * of_find_node_by_name - Find a node by its "name" property 960 * @from: The node to start searching from or NULL; the node 961 * you pass will not be searched, only the next one 962 * will. Typically, you pass what the previous call 963 * returned. of_node_put() will be called on @from. 964 * @name: The name string to match against 965 * 966 * Return: A node pointer with refcount incremented, use 967 * of_node_put() on it when done. 968 */ 969 struct device_node *of_find_node_by_name(struct device_node *from, 970 const char *name) 971 { 972 struct device_node *np; 973 unsigned long flags; 974 975 raw_spin_lock_irqsave(&devtree_lock, flags); 976 for_each_of_allnodes_from(from, np) 977 if (of_node_name_eq(np, name) && of_node_get(np)) 978 break; 979 of_node_put(from); 980 raw_spin_unlock_irqrestore(&devtree_lock, flags); 981 return np; 982 } 983 EXPORT_SYMBOL(of_find_node_by_name); 984 985 /** 986 * of_find_node_by_type - Find a node by its "device_type" property 987 * @from: The node to start searching from, or NULL to start searching 988 * the entire device tree. The node you pass will not be 989 * searched, only the next one will; typically, you pass 990 * what the previous call returned. of_node_put() will be 991 * called on from for you. 992 * @type: The type string to match against 993 * 994 * Return: A node pointer with refcount incremented, use 995 * of_node_put() on it when done. 996 */ 997 struct device_node *of_find_node_by_type(struct device_node *from, 998 const char *type) 999 { 1000 struct device_node *np; 1001 unsigned long flags; 1002 1003 raw_spin_lock_irqsave(&devtree_lock, flags); 1004 for_each_of_allnodes_from(from, np) 1005 if (__of_node_is_type(np, type) && of_node_get(np)) 1006 break; 1007 of_node_put(from); 1008 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1009 return np; 1010 } 1011 EXPORT_SYMBOL(of_find_node_by_type); 1012 1013 /** 1014 * of_find_compatible_node - Find a node based on type and one of the 1015 * tokens in its "compatible" property 1016 * @from: The node to start searching from or NULL, the node 1017 * you pass will not be searched, only the next one 1018 * will; typically, you pass what the previous call 1019 * returned. of_node_put() will be called on it 1020 * @type: The type string to match "device_type" or NULL to ignore 1021 * @compatible: The string to match to one of the tokens in the device 1022 * "compatible" list. 1023 * 1024 * Return: A node pointer with refcount incremented, use 1025 * of_node_put() on it when done. 1026 */ 1027 struct device_node *of_find_compatible_node(struct device_node *from, 1028 const char *type, const char *compatible) 1029 { 1030 struct device_node *np; 1031 unsigned long flags; 1032 1033 raw_spin_lock_irqsave(&devtree_lock, flags); 1034 for_each_of_allnodes_from(from, np) 1035 if (__of_device_is_compatible(np, compatible, type, NULL) && 1036 of_node_get(np)) 1037 break; 1038 of_node_put(from); 1039 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1040 return np; 1041 } 1042 EXPORT_SYMBOL(of_find_compatible_node); 1043 1044 /** 1045 * of_find_node_with_property - Find a node which has a property with 1046 * the given name. 1047 * @from: The node to start searching from or NULL, the node 1048 * you pass will not be searched, only the next one 1049 * will; typically, you pass what the previous call 1050 * returned. of_node_put() will be called on it 1051 * @prop_name: The name of the property to look for. 1052 * 1053 * Return: A node pointer with refcount incremented, use 1054 * of_node_put() on it when done. 1055 */ 1056 struct device_node *of_find_node_with_property(struct device_node *from, 1057 const char *prop_name) 1058 { 1059 struct device_node *np; 1060 struct property *pp; 1061 unsigned long flags; 1062 1063 raw_spin_lock_irqsave(&devtree_lock, flags); 1064 for_each_of_allnodes_from(from, np) { 1065 for (pp = np->properties; pp; pp = pp->next) { 1066 if (of_prop_cmp(pp->name, prop_name) == 0) { 1067 of_node_get(np); 1068 goto out; 1069 } 1070 } 1071 } 1072 out: 1073 of_node_put(from); 1074 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1075 return np; 1076 } 1077 EXPORT_SYMBOL(of_find_node_with_property); 1078 1079 static 1080 const struct of_device_id *__of_match_node(const struct of_device_id *matches, 1081 const struct device_node *node) 1082 { 1083 const struct of_device_id *best_match = NULL; 1084 int score, best_score = 0; 1085 1086 if (!matches) 1087 return NULL; 1088 1089 for (; matches->name[0] || matches->type[0] || matches->compatible[0]; matches++) { 1090 score = __of_device_is_compatible(node, matches->compatible, 1091 matches->type, matches->name); 1092 if (score > best_score) { 1093 best_match = matches; 1094 best_score = score; 1095 } 1096 } 1097 1098 return best_match; 1099 } 1100 1101 /** 1102 * of_match_node - Tell if a device_node has a matching of_match structure 1103 * @matches: array of of device match structures to search in 1104 * @node: the of device structure to match against 1105 * 1106 * Low level utility function used by device matching. 1107 */ 1108 const struct of_device_id *of_match_node(const struct of_device_id *matches, 1109 const struct device_node *node) 1110 { 1111 const struct of_device_id *match; 1112 unsigned long flags; 1113 1114 raw_spin_lock_irqsave(&devtree_lock, flags); 1115 match = __of_match_node(matches, node); 1116 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1117 return match; 1118 } 1119 EXPORT_SYMBOL(of_match_node); 1120 1121 /** 1122 * of_find_matching_node_and_match - Find a node based on an of_device_id 1123 * match table. 1124 * @from: The node to start searching from or NULL, the node 1125 * you pass will not be searched, only the next one 1126 * will; typically, you pass what the previous call 1127 * returned. of_node_put() will be called on it 1128 * @matches: array of of device match structures to search in 1129 * @match: Updated to point at the matches entry which matched 1130 * 1131 * Return: A node pointer with refcount incremented, use 1132 * of_node_put() on it when done. 1133 */ 1134 struct device_node *of_find_matching_node_and_match(struct device_node *from, 1135 const struct of_device_id *matches, 1136 const struct of_device_id **match) 1137 { 1138 struct device_node *np; 1139 const struct of_device_id *m; 1140 unsigned long flags; 1141 1142 if (match) 1143 *match = NULL; 1144 1145 raw_spin_lock_irqsave(&devtree_lock, flags); 1146 for_each_of_allnodes_from(from, np) { 1147 m = __of_match_node(matches, np); 1148 if (m && of_node_get(np)) { 1149 if (match) 1150 *match = m; 1151 break; 1152 } 1153 } 1154 of_node_put(from); 1155 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1156 return np; 1157 } 1158 EXPORT_SYMBOL(of_find_matching_node_and_match); 1159 1160 /** 1161 * of_modalias_node - Lookup appropriate modalias for a device node 1162 * @node: pointer to a device tree node 1163 * @modalias: Pointer to buffer that modalias value will be copied into 1164 * @len: Length of modalias value 1165 * 1166 * Based on the value of the compatible property, this routine will attempt 1167 * to choose an appropriate modalias value for a particular device tree node. 1168 * It does this by stripping the manufacturer prefix (as delimited by a ',') 1169 * from the first entry in the compatible list property. 1170 * 1171 * Return: This routine returns 0 on success, <0 on failure. 1172 */ 1173 int of_modalias_node(struct device_node *node, char *modalias, int len) 1174 { 1175 const char *compatible, *p; 1176 int cplen; 1177 1178 compatible = of_get_property(node, "compatible", &cplen); 1179 if (!compatible || strlen(compatible) > cplen) 1180 return -ENODEV; 1181 p = strchr(compatible, ','); 1182 strlcpy(modalias, p ? p + 1 : compatible, len); 1183 return 0; 1184 } 1185 EXPORT_SYMBOL_GPL(of_modalias_node); 1186 1187 /** 1188 * of_find_node_by_phandle - Find a node given a phandle 1189 * @handle: phandle of the node to find 1190 * 1191 * Return: A node pointer with refcount incremented, use 1192 * of_node_put() on it when done. 1193 */ 1194 struct device_node *of_find_node_by_phandle(phandle handle) 1195 { 1196 struct device_node *np = NULL; 1197 unsigned long flags; 1198 u32 handle_hash; 1199 1200 if (!handle) 1201 return NULL; 1202 1203 handle_hash = of_phandle_cache_hash(handle); 1204 1205 raw_spin_lock_irqsave(&devtree_lock, flags); 1206 1207 if (phandle_cache[handle_hash] && 1208 handle == phandle_cache[handle_hash]->phandle) 1209 np = phandle_cache[handle_hash]; 1210 1211 if (!np) { 1212 for_each_of_allnodes(np) 1213 if (np->phandle == handle && 1214 !of_node_check_flag(np, OF_DETACHED)) { 1215 phandle_cache[handle_hash] = np; 1216 break; 1217 } 1218 } 1219 1220 of_node_get(np); 1221 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1222 return np; 1223 } 1224 EXPORT_SYMBOL(of_find_node_by_phandle); 1225 1226 void of_print_phandle_args(const char *msg, const struct of_phandle_args *args) 1227 { 1228 int i; 1229 printk("%s %pOF", msg, args->np); 1230 for (i = 0; i < args->args_count; i++) { 1231 const char delim = i ? ',' : ':'; 1232 1233 pr_cont("%c%08x", delim, args->args[i]); 1234 } 1235 pr_cont("\n"); 1236 } 1237 1238 int of_phandle_iterator_init(struct of_phandle_iterator *it, 1239 const struct device_node *np, 1240 const char *list_name, 1241 const char *cells_name, 1242 int cell_count) 1243 { 1244 const __be32 *list; 1245 int size; 1246 1247 memset(it, 0, sizeof(*it)); 1248 1249 /* 1250 * one of cell_count or cells_name must be provided to determine the 1251 * argument length. 1252 */ 1253 if (cell_count < 0 && !cells_name) 1254 return -EINVAL; 1255 1256 list = of_get_property(np, list_name, &size); 1257 if (!list) 1258 return -ENOENT; 1259 1260 it->cells_name = cells_name; 1261 it->cell_count = cell_count; 1262 it->parent = np; 1263 it->list_end = list + size / sizeof(*list); 1264 it->phandle_end = list; 1265 it->cur = list; 1266 1267 return 0; 1268 } 1269 EXPORT_SYMBOL_GPL(of_phandle_iterator_init); 1270 1271 int of_phandle_iterator_next(struct of_phandle_iterator *it) 1272 { 1273 uint32_t count = 0; 1274 1275 if (it->node) { 1276 of_node_put(it->node); 1277 it->node = NULL; 1278 } 1279 1280 if (!it->cur || it->phandle_end >= it->list_end) 1281 return -ENOENT; 1282 1283 it->cur = it->phandle_end; 1284 1285 /* If phandle is 0, then it is an empty entry with no arguments. */ 1286 it->phandle = be32_to_cpup(it->cur++); 1287 1288 if (it->phandle) { 1289 1290 /* 1291 * Find the provider node and parse the #*-cells property to 1292 * determine the argument length. 1293 */ 1294 it->node = of_find_node_by_phandle(it->phandle); 1295 1296 if (it->cells_name) { 1297 if (!it->node) { 1298 pr_err("%pOF: could not find phandle %d\n", 1299 it->parent, it->phandle); 1300 goto err; 1301 } 1302 1303 if (of_property_read_u32(it->node, it->cells_name, 1304 &count)) { 1305 /* 1306 * If both cell_count and cells_name is given, 1307 * fall back to cell_count in absence 1308 * of the cells_name property 1309 */ 1310 if (it->cell_count >= 0) { 1311 count = it->cell_count; 1312 } else { 1313 pr_err("%pOF: could not get %s for %pOF\n", 1314 it->parent, 1315 it->cells_name, 1316 it->node); 1317 goto err; 1318 } 1319 } 1320 } else { 1321 count = it->cell_count; 1322 } 1323 1324 /* 1325 * Make sure that the arguments actually fit in the remaining 1326 * property data length 1327 */ 1328 if (it->cur + count > it->list_end) { 1329 pr_err("%pOF: %s = %d found %d\n", 1330 it->parent, it->cells_name, 1331 count, it->cell_count); 1332 goto err; 1333 } 1334 } 1335 1336 it->phandle_end = it->cur + count; 1337 it->cur_count = count; 1338 1339 return 0; 1340 1341 err: 1342 if (it->node) { 1343 of_node_put(it->node); 1344 it->node = NULL; 1345 } 1346 1347 return -EINVAL; 1348 } 1349 EXPORT_SYMBOL_GPL(of_phandle_iterator_next); 1350 1351 int of_phandle_iterator_args(struct of_phandle_iterator *it, 1352 uint32_t *args, 1353 int size) 1354 { 1355 int i, count; 1356 1357 count = it->cur_count; 1358 1359 if (WARN_ON(size < count)) 1360 count = size; 1361 1362 for (i = 0; i < count; i++) 1363 args[i] = be32_to_cpup(it->cur++); 1364 1365 return count; 1366 } 1367 1368 static int __of_parse_phandle_with_args(const struct device_node *np, 1369 const char *list_name, 1370 const char *cells_name, 1371 int cell_count, int index, 1372 struct of_phandle_args *out_args) 1373 { 1374 struct of_phandle_iterator it; 1375 int rc, cur_index = 0; 1376 1377 /* Loop over the phandles until all the requested entry is found */ 1378 of_for_each_phandle(&it, rc, np, list_name, cells_name, cell_count) { 1379 /* 1380 * All of the error cases bail out of the loop, so at 1381 * this point, the parsing is successful. If the requested 1382 * index matches, then fill the out_args structure and return, 1383 * or return -ENOENT for an empty entry. 1384 */ 1385 rc = -ENOENT; 1386 if (cur_index == index) { 1387 if (!it.phandle) 1388 goto err; 1389 1390 if (out_args) { 1391 int c; 1392 1393 c = of_phandle_iterator_args(&it, 1394 out_args->args, 1395 MAX_PHANDLE_ARGS); 1396 out_args->np = it.node; 1397 out_args->args_count = c; 1398 } else { 1399 of_node_put(it.node); 1400 } 1401 1402 /* Found it! return success */ 1403 return 0; 1404 } 1405 1406 cur_index++; 1407 } 1408 1409 /* 1410 * Unlock node before returning result; will be one of: 1411 * -ENOENT : index is for empty phandle 1412 * -EINVAL : parsing error on data 1413 */ 1414 1415 err: 1416 of_node_put(it.node); 1417 return rc; 1418 } 1419 1420 /** 1421 * of_parse_phandle - Resolve a phandle property to a device_node pointer 1422 * @np: Pointer to device node holding phandle property 1423 * @phandle_name: Name of property holding a phandle value 1424 * @index: For properties holding a table of phandles, this is the index into 1425 * the table 1426 * 1427 * Return: The device_node pointer with refcount incremented. Use 1428 * of_node_put() on it when done. 1429 */ 1430 struct device_node *of_parse_phandle(const struct device_node *np, 1431 const char *phandle_name, int index) 1432 { 1433 struct of_phandle_args args; 1434 1435 if (index < 0) 1436 return NULL; 1437 1438 if (__of_parse_phandle_with_args(np, phandle_name, NULL, 0, 1439 index, &args)) 1440 return NULL; 1441 1442 return args.np; 1443 } 1444 EXPORT_SYMBOL(of_parse_phandle); 1445 1446 /** 1447 * of_parse_phandle_with_args() - Find a node pointed by phandle in a list 1448 * @np: pointer to a device tree node containing a list 1449 * @list_name: property name that contains a list 1450 * @cells_name: property name that specifies phandles' arguments count 1451 * @index: index of a phandle to parse out 1452 * @out_args: optional pointer to output arguments structure (will be filled) 1453 * 1454 * This function is useful to parse lists of phandles and their arguments. 1455 * Returns 0 on success and fills out_args, on error returns appropriate 1456 * errno value. 1457 * 1458 * Caller is responsible to call of_node_put() on the returned out_args->np 1459 * pointer. 1460 * 1461 * Example:: 1462 * 1463 * phandle1: node1 { 1464 * #list-cells = <2>; 1465 * }; 1466 * 1467 * phandle2: node2 { 1468 * #list-cells = <1>; 1469 * }; 1470 * 1471 * node3 { 1472 * list = <&phandle1 1 2 &phandle2 3>; 1473 * }; 1474 * 1475 * To get a device_node of the ``node2`` node you may call this: 1476 * of_parse_phandle_with_args(node3, "list", "#list-cells", 1, &args); 1477 */ 1478 int of_parse_phandle_with_args(const struct device_node *np, const char *list_name, 1479 const char *cells_name, int index, 1480 struct of_phandle_args *out_args) 1481 { 1482 int cell_count = -1; 1483 1484 if (index < 0) 1485 return -EINVAL; 1486 1487 /* If cells_name is NULL we assume a cell count of 0 */ 1488 if (!cells_name) 1489 cell_count = 0; 1490 1491 return __of_parse_phandle_with_args(np, list_name, cells_name, 1492 cell_count, index, out_args); 1493 } 1494 EXPORT_SYMBOL(of_parse_phandle_with_args); 1495 1496 /** 1497 * of_parse_phandle_with_args_map() - Find a node pointed by phandle in a list and remap it 1498 * @np: pointer to a device tree node containing a list 1499 * @list_name: property name that contains a list 1500 * @stem_name: stem of property names that specify phandles' arguments count 1501 * @index: index of a phandle to parse out 1502 * @out_args: optional pointer to output arguments structure (will be filled) 1503 * 1504 * This function is useful to parse lists of phandles and their arguments. 1505 * Returns 0 on success and fills out_args, on error returns appropriate errno 1506 * value. The difference between this function and of_parse_phandle_with_args() 1507 * is that this API remaps a phandle if the node the phandle points to has 1508 * a <@stem_name>-map property. 1509 * 1510 * Caller is responsible to call of_node_put() on the returned out_args->np 1511 * pointer. 1512 * 1513 * Example:: 1514 * 1515 * phandle1: node1 { 1516 * #list-cells = <2>; 1517 * }; 1518 * 1519 * phandle2: node2 { 1520 * #list-cells = <1>; 1521 * }; 1522 * 1523 * phandle3: node3 { 1524 * #list-cells = <1>; 1525 * list-map = <0 &phandle2 3>, 1526 * <1 &phandle2 2>, 1527 * <2 &phandle1 5 1>; 1528 * list-map-mask = <0x3>; 1529 * }; 1530 * 1531 * node4 { 1532 * list = <&phandle1 1 2 &phandle3 0>; 1533 * }; 1534 * 1535 * To get a device_node of the ``node2`` node you may call this: 1536 * of_parse_phandle_with_args(node4, "list", "list", 1, &args); 1537 */ 1538 int of_parse_phandle_with_args_map(const struct device_node *np, 1539 const char *list_name, 1540 const char *stem_name, 1541 int index, struct of_phandle_args *out_args) 1542 { 1543 char *cells_name, *map_name = NULL, *mask_name = NULL; 1544 char *pass_name = NULL; 1545 struct device_node *cur, *new = NULL; 1546 const __be32 *map, *mask, *pass; 1547 static const __be32 dummy_mask[] = { [0 ... MAX_PHANDLE_ARGS] = ~0 }; 1548 static const __be32 dummy_pass[] = { [0 ... MAX_PHANDLE_ARGS] = 0 }; 1549 __be32 initial_match_array[MAX_PHANDLE_ARGS]; 1550 const __be32 *match_array = initial_match_array; 1551 int i, ret, map_len, match; 1552 u32 list_size, new_size; 1553 1554 if (index < 0) 1555 return -EINVAL; 1556 1557 cells_name = kasprintf(GFP_KERNEL, "#%s-cells", stem_name); 1558 if (!cells_name) 1559 return -ENOMEM; 1560 1561 ret = -ENOMEM; 1562 map_name = kasprintf(GFP_KERNEL, "%s-map", stem_name); 1563 if (!map_name) 1564 goto free; 1565 1566 mask_name = kasprintf(GFP_KERNEL, "%s-map-mask", stem_name); 1567 if (!mask_name) 1568 goto free; 1569 1570 pass_name = kasprintf(GFP_KERNEL, "%s-map-pass-thru", stem_name); 1571 if (!pass_name) 1572 goto free; 1573 1574 ret = __of_parse_phandle_with_args(np, list_name, cells_name, -1, index, 1575 out_args); 1576 if (ret) 1577 goto free; 1578 1579 /* Get the #<list>-cells property */ 1580 cur = out_args->np; 1581 ret = of_property_read_u32(cur, cells_name, &list_size); 1582 if (ret < 0) 1583 goto put; 1584 1585 /* Precalculate the match array - this simplifies match loop */ 1586 for (i = 0; i < list_size; i++) 1587 initial_match_array[i] = cpu_to_be32(out_args->args[i]); 1588 1589 ret = -EINVAL; 1590 while (cur) { 1591 /* Get the <list>-map property */ 1592 map = of_get_property(cur, map_name, &map_len); 1593 if (!map) { 1594 ret = 0; 1595 goto free; 1596 } 1597 map_len /= sizeof(u32); 1598 1599 /* Get the <list>-map-mask property (optional) */ 1600 mask = of_get_property(cur, mask_name, NULL); 1601 if (!mask) 1602 mask = dummy_mask; 1603 /* Iterate through <list>-map property */ 1604 match = 0; 1605 while (map_len > (list_size + 1) && !match) { 1606 /* Compare specifiers */ 1607 match = 1; 1608 for (i = 0; i < list_size; i++, map_len--) 1609 match &= !((match_array[i] ^ *map++) & mask[i]); 1610 1611 of_node_put(new); 1612 new = of_find_node_by_phandle(be32_to_cpup(map)); 1613 map++; 1614 map_len--; 1615 1616 /* Check if not found */ 1617 if (!new) 1618 goto put; 1619 1620 if (!of_device_is_available(new)) 1621 match = 0; 1622 1623 ret = of_property_read_u32(new, cells_name, &new_size); 1624 if (ret) 1625 goto put; 1626 1627 /* Check for malformed properties */ 1628 if (WARN_ON(new_size > MAX_PHANDLE_ARGS)) 1629 goto put; 1630 if (map_len < new_size) 1631 goto put; 1632 1633 /* Move forward by new node's #<list>-cells amount */ 1634 map += new_size; 1635 map_len -= new_size; 1636 } 1637 if (!match) 1638 goto put; 1639 1640 /* Get the <list>-map-pass-thru property (optional) */ 1641 pass = of_get_property(cur, pass_name, NULL); 1642 if (!pass) 1643 pass = dummy_pass; 1644 1645 /* 1646 * Successfully parsed a <list>-map translation; copy new 1647 * specifier into the out_args structure, keeping the 1648 * bits specified in <list>-map-pass-thru. 1649 */ 1650 match_array = map - new_size; 1651 for (i = 0; i < new_size; i++) { 1652 __be32 val = *(map - new_size + i); 1653 1654 if (i < list_size) { 1655 val &= ~pass[i]; 1656 val |= cpu_to_be32(out_args->args[i]) & pass[i]; 1657 } 1658 1659 out_args->args[i] = be32_to_cpu(val); 1660 } 1661 out_args->args_count = list_size = new_size; 1662 /* Iterate again with new provider */ 1663 out_args->np = new; 1664 of_node_put(cur); 1665 cur = new; 1666 } 1667 put: 1668 of_node_put(cur); 1669 of_node_put(new); 1670 free: 1671 kfree(mask_name); 1672 kfree(map_name); 1673 kfree(cells_name); 1674 kfree(pass_name); 1675 1676 return ret; 1677 } 1678 EXPORT_SYMBOL(of_parse_phandle_with_args_map); 1679 1680 /** 1681 * of_parse_phandle_with_fixed_args() - Find a node pointed by phandle in a list 1682 * @np: pointer to a device tree node containing a list 1683 * @list_name: property name that contains a list 1684 * @cell_count: number of argument cells following the phandle 1685 * @index: index of a phandle to parse out 1686 * @out_args: optional pointer to output arguments structure (will be filled) 1687 * 1688 * This function is useful to parse lists of phandles and their arguments. 1689 * Returns 0 on success and fills out_args, on error returns appropriate 1690 * errno value. 1691 * 1692 * Caller is responsible to call of_node_put() on the returned out_args->np 1693 * pointer. 1694 * 1695 * Example:: 1696 * 1697 * phandle1: node1 { 1698 * }; 1699 * 1700 * phandle2: node2 { 1701 * }; 1702 * 1703 * node3 { 1704 * list = <&phandle1 0 2 &phandle2 2 3>; 1705 * }; 1706 * 1707 * To get a device_node of the ``node2`` node you may call this: 1708 * of_parse_phandle_with_fixed_args(node3, "list", 2, 1, &args); 1709 */ 1710 int of_parse_phandle_with_fixed_args(const struct device_node *np, 1711 const char *list_name, int cell_count, 1712 int index, struct of_phandle_args *out_args) 1713 { 1714 if (index < 0) 1715 return -EINVAL; 1716 return __of_parse_phandle_with_args(np, list_name, NULL, cell_count, 1717 index, out_args); 1718 } 1719 EXPORT_SYMBOL(of_parse_phandle_with_fixed_args); 1720 1721 /** 1722 * of_count_phandle_with_args() - Find the number of phandles references in a property 1723 * @np: pointer to a device tree node containing a list 1724 * @list_name: property name that contains a list 1725 * @cells_name: property name that specifies phandles' arguments count 1726 * 1727 * Return: The number of phandle + argument tuples within a property. It 1728 * is a typical pattern to encode a list of phandle and variable 1729 * arguments into a single property. The number of arguments is encoded 1730 * by a property in the phandle-target node. For example, a gpios 1731 * property would contain a list of GPIO specifies consisting of a 1732 * phandle and 1 or more arguments. The number of arguments are 1733 * determined by the #gpio-cells property in the node pointed to by the 1734 * phandle. 1735 */ 1736 int of_count_phandle_with_args(const struct device_node *np, const char *list_name, 1737 const char *cells_name) 1738 { 1739 struct of_phandle_iterator it; 1740 int rc, cur_index = 0; 1741 1742 /* 1743 * If cells_name is NULL we assume a cell count of 0. This makes 1744 * counting the phandles trivial as each 32bit word in the list is a 1745 * phandle and no arguments are to consider. So we don't iterate through 1746 * the list but just use the length to determine the phandle count. 1747 */ 1748 if (!cells_name) { 1749 const __be32 *list; 1750 int size; 1751 1752 list = of_get_property(np, list_name, &size); 1753 if (!list) 1754 return -ENOENT; 1755 1756 return size / sizeof(*list); 1757 } 1758 1759 rc = of_phandle_iterator_init(&it, np, list_name, cells_name, -1); 1760 if (rc) 1761 return rc; 1762 1763 while ((rc = of_phandle_iterator_next(&it)) == 0) 1764 cur_index += 1; 1765 1766 if (rc != -ENOENT) 1767 return rc; 1768 1769 return cur_index; 1770 } 1771 EXPORT_SYMBOL(of_count_phandle_with_args); 1772 1773 /** 1774 * __of_add_property - Add a property to a node without lock operations 1775 * @np: Caller's Device Node 1776 * @prop: Property to add 1777 */ 1778 int __of_add_property(struct device_node *np, struct property *prop) 1779 { 1780 struct property **next; 1781 1782 prop->next = NULL; 1783 next = &np->properties; 1784 while (*next) { 1785 if (strcmp(prop->name, (*next)->name) == 0) 1786 /* duplicate ! don't insert it */ 1787 return -EEXIST; 1788 1789 next = &(*next)->next; 1790 } 1791 *next = prop; 1792 1793 return 0; 1794 } 1795 1796 /** 1797 * of_add_property - Add a property to a node 1798 * @np: Caller's Device Node 1799 * @prop: Property to add 1800 */ 1801 int of_add_property(struct device_node *np, struct property *prop) 1802 { 1803 unsigned long flags; 1804 int rc; 1805 1806 mutex_lock(&of_mutex); 1807 1808 raw_spin_lock_irqsave(&devtree_lock, flags); 1809 rc = __of_add_property(np, prop); 1810 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1811 1812 if (!rc) 1813 __of_add_property_sysfs(np, prop); 1814 1815 mutex_unlock(&of_mutex); 1816 1817 if (!rc) 1818 of_property_notify(OF_RECONFIG_ADD_PROPERTY, np, prop, NULL); 1819 1820 return rc; 1821 } 1822 EXPORT_SYMBOL_GPL(of_add_property); 1823 1824 int __of_remove_property(struct device_node *np, struct property *prop) 1825 { 1826 struct property **next; 1827 1828 for (next = &np->properties; *next; next = &(*next)->next) { 1829 if (*next == prop) 1830 break; 1831 } 1832 if (*next == NULL) 1833 return -ENODEV; 1834 1835 /* found the node */ 1836 *next = prop->next; 1837 prop->next = np->deadprops; 1838 np->deadprops = prop; 1839 1840 return 0; 1841 } 1842 1843 /** 1844 * of_remove_property - Remove a property from a node. 1845 * @np: Caller's Device Node 1846 * @prop: Property to remove 1847 * 1848 * Note that we don't actually remove it, since we have given out 1849 * who-knows-how-many pointers to the data using get-property. 1850 * Instead we just move the property to the "dead properties" 1851 * list, so it won't be found any more. 1852 */ 1853 int of_remove_property(struct device_node *np, struct property *prop) 1854 { 1855 unsigned long flags; 1856 int rc; 1857 1858 if (!prop) 1859 return -ENODEV; 1860 1861 mutex_lock(&of_mutex); 1862 1863 raw_spin_lock_irqsave(&devtree_lock, flags); 1864 rc = __of_remove_property(np, prop); 1865 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1866 1867 if (!rc) 1868 __of_remove_property_sysfs(np, prop); 1869 1870 mutex_unlock(&of_mutex); 1871 1872 if (!rc) 1873 of_property_notify(OF_RECONFIG_REMOVE_PROPERTY, np, prop, NULL); 1874 1875 return rc; 1876 } 1877 EXPORT_SYMBOL_GPL(of_remove_property); 1878 1879 int __of_update_property(struct device_node *np, struct property *newprop, 1880 struct property **oldpropp) 1881 { 1882 struct property **next, *oldprop; 1883 1884 for (next = &np->properties; *next; next = &(*next)->next) { 1885 if (of_prop_cmp((*next)->name, newprop->name) == 0) 1886 break; 1887 } 1888 *oldpropp = oldprop = *next; 1889 1890 if (oldprop) { 1891 /* replace the node */ 1892 newprop->next = oldprop->next; 1893 *next = newprop; 1894 oldprop->next = np->deadprops; 1895 np->deadprops = oldprop; 1896 } else { 1897 /* new node */ 1898 newprop->next = NULL; 1899 *next = newprop; 1900 } 1901 1902 return 0; 1903 } 1904 1905 /* 1906 * of_update_property - Update a property in a node, if the property does 1907 * not exist, add it. 1908 * 1909 * Note that we don't actually remove it, since we have given out 1910 * who-knows-how-many pointers to the data using get-property. 1911 * Instead we just move the property to the "dead properties" list, 1912 * and add the new property to the property list 1913 */ 1914 int of_update_property(struct device_node *np, struct property *newprop) 1915 { 1916 struct property *oldprop; 1917 unsigned long flags; 1918 int rc; 1919 1920 if (!newprop->name) 1921 return -EINVAL; 1922 1923 mutex_lock(&of_mutex); 1924 1925 raw_spin_lock_irqsave(&devtree_lock, flags); 1926 rc = __of_update_property(np, newprop, &oldprop); 1927 raw_spin_unlock_irqrestore(&devtree_lock, flags); 1928 1929 if (!rc) 1930 __of_update_property_sysfs(np, newprop, oldprop); 1931 1932 mutex_unlock(&of_mutex); 1933 1934 if (!rc) 1935 of_property_notify(OF_RECONFIG_UPDATE_PROPERTY, np, newprop, oldprop); 1936 1937 return rc; 1938 } 1939 1940 static void of_alias_add(struct alias_prop *ap, struct device_node *np, 1941 int id, const char *stem, int stem_len) 1942 { 1943 ap->np = np; 1944 ap->id = id; 1945 strncpy(ap->stem, stem, stem_len); 1946 ap->stem[stem_len] = 0; 1947 list_add_tail(&ap->link, &aliases_lookup); 1948 pr_debug("adding DT alias:%s: stem=%s id=%i node=%pOF\n", 1949 ap->alias, ap->stem, ap->id, np); 1950 } 1951 1952 /** 1953 * of_alias_scan - Scan all properties of the 'aliases' node 1954 * @dt_alloc: An allocator that provides a virtual address to memory 1955 * for storing the resulting tree 1956 * 1957 * The function scans all the properties of the 'aliases' node and populates 1958 * the global lookup table with the properties. It returns the 1959 * number of alias properties found, or an error code in case of failure. 1960 */ 1961 void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)) 1962 { 1963 struct property *pp; 1964 1965 of_aliases = of_find_node_by_path("/aliases"); 1966 of_chosen = of_find_node_by_path("/chosen"); 1967 if (of_chosen == NULL) 1968 of_chosen = of_find_node_by_path("/chosen@0"); 1969 1970 if (of_chosen) { 1971 /* linux,stdout-path and /aliases/stdout are for legacy compatibility */ 1972 const char *name = NULL; 1973 1974 if (of_property_read_string(of_chosen, "stdout-path", &name)) 1975 of_property_read_string(of_chosen, "linux,stdout-path", 1976 &name); 1977 if (IS_ENABLED(CONFIG_PPC) && !name) 1978 of_property_read_string(of_aliases, "stdout", &name); 1979 if (name) 1980 of_stdout = of_find_node_opts_by_path(name, &of_stdout_options); 1981 } 1982 1983 if (!of_aliases) 1984 return; 1985 1986 for_each_property_of_node(of_aliases, pp) { 1987 const char *start = pp->name; 1988 const char *end = start + strlen(start); 1989 struct device_node *np; 1990 struct alias_prop *ap; 1991 int id, len; 1992 1993 /* Skip those we do not want to proceed */ 1994 if (!strcmp(pp->name, "name") || 1995 !strcmp(pp->name, "phandle") || 1996 !strcmp(pp->name, "linux,phandle")) 1997 continue; 1998 1999 np = of_find_node_by_path(pp->value); 2000 if (!np) 2001 continue; 2002 2003 /* walk the alias backwards to extract the id and work out 2004 * the 'stem' string */ 2005 while (isdigit(*(end-1)) && end > start) 2006 end--; 2007 len = end - start; 2008 2009 if (kstrtoint(end, 10, &id) < 0) 2010 continue; 2011 2012 /* Allocate an alias_prop with enough space for the stem */ 2013 ap = dt_alloc(sizeof(*ap) + len + 1, __alignof__(*ap)); 2014 if (!ap) 2015 continue; 2016 memset(ap, 0, sizeof(*ap) + len + 1); 2017 ap->alias = start; 2018 of_alias_add(ap, np, id, start, len); 2019 } 2020 } 2021 2022 /** 2023 * of_alias_get_id - Get alias id for the given device_node 2024 * @np: Pointer to the given device_node 2025 * @stem: Alias stem of the given device_node 2026 * 2027 * The function travels the lookup table to get the alias id for the given 2028 * device_node and alias stem. 2029 * 2030 * Return: The alias id if found. 2031 */ 2032 int of_alias_get_id(struct device_node *np, const char *stem) 2033 { 2034 struct alias_prop *app; 2035 int id = -ENODEV; 2036 2037 mutex_lock(&of_mutex); 2038 list_for_each_entry(app, &aliases_lookup, link) { 2039 if (strcmp(app->stem, stem) != 0) 2040 continue; 2041 2042 if (np == app->np) { 2043 id = app->id; 2044 break; 2045 } 2046 } 2047 mutex_unlock(&of_mutex); 2048 2049 return id; 2050 } 2051 EXPORT_SYMBOL_GPL(of_alias_get_id); 2052 2053 /** 2054 * of_alias_get_alias_list - Get alias list for the given device driver 2055 * @matches: Array of OF device match structures to search in 2056 * @stem: Alias stem of the given device_node 2057 * @bitmap: Bitmap field pointer 2058 * @nbits: Maximum number of alias IDs which can be recorded in bitmap 2059 * 2060 * The function travels the lookup table to record alias ids for the given 2061 * device match structures and alias stem. 2062 * 2063 * Return: 0 or -ENOSYS when !CONFIG_OF or 2064 * -EOVERFLOW if alias ID is greater then allocated nbits 2065 */ 2066 int of_alias_get_alias_list(const struct of_device_id *matches, 2067 const char *stem, unsigned long *bitmap, 2068 unsigned int nbits) 2069 { 2070 struct alias_prop *app; 2071 int ret = 0; 2072 2073 /* Zero bitmap field to make sure that all the time it is clean */ 2074 bitmap_zero(bitmap, nbits); 2075 2076 mutex_lock(&of_mutex); 2077 pr_debug("%s: Looking for stem: %s\n", __func__, stem); 2078 list_for_each_entry(app, &aliases_lookup, link) { 2079 pr_debug("%s: stem: %s, id: %d\n", 2080 __func__, app->stem, app->id); 2081 2082 if (strcmp(app->stem, stem) != 0) { 2083 pr_debug("%s: stem comparison didn't pass %s\n", 2084 __func__, app->stem); 2085 continue; 2086 } 2087 2088 if (of_match_node(matches, app->np)) { 2089 pr_debug("%s: Allocated ID %d\n", __func__, app->id); 2090 2091 if (app->id >= nbits) { 2092 pr_warn("%s: ID %d >= than bitmap field %d\n", 2093 __func__, app->id, nbits); 2094 ret = -EOVERFLOW; 2095 } else { 2096 set_bit(app->id, bitmap); 2097 } 2098 } 2099 } 2100 mutex_unlock(&of_mutex); 2101 2102 return ret; 2103 } 2104 EXPORT_SYMBOL_GPL(of_alias_get_alias_list); 2105 2106 /** 2107 * of_alias_get_highest_id - Get highest alias id for the given stem 2108 * @stem: Alias stem to be examined 2109 * 2110 * The function travels the lookup table to get the highest alias id for the 2111 * given alias stem. It returns the alias id if found. 2112 */ 2113 int of_alias_get_highest_id(const char *stem) 2114 { 2115 struct alias_prop *app; 2116 int id = -ENODEV; 2117 2118 mutex_lock(&of_mutex); 2119 list_for_each_entry(app, &aliases_lookup, link) { 2120 if (strcmp(app->stem, stem) != 0) 2121 continue; 2122 2123 if (app->id > id) 2124 id = app->id; 2125 } 2126 mutex_unlock(&of_mutex); 2127 2128 return id; 2129 } 2130 EXPORT_SYMBOL_GPL(of_alias_get_highest_id); 2131 2132 /** 2133 * of_console_check() - Test and setup console for DT setup 2134 * @dn: Pointer to device node 2135 * @name: Name to use for preferred console without index. ex. "ttyS" 2136 * @index: Index to use for preferred console. 2137 * 2138 * Check if the given device node matches the stdout-path property in the 2139 * /chosen node. If it does then register it as the preferred console. 2140 * 2141 * Return: TRUE if console successfully setup. Otherwise return FALSE. 2142 */ 2143 bool of_console_check(struct device_node *dn, char *name, int index) 2144 { 2145 if (!dn || dn != of_stdout || console_set_on_cmdline) 2146 return false; 2147 2148 /* 2149 * XXX: cast `options' to char pointer to suppress complication 2150 * warnings: printk, UART and console drivers expect char pointer. 2151 */ 2152 return !add_preferred_console(name, index, (char *)of_stdout_options); 2153 } 2154 EXPORT_SYMBOL_GPL(of_console_check); 2155 2156 /** 2157 * of_find_next_cache_node - Find a node's subsidiary cache 2158 * @np: node of type "cpu" or "cache" 2159 * 2160 * Return: A node pointer with refcount incremented, use 2161 * of_node_put() on it when done. Caller should hold a reference 2162 * to np. 2163 */ 2164 struct device_node *of_find_next_cache_node(const struct device_node *np) 2165 { 2166 struct device_node *child, *cache_node; 2167 2168 cache_node = of_parse_phandle(np, "l2-cache", 0); 2169 if (!cache_node) 2170 cache_node = of_parse_phandle(np, "next-level-cache", 0); 2171 2172 if (cache_node) 2173 return cache_node; 2174 2175 /* OF on pmac has nodes instead of properties named "l2-cache" 2176 * beneath CPU nodes. 2177 */ 2178 if (IS_ENABLED(CONFIG_PPC_PMAC) && of_node_is_type(np, "cpu")) 2179 for_each_child_of_node(np, child) 2180 if (of_node_is_type(child, "cache")) 2181 return child; 2182 2183 return NULL; 2184 } 2185 2186 /** 2187 * of_find_last_cache_level - Find the level at which the last cache is 2188 * present for the given logical cpu 2189 * 2190 * @cpu: cpu number(logical index) for which the last cache level is needed 2191 * 2192 * Return: The the level at which the last cache is present. It is exactly 2193 * same as the total number of cache levels for the given logical cpu. 2194 */ 2195 int of_find_last_cache_level(unsigned int cpu) 2196 { 2197 u32 cache_level = 0; 2198 struct device_node *prev = NULL, *np = of_cpu_device_node_get(cpu); 2199 2200 while (np) { 2201 prev = np; 2202 of_node_put(np); 2203 np = of_find_next_cache_node(np); 2204 } 2205 2206 of_property_read_u32(prev, "cache-level", &cache_level); 2207 2208 return cache_level; 2209 } 2210 2211 /** 2212 * of_map_id - Translate an ID through a downstream mapping. 2213 * @np: root complex device node. 2214 * @id: device ID to map. 2215 * @map_name: property name of the map to use. 2216 * @map_mask_name: optional property name of the mask to use. 2217 * @target: optional pointer to a target device node. 2218 * @id_out: optional pointer to receive the translated ID. 2219 * 2220 * Given a device ID, look up the appropriate implementation-defined 2221 * platform ID and/or the target device which receives transactions on that 2222 * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or 2223 * @id_out may be NULL if only the other is required. If @target points to 2224 * a non-NULL device node pointer, only entries targeting that node will be 2225 * matched; if it points to a NULL value, it will receive the device node of 2226 * the first matching target phandle, with a reference held. 2227 * 2228 * Return: 0 on success or a standard error code on failure. 2229 */ 2230 int of_map_id(struct device_node *np, u32 id, 2231 const char *map_name, const char *map_mask_name, 2232 struct device_node **target, u32 *id_out) 2233 { 2234 u32 map_mask, masked_id; 2235 int map_len; 2236 const __be32 *map = NULL; 2237 2238 if (!np || !map_name || (!target && !id_out)) 2239 return -EINVAL; 2240 2241 map = of_get_property(np, map_name, &map_len); 2242 if (!map) { 2243 if (target) 2244 return -ENODEV; 2245 /* Otherwise, no map implies no translation */ 2246 *id_out = id; 2247 return 0; 2248 } 2249 2250 if (!map_len || map_len % (4 * sizeof(*map))) { 2251 pr_err("%pOF: Error: Bad %s length: %d\n", np, 2252 map_name, map_len); 2253 return -EINVAL; 2254 } 2255 2256 /* The default is to select all bits. */ 2257 map_mask = 0xffffffff; 2258 2259 /* 2260 * Can be overridden by "{iommu,msi}-map-mask" property. 2261 * If of_property_read_u32() fails, the default is used. 2262 */ 2263 if (map_mask_name) 2264 of_property_read_u32(np, map_mask_name, &map_mask); 2265 2266 masked_id = map_mask & id; 2267 for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) { 2268 struct device_node *phandle_node; 2269 u32 id_base = be32_to_cpup(map + 0); 2270 u32 phandle = be32_to_cpup(map + 1); 2271 u32 out_base = be32_to_cpup(map + 2); 2272 u32 id_len = be32_to_cpup(map + 3); 2273 2274 if (id_base & ~map_mask) { 2275 pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores id-base (0x%x)\n", 2276 np, map_name, map_name, 2277 map_mask, id_base); 2278 return -EFAULT; 2279 } 2280 2281 if (masked_id < id_base || masked_id >= id_base + id_len) 2282 continue; 2283 2284 phandle_node = of_find_node_by_phandle(phandle); 2285 if (!phandle_node) 2286 return -ENODEV; 2287 2288 if (target) { 2289 if (*target) 2290 of_node_put(phandle_node); 2291 else 2292 *target = phandle_node; 2293 2294 if (*target != phandle_node) 2295 continue; 2296 } 2297 2298 if (id_out) 2299 *id_out = masked_id - id_base + out_base; 2300 2301 pr_debug("%pOF: %s, using mask %08x, id-base: %08x, out-base: %08x, length: %08x, id: %08x -> %08x\n", 2302 np, map_name, map_mask, id_base, out_base, 2303 id_len, id, masked_id - id_base + out_base); 2304 return 0; 2305 } 2306 2307 pr_info("%pOF: no %s translation for id 0x%x on %pOF\n", np, map_name, 2308 id, target && *target ? *target : NULL); 2309 2310 /* Bypasses translation */ 2311 if (id_out) 2312 *id_out = id; 2313 return 0; 2314 } 2315 EXPORT_SYMBOL_GPL(of_map_id); 2316