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