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