xref: /openbmc/linux/drivers/of/base.c (revision 3b64b188)
1 /*
2  * Procedures for creating, accessing and interpreting the device tree.
3  *
4  * Paul Mackerras	August 1996.
5  * Copyright (C) 1996-2005 Paul Mackerras.
6  *
7  *  Adapted for 64bit PowerPC by Dave Engebretsen and Peter Bergner.
8  *    {engebret|bergner}@us.ibm.com
9  *
10  *  Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net
11  *
12  *  Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell and
13  *  Grant Likely.
14  *
15  *      This program is free software; you can redistribute it and/or
16  *      modify it under the terms of the GNU General Public License
17  *      as published by the Free Software Foundation; either version
18  *      2 of the License, or (at your option) any later version.
19  */
20 #include <linux/ctype.h>
21 #include <linux/module.h>
22 #include <linux/of.h>
23 #include <linux/spinlock.h>
24 #include <linux/slab.h>
25 #include <linux/proc_fs.h>
26 
27 /**
28  * struct alias_prop - Alias property in 'aliases' node
29  * @link:	List node to link the structure in aliases_lookup list
30  * @alias:	Alias property name
31  * @np:		Pointer to device_node that the alias stands for
32  * @id:		Index value from end of alias name
33  * @stem:	Alias string without the index
34  *
35  * The structure represents one alias property of 'aliases' node as
36  * an entry in aliases_lookup list.
37  */
38 struct alias_prop {
39 	struct list_head link;
40 	const char *alias;
41 	struct device_node *np;
42 	int id;
43 	char stem[0];
44 };
45 
46 static LIST_HEAD(aliases_lookup);
47 
48 struct device_node *allnodes;
49 struct device_node *of_chosen;
50 struct device_node *of_aliases;
51 
52 static DEFINE_MUTEX(of_aliases_mutex);
53 
54 /* use when traversing tree through the allnext, child, sibling,
55  * or parent members of struct device_node.
56  */
57 DEFINE_RWLOCK(devtree_lock);
58 
59 int of_n_addr_cells(struct device_node *np)
60 {
61 	const __be32 *ip;
62 
63 	do {
64 		if (np->parent)
65 			np = np->parent;
66 		ip = of_get_property(np, "#address-cells", NULL);
67 		if (ip)
68 			return be32_to_cpup(ip);
69 	} while (np->parent);
70 	/* No #address-cells property for the root node */
71 	return OF_ROOT_NODE_ADDR_CELLS_DEFAULT;
72 }
73 EXPORT_SYMBOL(of_n_addr_cells);
74 
75 int of_n_size_cells(struct device_node *np)
76 {
77 	const __be32 *ip;
78 
79 	do {
80 		if (np->parent)
81 			np = np->parent;
82 		ip = of_get_property(np, "#size-cells", NULL);
83 		if (ip)
84 			return be32_to_cpup(ip);
85 	} while (np->parent);
86 	/* No #size-cells property for the root node */
87 	return OF_ROOT_NODE_SIZE_CELLS_DEFAULT;
88 }
89 EXPORT_SYMBOL(of_n_size_cells);
90 
91 #if defined(CONFIG_OF_DYNAMIC)
92 /**
93  *	of_node_get - Increment refcount of a node
94  *	@node:	Node to inc refcount, NULL is supported to
95  *		simplify writing of callers
96  *
97  *	Returns node.
98  */
99 struct device_node *of_node_get(struct device_node *node)
100 {
101 	if (node)
102 		kref_get(&node->kref);
103 	return node;
104 }
105 EXPORT_SYMBOL(of_node_get);
106 
107 static inline struct device_node *kref_to_device_node(struct kref *kref)
108 {
109 	return container_of(kref, struct device_node, kref);
110 }
111 
112 /**
113  *	of_node_release - release a dynamically allocated node
114  *	@kref:  kref element of the node to be released
115  *
116  *	In of_node_put() this function is passed to kref_put()
117  *	as the destructor.
118  */
119 static void of_node_release(struct kref *kref)
120 {
121 	struct device_node *node = kref_to_device_node(kref);
122 	struct property *prop = node->properties;
123 
124 	/* We should never be releasing nodes that haven't been detached. */
125 	if (!of_node_check_flag(node, OF_DETACHED)) {
126 		pr_err("ERROR: Bad of_node_put() on %s\n", node->full_name);
127 		dump_stack();
128 		kref_init(&node->kref);
129 		return;
130 	}
131 
132 	if (!of_node_check_flag(node, OF_DYNAMIC))
133 		return;
134 
135 	while (prop) {
136 		struct property *next = prop->next;
137 		kfree(prop->name);
138 		kfree(prop->value);
139 		kfree(prop);
140 		prop = next;
141 
142 		if (!prop) {
143 			prop = node->deadprops;
144 			node->deadprops = NULL;
145 		}
146 	}
147 	kfree(node->full_name);
148 	kfree(node->data);
149 	kfree(node);
150 }
151 
152 /**
153  *	of_node_put - Decrement refcount of a node
154  *	@node:	Node to dec refcount, NULL is supported to
155  *		simplify writing of callers
156  *
157  */
158 void of_node_put(struct device_node *node)
159 {
160 	if (node)
161 		kref_put(&node->kref, of_node_release);
162 }
163 EXPORT_SYMBOL(of_node_put);
164 #endif /* CONFIG_OF_DYNAMIC */
165 
166 struct property *of_find_property(const struct device_node *np,
167 				  const char *name,
168 				  int *lenp)
169 {
170 	struct property *pp;
171 
172 	if (!np)
173 		return NULL;
174 
175 	read_lock(&devtree_lock);
176 	for (pp = np->properties; pp; pp = pp->next) {
177 		if (of_prop_cmp(pp->name, name) == 0) {
178 			if (lenp)
179 				*lenp = pp->length;
180 			break;
181 		}
182 	}
183 	read_unlock(&devtree_lock);
184 
185 	return pp;
186 }
187 EXPORT_SYMBOL(of_find_property);
188 
189 /**
190  * of_find_all_nodes - Get next node in global list
191  * @prev:	Previous node or NULL to start iteration
192  *		of_node_put() will be called on it
193  *
194  * Returns a node pointer with refcount incremented, use
195  * of_node_put() on it when done.
196  */
197 struct device_node *of_find_all_nodes(struct device_node *prev)
198 {
199 	struct device_node *np;
200 
201 	read_lock(&devtree_lock);
202 	np = prev ? prev->allnext : allnodes;
203 	for (; np != NULL; np = np->allnext)
204 		if (of_node_get(np))
205 			break;
206 	of_node_put(prev);
207 	read_unlock(&devtree_lock);
208 	return np;
209 }
210 EXPORT_SYMBOL(of_find_all_nodes);
211 
212 /*
213  * Find a property with a given name for a given node
214  * and return the value.
215  */
216 const void *of_get_property(const struct device_node *np, const char *name,
217 			 int *lenp)
218 {
219 	struct property *pp = of_find_property(np, name, lenp);
220 
221 	return pp ? pp->value : NULL;
222 }
223 EXPORT_SYMBOL(of_get_property);
224 
225 /** Checks if the given "compat" string matches one of the strings in
226  * the device's "compatible" property
227  */
228 int of_device_is_compatible(const struct device_node *device,
229 		const char *compat)
230 {
231 	const char* cp;
232 	int cplen, l;
233 
234 	cp = of_get_property(device, "compatible", &cplen);
235 	if (cp == NULL)
236 		return 0;
237 	while (cplen > 0) {
238 		if (of_compat_cmp(cp, compat, strlen(compat)) == 0)
239 			return 1;
240 		l = strlen(cp) + 1;
241 		cp += l;
242 		cplen -= l;
243 	}
244 
245 	return 0;
246 }
247 EXPORT_SYMBOL(of_device_is_compatible);
248 
249 /**
250  * of_machine_is_compatible - Test root of device tree for a given compatible value
251  * @compat: compatible string to look for in root node's compatible property.
252  *
253  * Returns true if the root node has the given value in its
254  * compatible property.
255  */
256 int of_machine_is_compatible(const char *compat)
257 {
258 	struct device_node *root;
259 	int rc = 0;
260 
261 	root = of_find_node_by_path("/");
262 	if (root) {
263 		rc = of_device_is_compatible(root, compat);
264 		of_node_put(root);
265 	}
266 	return rc;
267 }
268 EXPORT_SYMBOL(of_machine_is_compatible);
269 
270 /**
271  *  of_device_is_available - check if a device is available for use
272  *
273  *  @device: Node to check for availability
274  *
275  *  Returns 1 if the status property is absent or set to "okay" or "ok",
276  *  0 otherwise
277  */
278 int of_device_is_available(const struct device_node *device)
279 {
280 	const char *status;
281 	int statlen;
282 
283 	status = of_get_property(device, "status", &statlen);
284 	if (status == NULL)
285 		return 1;
286 
287 	if (statlen > 0) {
288 		if (!strcmp(status, "okay") || !strcmp(status, "ok"))
289 			return 1;
290 	}
291 
292 	return 0;
293 }
294 EXPORT_SYMBOL(of_device_is_available);
295 
296 /**
297  *	of_get_parent - Get a node's parent if any
298  *	@node:	Node to get parent
299  *
300  *	Returns a node pointer with refcount incremented, use
301  *	of_node_put() on it when done.
302  */
303 struct device_node *of_get_parent(const struct device_node *node)
304 {
305 	struct device_node *np;
306 
307 	if (!node)
308 		return NULL;
309 
310 	read_lock(&devtree_lock);
311 	np = of_node_get(node->parent);
312 	read_unlock(&devtree_lock);
313 	return np;
314 }
315 EXPORT_SYMBOL(of_get_parent);
316 
317 /**
318  *	of_get_next_parent - Iterate to a node's parent
319  *	@node:	Node to get parent of
320  *
321  * 	This is like of_get_parent() except that it drops the
322  * 	refcount on the passed node, making it suitable for iterating
323  * 	through a node's parents.
324  *
325  *	Returns a node pointer with refcount incremented, use
326  *	of_node_put() on it when done.
327  */
328 struct device_node *of_get_next_parent(struct device_node *node)
329 {
330 	struct device_node *parent;
331 
332 	if (!node)
333 		return NULL;
334 
335 	read_lock(&devtree_lock);
336 	parent = of_node_get(node->parent);
337 	of_node_put(node);
338 	read_unlock(&devtree_lock);
339 	return parent;
340 }
341 
342 /**
343  *	of_get_next_child - Iterate a node childs
344  *	@node:	parent node
345  *	@prev:	previous child of the parent node, or NULL to get first
346  *
347  *	Returns a node pointer with refcount incremented, use
348  *	of_node_put() on it when done.
349  */
350 struct device_node *of_get_next_child(const struct device_node *node,
351 	struct device_node *prev)
352 {
353 	struct device_node *next;
354 
355 	read_lock(&devtree_lock);
356 	next = prev ? prev->sibling : node->child;
357 	for (; next; next = next->sibling)
358 		if (of_node_get(next))
359 			break;
360 	of_node_put(prev);
361 	read_unlock(&devtree_lock);
362 	return next;
363 }
364 EXPORT_SYMBOL(of_get_next_child);
365 
366 /**
367  *	of_get_next_available_child - Find the next available child node
368  *	@node:	parent node
369  *	@prev:	previous child of the parent node, or NULL to get first
370  *
371  *      This function is like of_get_next_child(), except that it
372  *      automatically skips any disabled nodes (i.e. status = "disabled").
373  */
374 struct device_node *of_get_next_available_child(const struct device_node *node,
375 	struct device_node *prev)
376 {
377 	struct device_node *next;
378 
379 	read_lock(&devtree_lock);
380 	next = prev ? prev->sibling : node->child;
381 	for (; next; next = next->sibling) {
382 		if (!of_device_is_available(next))
383 			continue;
384 		if (of_node_get(next))
385 			break;
386 	}
387 	of_node_put(prev);
388 	read_unlock(&devtree_lock);
389 	return next;
390 }
391 EXPORT_SYMBOL(of_get_next_available_child);
392 
393 /**
394  *	of_find_node_by_path - Find a node matching a full OF path
395  *	@path:	The full path to match
396  *
397  *	Returns a node pointer with refcount incremented, use
398  *	of_node_put() on it when done.
399  */
400 struct device_node *of_find_node_by_path(const char *path)
401 {
402 	struct device_node *np = allnodes;
403 
404 	read_lock(&devtree_lock);
405 	for (; np; np = np->allnext) {
406 		if (np->full_name && (of_node_cmp(np->full_name, path) == 0)
407 		    && of_node_get(np))
408 			break;
409 	}
410 	read_unlock(&devtree_lock);
411 	return np;
412 }
413 EXPORT_SYMBOL(of_find_node_by_path);
414 
415 /**
416  *	of_find_node_by_name - Find a node by its "name" property
417  *	@from:	The node to start searching from or NULL, the node
418  *		you pass will not be searched, only the next one
419  *		will; typically, you pass what the previous call
420  *		returned. of_node_put() will be called on it
421  *	@name:	The name string to match against
422  *
423  *	Returns a node pointer with refcount incremented, use
424  *	of_node_put() on it when done.
425  */
426 struct device_node *of_find_node_by_name(struct device_node *from,
427 	const char *name)
428 {
429 	struct device_node *np;
430 
431 	read_lock(&devtree_lock);
432 	np = from ? from->allnext : allnodes;
433 	for (; np; np = np->allnext)
434 		if (np->name && (of_node_cmp(np->name, name) == 0)
435 		    && of_node_get(np))
436 			break;
437 	of_node_put(from);
438 	read_unlock(&devtree_lock);
439 	return np;
440 }
441 EXPORT_SYMBOL(of_find_node_by_name);
442 
443 /**
444  *	of_find_node_by_type - Find a node by its "device_type" property
445  *	@from:	The node to start searching from, or NULL to start searching
446  *		the entire device tree. The node you pass will not be
447  *		searched, only the next one will; typically, you pass
448  *		what the previous call returned. of_node_put() will be
449  *		called on from for you.
450  *	@type:	The type string to match against
451  *
452  *	Returns a node pointer with refcount incremented, use
453  *	of_node_put() on it when done.
454  */
455 struct device_node *of_find_node_by_type(struct device_node *from,
456 	const char *type)
457 {
458 	struct device_node *np;
459 
460 	read_lock(&devtree_lock);
461 	np = from ? from->allnext : allnodes;
462 	for (; np; np = np->allnext)
463 		if (np->type && (of_node_cmp(np->type, type) == 0)
464 		    && of_node_get(np))
465 			break;
466 	of_node_put(from);
467 	read_unlock(&devtree_lock);
468 	return np;
469 }
470 EXPORT_SYMBOL(of_find_node_by_type);
471 
472 /**
473  *	of_find_compatible_node - Find a node based on type and one of the
474  *                                tokens in its "compatible" property
475  *	@from:		The node to start searching from or NULL, the node
476  *			you pass will not be searched, only the next one
477  *			will; typically, you pass what the previous call
478  *			returned. of_node_put() will be called on it
479  *	@type:		The type string to match "device_type" or NULL to ignore
480  *	@compatible:	The string to match to one of the tokens in the device
481  *			"compatible" list.
482  *
483  *	Returns a node pointer with refcount incremented, use
484  *	of_node_put() on it when done.
485  */
486 struct device_node *of_find_compatible_node(struct device_node *from,
487 	const char *type, const char *compatible)
488 {
489 	struct device_node *np;
490 
491 	read_lock(&devtree_lock);
492 	np = from ? from->allnext : allnodes;
493 	for (; np; np = np->allnext) {
494 		if (type
495 		    && !(np->type && (of_node_cmp(np->type, type) == 0)))
496 			continue;
497 		if (of_device_is_compatible(np, compatible) && of_node_get(np))
498 			break;
499 	}
500 	of_node_put(from);
501 	read_unlock(&devtree_lock);
502 	return np;
503 }
504 EXPORT_SYMBOL(of_find_compatible_node);
505 
506 /**
507  *	of_find_node_with_property - Find a node which has a property with
508  *                                   the given name.
509  *	@from:		The node to start searching from or NULL, the node
510  *			you pass will not be searched, only the next one
511  *			will; typically, you pass what the previous call
512  *			returned. of_node_put() will be called on it
513  *	@prop_name:	The name of the property to look for.
514  *
515  *	Returns a node pointer with refcount incremented, use
516  *	of_node_put() on it when done.
517  */
518 struct device_node *of_find_node_with_property(struct device_node *from,
519 	const char *prop_name)
520 {
521 	struct device_node *np;
522 	struct property *pp;
523 
524 	read_lock(&devtree_lock);
525 	np = from ? from->allnext : allnodes;
526 	for (; np; np = np->allnext) {
527 		for (pp = np->properties; pp; pp = pp->next) {
528 			if (of_prop_cmp(pp->name, prop_name) == 0) {
529 				of_node_get(np);
530 				goto out;
531 			}
532 		}
533 	}
534 out:
535 	of_node_put(from);
536 	read_unlock(&devtree_lock);
537 	return np;
538 }
539 EXPORT_SYMBOL(of_find_node_with_property);
540 
541 /**
542  * of_match_node - Tell if an device_node has a matching of_match structure
543  *	@matches:	array of of device match structures to search in
544  *	@node:		the of device structure to match against
545  *
546  *	Low level utility function used by device matching.
547  */
548 const struct of_device_id *of_match_node(const struct of_device_id *matches,
549 					 const struct device_node *node)
550 {
551 	if (!matches)
552 		return NULL;
553 
554 	while (matches->name[0] || matches->type[0] || matches->compatible[0]) {
555 		int match = 1;
556 		if (matches->name[0])
557 			match &= node->name
558 				&& !strcmp(matches->name, node->name);
559 		if (matches->type[0])
560 			match &= node->type
561 				&& !strcmp(matches->type, node->type);
562 		if (matches->compatible[0])
563 			match &= of_device_is_compatible(node,
564 						matches->compatible);
565 		if (match)
566 			return matches;
567 		matches++;
568 	}
569 	return NULL;
570 }
571 EXPORT_SYMBOL(of_match_node);
572 
573 /**
574  *	of_find_matching_node - Find a node based on an of_device_id match
575  *				table.
576  *	@from:		The node to start searching from or NULL, the node
577  *			you pass will not be searched, only the next one
578  *			will; typically, you pass what the previous call
579  *			returned. of_node_put() will be called on it
580  *	@matches:	array of of device match structures to search in
581  *
582  *	Returns a node pointer with refcount incremented, use
583  *	of_node_put() on it when done.
584  */
585 struct device_node *of_find_matching_node(struct device_node *from,
586 					  const struct of_device_id *matches)
587 {
588 	struct device_node *np;
589 
590 	read_lock(&devtree_lock);
591 	np = from ? from->allnext : allnodes;
592 	for (; np; np = np->allnext) {
593 		if (of_match_node(matches, np) && of_node_get(np))
594 			break;
595 	}
596 	of_node_put(from);
597 	read_unlock(&devtree_lock);
598 	return np;
599 }
600 EXPORT_SYMBOL(of_find_matching_node);
601 
602 /**
603  * of_modalias_node - Lookup appropriate modalias for a device node
604  * @node:	pointer to a device tree node
605  * @modalias:	Pointer to buffer that modalias value will be copied into
606  * @len:	Length of modalias value
607  *
608  * Based on the value of the compatible property, this routine will attempt
609  * to choose an appropriate modalias value for a particular device tree node.
610  * It does this by stripping the manufacturer prefix (as delimited by a ',')
611  * from the first entry in the compatible list property.
612  *
613  * This routine returns 0 on success, <0 on failure.
614  */
615 int of_modalias_node(struct device_node *node, char *modalias, int len)
616 {
617 	const char *compatible, *p;
618 	int cplen;
619 
620 	compatible = of_get_property(node, "compatible", &cplen);
621 	if (!compatible || strlen(compatible) > cplen)
622 		return -ENODEV;
623 	p = strchr(compatible, ',');
624 	strlcpy(modalias, p ? p + 1 : compatible, len);
625 	return 0;
626 }
627 EXPORT_SYMBOL_GPL(of_modalias_node);
628 
629 /**
630  * of_find_node_by_phandle - Find a node given a phandle
631  * @handle:	phandle of the node to find
632  *
633  * Returns a node pointer with refcount incremented, use
634  * of_node_put() on it when done.
635  */
636 struct device_node *of_find_node_by_phandle(phandle handle)
637 {
638 	struct device_node *np;
639 
640 	read_lock(&devtree_lock);
641 	for (np = allnodes; np; np = np->allnext)
642 		if (np->phandle == handle)
643 			break;
644 	of_node_get(np);
645 	read_unlock(&devtree_lock);
646 	return np;
647 }
648 EXPORT_SYMBOL(of_find_node_by_phandle);
649 
650 /**
651  * of_property_read_u32_array - Find and read an array of 32 bit integers
652  * from a property.
653  *
654  * @np:		device node from which the property value is to be read.
655  * @propname:	name of the property to be searched.
656  * @out_value:	pointer to return value, modified only if return value is 0.
657  *
658  * Search for a property in a device node and read 32-bit value(s) from
659  * it. Returns 0 on success, -EINVAL if the property does not exist,
660  * -ENODATA if property does not have a value, and -EOVERFLOW if the
661  * property data isn't large enough.
662  *
663  * The out_value is modified only if a valid u32 value can be decoded.
664  */
665 int of_property_read_u32_array(const struct device_node *np,
666 			       const char *propname, u32 *out_values,
667 			       size_t sz)
668 {
669 	struct property *prop = of_find_property(np, propname, NULL);
670 	const __be32 *val;
671 
672 	if (!prop)
673 		return -EINVAL;
674 	if (!prop->value)
675 		return -ENODATA;
676 	if ((sz * sizeof(*out_values)) > prop->length)
677 		return -EOVERFLOW;
678 
679 	val = prop->value;
680 	while (sz--)
681 		*out_values++ = be32_to_cpup(val++);
682 	return 0;
683 }
684 EXPORT_SYMBOL_GPL(of_property_read_u32_array);
685 
686 /**
687  * of_property_read_u64 - Find and read a 64 bit integer from a property
688  * @np:		device node from which the property value is to be read.
689  * @propname:	name of the property to be searched.
690  * @out_value:	pointer to return value, modified only if return value is 0.
691  *
692  * Search for a property in a device node and read a 64-bit value from
693  * it. Returns 0 on success, -EINVAL if the property does not exist,
694  * -ENODATA if property does not have a value, and -EOVERFLOW if the
695  * property data isn't large enough.
696  *
697  * The out_value is modified only if a valid u64 value can be decoded.
698  */
699 int of_property_read_u64(const struct device_node *np, const char *propname,
700 			 u64 *out_value)
701 {
702 	struct property *prop = of_find_property(np, propname, NULL);
703 
704 	if (!prop)
705 		return -EINVAL;
706 	if (!prop->value)
707 		return -ENODATA;
708 	if (sizeof(*out_value) > prop->length)
709 		return -EOVERFLOW;
710 	*out_value = of_read_number(prop->value, 2);
711 	return 0;
712 }
713 EXPORT_SYMBOL_GPL(of_property_read_u64);
714 
715 /**
716  * of_property_read_string - Find and read a string from a property
717  * @np:		device node from which the property value is to be read.
718  * @propname:	name of the property to be searched.
719  * @out_string:	pointer to null terminated return string, modified only if
720  *		return value is 0.
721  *
722  * Search for a property in a device tree node and retrieve a null
723  * terminated string value (pointer to data, not a copy). Returns 0 on
724  * success, -EINVAL if the property does not exist, -ENODATA if property
725  * does not have a value, and -EILSEQ if the string is not null-terminated
726  * within the length of the property data.
727  *
728  * The out_string pointer is modified only if a valid string can be decoded.
729  */
730 int of_property_read_string(struct device_node *np, const char *propname,
731 				const char **out_string)
732 {
733 	struct property *prop = of_find_property(np, propname, NULL);
734 	if (!prop)
735 		return -EINVAL;
736 	if (!prop->value)
737 		return -ENODATA;
738 	if (strnlen(prop->value, prop->length) >= prop->length)
739 		return -EILSEQ;
740 	*out_string = prop->value;
741 	return 0;
742 }
743 EXPORT_SYMBOL_GPL(of_property_read_string);
744 
745 /**
746  * of_property_read_string_index - Find and read a string from a multiple
747  * strings property.
748  * @np:		device node from which the property value is to be read.
749  * @propname:	name of the property to be searched.
750  * @index:	index of the string in the list of strings
751  * @out_string:	pointer to null terminated return string, modified only if
752  *		return value is 0.
753  *
754  * Search for a property in a device tree node and retrieve a null
755  * terminated string value (pointer to data, not a copy) in the list of strings
756  * contained in that property.
757  * Returns 0 on success, -EINVAL if the property does not exist, -ENODATA if
758  * property does not have a value, and -EILSEQ if the string is not
759  * null-terminated within the length of the property data.
760  *
761  * The out_string pointer is modified only if a valid string can be decoded.
762  */
763 int of_property_read_string_index(struct device_node *np, const char *propname,
764 				  int index, const char **output)
765 {
766 	struct property *prop = of_find_property(np, propname, NULL);
767 	int i = 0;
768 	size_t l = 0, total = 0;
769 	const char *p;
770 
771 	if (!prop)
772 		return -EINVAL;
773 	if (!prop->value)
774 		return -ENODATA;
775 	if (strnlen(prop->value, prop->length) >= prop->length)
776 		return -EILSEQ;
777 
778 	p = prop->value;
779 
780 	for (i = 0; total < prop->length; total += l, p += l) {
781 		l = strlen(p) + 1;
782 		if (i++ == index) {
783 			*output = p;
784 			return 0;
785 		}
786 	}
787 	return -ENODATA;
788 }
789 EXPORT_SYMBOL_GPL(of_property_read_string_index);
790 
791 /**
792  * of_property_match_string() - Find string in a list and return index
793  * @np: pointer to node containing string list property
794  * @propname: string list property name
795  * @string: pointer to string to search for in string list
796  *
797  * This function searches a string list property and returns the index
798  * of a specific string value.
799  */
800 int of_property_match_string(struct device_node *np, const char *propname,
801 			     const char *string)
802 {
803 	struct property *prop = of_find_property(np, propname, NULL);
804 	size_t l;
805 	int i;
806 	const char *p, *end;
807 
808 	if (!prop)
809 		return -EINVAL;
810 	if (!prop->value)
811 		return -ENODATA;
812 
813 	p = prop->value;
814 	end = p + prop->length;
815 
816 	for (i = 0; p < end; i++, p += l) {
817 		l = strlen(p) + 1;
818 		if (p + l > end)
819 			return -EILSEQ;
820 		pr_debug("comparing %s with %s\n", string, p);
821 		if (strcmp(string, p) == 0)
822 			return i; /* Found it; return index */
823 	}
824 	return -ENODATA;
825 }
826 EXPORT_SYMBOL_GPL(of_property_match_string);
827 
828 /**
829  * of_property_count_strings - Find and return the number of strings from a
830  * multiple strings property.
831  * @np:		device node from which the property value is to be read.
832  * @propname:	name of the property to be searched.
833  *
834  * Search for a property in a device tree node and retrieve the number of null
835  * terminated string contain in it. Returns the number of strings on
836  * success, -EINVAL if the property does not exist, -ENODATA if property
837  * does not have a value, and -EILSEQ if the string is not null-terminated
838  * within the length of the property data.
839  */
840 int of_property_count_strings(struct device_node *np, const char *propname)
841 {
842 	struct property *prop = of_find_property(np, propname, NULL);
843 	int i = 0;
844 	size_t l = 0, total = 0;
845 	const char *p;
846 
847 	if (!prop)
848 		return -EINVAL;
849 	if (!prop->value)
850 		return -ENODATA;
851 	if (strnlen(prop->value, prop->length) >= prop->length)
852 		return -EILSEQ;
853 
854 	p = prop->value;
855 
856 	for (i = 0; total < prop->length; total += l, p += l, i++)
857 		l = strlen(p) + 1;
858 
859 	return i;
860 }
861 EXPORT_SYMBOL_GPL(of_property_count_strings);
862 
863 /**
864  * of_parse_phandle - Resolve a phandle property to a device_node pointer
865  * @np: Pointer to device node holding phandle property
866  * @phandle_name: Name of property holding a phandle value
867  * @index: For properties holding a table of phandles, this is the index into
868  *         the table
869  *
870  * Returns the device_node pointer with refcount incremented.  Use
871  * of_node_put() on it when done.
872  */
873 struct device_node *
874 of_parse_phandle(struct device_node *np, const char *phandle_name, int index)
875 {
876 	const __be32 *phandle;
877 	int size;
878 
879 	phandle = of_get_property(np, phandle_name, &size);
880 	if ((!phandle) || (size < sizeof(*phandle) * (index + 1)))
881 		return NULL;
882 
883 	return of_find_node_by_phandle(be32_to_cpup(phandle + index));
884 }
885 EXPORT_SYMBOL(of_parse_phandle);
886 
887 /**
888  * of_parse_phandle_with_args() - Find a node pointed by phandle in a list
889  * @np:		pointer to a device tree node containing a list
890  * @list_name:	property name that contains a list
891  * @cells_name:	property name that specifies phandles' arguments count
892  * @index:	index of a phandle to parse out
893  * @out_args:	optional pointer to output arguments structure (will be filled)
894  *
895  * This function is useful to parse lists of phandles and their arguments.
896  * Returns 0 on success and fills out_args, on error returns appropriate
897  * errno value.
898  *
899  * Caller is responsible to call of_node_put() on the returned out_args->node
900  * pointer.
901  *
902  * Example:
903  *
904  * phandle1: node1 {
905  * 	#list-cells = <2>;
906  * }
907  *
908  * phandle2: node2 {
909  * 	#list-cells = <1>;
910  * }
911  *
912  * node3 {
913  * 	list = <&phandle1 1 2 &phandle2 3>;
914  * }
915  *
916  * To get a device_node of the `node2' node you may call this:
917  * of_parse_phandle_with_args(node3, "list", "#list-cells", 1, &args);
918  */
919 int of_parse_phandle_with_args(struct device_node *np, const char *list_name,
920 				const char *cells_name, int index,
921 				struct of_phandle_args *out_args)
922 {
923 	const __be32 *list, *list_end;
924 	int size, cur_index = 0;
925 	uint32_t count = 0;
926 	struct device_node *node = NULL;
927 	phandle phandle;
928 
929 	/* Retrieve the phandle list property */
930 	list = of_get_property(np, list_name, &size);
931 	if (!list)
932 		return -ENOENT;
933 	list_end = list + size / sizeof(*list);
934 
935 	/* Loop over the phandles until all the requested entry is found */
936 	while (list < list_end) {
937 		count = 0;
938 
939 		/*
940 		 * If phandle is 0, then it is an empty entry with no
941 		 * arguments.  Skip forward to the next entry.
942 		 */
943 		phandle = be32_to_cpup(list++);
944 		if (phandle) {
945 			/*
946 			 * Find the provider node and parse the #*-cells
947 			 * property to determine the argument length
948 			 */
949 			node = of_find_node_by_phandle(phandle);
950 			if (!node) {
951 				pr_err("%s: could not find phandle\n",
952 					 np->full_name);
953 				break;
954 			}
955 			if (of_property_read_u32(node, cells_name, &count)) {
956 				pr_err("%s: could not get %s for %s\n",
957 					 np->full_name, cells_name,
958 					 node->full_name);
959 				break;
960 			}
961 
962 			/*
963 			 * Make sure that the arguments actually fit in the
964 			 * remaining property data length
965 			 */
966 			if (list + count > list_end) {
967 				pr_err("%s: arguments longer than property\n",
968 					 np->full_name);
969 				break;
970 			}
971 		}
972 
973 		/*
974 		 * All of the error cases above bail out of the loop, so at
975 		 * this point, the parsing is successful. If the requested
976 		 * index matches, then fill the out_args structure and return,
977 		 * or return -ENOENT for an empty entry.
978 		 */
979 		if (cur_index == index) {
980 			if (!phandle)
981 				return -ENOENT;
982 
983 			if (out_args) {
984 				int i;
985 				if (WARN_ON(count > MAX_PHANDLE_ARGS))
986 					count = MAX_PHANDLE_ARGS;
987 				out_args->np = node;
988 				out_args->args_count = count;
989 				for (i = 0; i < count; i++)
990 					out_args->args[i] = be32_to_cpup(list++);
991 			}
992 			return 0;
993 		}
994 
995 		of_node_put(node);
996 		node = NULL;
997 		list += count;
998 		cur_index++;
999 	}
1000 
1001 	/* Loop exited without finding a valid entry; return an error */
1002 	if (node)
1003 		of_node_put(node);
1004 	return -EINVAL;
1005 }
1006 EXPORT_SYMBOL(of_parse_phandle_with_args);
1007 
1008 /**
1009  * prom_add_property - Add a property to a node
1010  */
1011 int prom_add_property(struct device_node *np, struct property *prop)
1012 {
1013 	struct property **next;
1014 	unsigned long flags;
1015 
1016 	prop->next = NULL;
1017 	write_lock_irqsave(&devtree_lock, flags);
1018 	next = &np->properties;
1019 	while (*next) {
1020 		if (strcmp(prop->name, (*next)->name) == 0) {
1021 			/* duplicate ! don't insert it */
1022 			write_unlock_irqrestore(&devtree_lock, flags);
1023 			return -1;
1024 		}
1025 		next = &(*next)->next;
1026 	}
1027 	*next = prop;
1028 	write_unlock_irqrestore(&devtree_lock, flags);
1029 
1030 #ifdef CONFIG_PROC_DEVICETREE
1031 	/* try to add to proc as well if it was initialized */
1032 	if (np->pde)
1033 		proc_device_tree_add_prop(np->pde, prop);
1034 #endif /* CONFIG_PROC_DEVICETREE */
1035 
1036 	return 0;
1037 }
1038 
1039 /**
1040  * prom_remove_property - Remove a property from a node.
1041  *
1042  * Note that we don't actually remove it, since we have given out
1043  * who-knows-how-many pointers to the data using get-property.
1044  * Instead we just move the property to the "dead properties"
1045  * list, so it won't be found any more.
1046  */
1047 int prom_remove_property(struct device_node *np, struct property *prop)
1048 {
1049 	struct property **next;
1050 	unsigned long flags;
1051 	int found = 0;
1052 
1053 	write_lock_irqsave(&devtree_lock, flags);
1054 	next = &np->properties;
1055 	while (*next) {
1056 		if (*next == prop) {
1057 			/* found the node */
1058 			*next = prop->next;
1059 			prop->next = np->deadprops;
1060 			np->deadprops = prop;
1061 			found = 1;
1062 			break;
1063 		}
1064 		next = &(*next)->next;
1065 	}
1066 	write_unlock_irqrestore(&devtree_lock, flags);
1067 
1068 	if (!found)
1069 		return -ENODEV;
1070 
1071 #ifdef CONFIG_PROC_DEVICETREE
1072 	/* try to remove the proc node as well */
1073 	if (np->pde)
1074 		proc_device_tree_remove_prop(np->pde, prop);
1075 #endif /* CONFIG_PROC_DEVICETREE */
1076 
1077 	return 0;
1078 }
1079 
1080 /*
1081  * prom_update_property - Update a property in a node, if the property does
1082  * not exist, add it.
1083  *
1084  * Note that we don't actually remove it, since we have given out
1085  * who-knows-how-many pointers to the data using get-property.
1086  * Instead we just move the property to the "dead properties" list,
1087  * and add the new property to the property list
1088  */
1089 int prom_update_property(struct device_node *np,
1090 			 struct property *newprop)
1091 {
1092 	struct property **next, *oldprop;
1093 	unsigned long flags;
1094 	int found = 0;
1095 
1096 	if (!newprop->name)
1097 		return -EINVAL;
1098 
1099 	oldprop = of_find_property(np, newprop->name, NULL);
1100 	if (!oldprop)
1101 		return prom_add_property(np, newprop);
1102 
1103 	write_lock_irqsave(&devtree_lock, flags);
1104 	next = &np->properties;
1105 	while (*next) {
1106 		if (*next == oldprop) {
1107 			/* found the node */
1108 			newprop->next = oldprop->next;
1109 			*next = newprop;
1110 			oldprop->next = np->deadprops;
1111 			np->deadprops = oldprop;
1112 			found = 1;
1113 			break;
1114 		}
1115 		next = &(*next)->next;
1116 	}
1117 	write_unlock_irqrestore(&devtree_lock, flags);
1118 
1119 	if (!found)
1120 		return -ENODEV;
1121 
1122 #ifdef CONFIG_PROC_DEVICETREE
1123 	/* try to add to proc as well if it was initialized */
1124 	if (np->pde)
1125 		proc_device_tree_update_prop(np->pde, newprop, oldprop);
1126 #endif /* CONFIG_PROC_DEVICETREE */
1127 
1128 	return 0;
1129 }
1130 
1131 #if defined(CONFIG_OF_DYNAMIC)
1132 /*
1133  * Support for dynamic device trees.
1134  *
1135  * On some platforms, the device tree can be manipulated at runtime.
1136  * The routines in this section support adding, removing and changing
1137  * device tree nodes.
1138  */
1139 
1140 /**
1141  * of_attach_node - Plug a device node into the tree and global list.
1142  */
1143 void of_attach_node(struct device_node *np)
1144 {
1145 	unsigned long flags;
1146 
1147 	write_lock_irqsave(&devtree_lock, flags);
1148 	np->sibling = np->parent->child;
1149 	np->allnext = allnodes;
1150 	np->parent->child = np;
1151 	allnodes = np;
1152 	write_unlock_irqrestore(&devtree_lock, flags);
1153 }
1154 
1155 /**
1156  * of_detach_node - "Unplug" a node from the device tree.
1157  *
1158  * The caller must hold a reference to the node.  The memory associated with
1159  * the node is not freed until its refcount goes to zero.
1160  */
1161 void of_detach_node(struct device_node *np)
1162 {
1163 	struct device_node *parent;
1164 	unsigned long flags;
1165 
1166 	write_lock_irqsave(&devtree_lock, flags);
1167 
1168 	parent = np->parent;
1169 	if (!parent)
1170 		goto out_unlock;
1171 
1172 	if (allnodes == np)
1173 		allnodes = np->allnext;
1174 	else {
1175 		struct device_node *prev;
1176 		for (prev = allnodes;
1177 		     prev->allnext != np;
1178 		     prev = prev->allnext)
1179 			;
1180 		prev->allnext = np->allnext;
1181 	}
1182 
1183 	if (parent->child == np)
1184 		parent->child = np->sibling;
1185 	else {
1186 		struct device_node *prevsib;
1187 		for (prevsib = np->parent->child;
1188 		     prevsib->sibling != np;
1189 		     prevsib = prevsib->sibling)
1190 			;
1191 		prevsib->sibling = np->sibling;
1192 	}
1193 
1194 	of_node_set_flag(np, OF_DETACHED);
1195 
1196 out_unlock:
1197 	write_unlock_irqrestore(&devtree_lock, flags);
1198 }
1199 #endif /* defined(CONFIG_OF_DYNAMIC) */
1200 
1201 static void of_alias_add(struct alias_prop *ap, struct device_node *np,
1202 			 int id, const char *stem, int stem_len)
1203 {
1204 	ap->np = np;
1205 	ap->id = id;
1206 	strncpy(ap->stem, stem, stem_len);
1207 	ap->stem[stem_len] = 0;
1208 	list_add_tail(&ap->link, &aliases_lookup);
1209 	pr_debug("adding DT alias:%s: stem=%s id=%i node=%s\n",
1210 		 ap->alias, ap->stem, ap->id, of_node_full_name(np));
1211 }
1212 
1213 /**
1214  * of_alias_scan - Scan all properties of 'aliases' node
1215  *
1216  * The function scans all the properties of 'aliases' node and populate
1217  * the the global lookup table with the properties.  It returns the
1218  * number of alias_prop found, or error code in error case.
1219  *
1220  * @dt_alloc:	An allocator that provides a virtual address to memory
1221  *		for the resulting tree
1222  */
1223 void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align))
1224 {
1225 	struct property *pp;
1226 
1227 	of_chosen = of_find_node_by_path("/chosen");
1228 	if (of_chosen == NULL)
1229 		of_chosen = of_find_node_by_path("/chosen@0");
1230 	of_aliases = of_find_node_by_path("/aliases");
1231 	if (!of_aliases)
1232 		return;
1233 
1234 	for_each_property_of_node(of_aliases, pp) {
1235 		const char *start = pp->name;
1236 		const char *end = start + strlen(start);
1237 		struct device_node *np;
1238 		struct alias_prop *ap;
1239 		int id, len;
1240 
1241 		/* Skip those we do not want to proceed */
1242 		if (!strcmp(pp->name, "name") ||
1243 		    !strcmp(pp->name, "phandle") ||
1244 		    !strcmp(pp->name, "linux,phandle"))
1245 			continue;
1246 
1247 		np = of_find_node_by_path(pp->value);
1248 		if (!np)
1249 			continue;
1250 
1251 		/* walk the alias backwards to extract the id and work out
1252 		 * the 'stem' string */
1253 		while (isdigit(*(end-1)) && end > start)
1254 			end--;
1255 		len = end - start;
1256 
1257 		if (kstrtoint(end, 10, &id) < 0)
1258 			continue;
1259 
1260 		/* Allocate an alias_prop with enough space for the stem */
1261 		ap = dt_alloc(sizeof(*ap) + len + 1, 4);
1262 		if (!ap)
1263 			continue;
1264 		ap->alias = start;
1265 		of_alias_add(ap, np, id, start, len);
1266 	}
1267 }
1268 
1269 /**
1270  * of_alias_get_id - Get alias id for the given device_node
1271  * @np:		Pointer to the given device_node
1272  * @stem:	Alias stem of the given device_node
1273  *
1274  * The function travels the lookup table to get alias id for the given
1275  * device_node and alias stem.  It returns the alias id if find it.
1276  */
1277 int of_alias_get_id(struct device_node *np, const char *stem)
1278 {
1279 	struct alias_prop *app;
1280 	int id = -ENODEV;
1281 
1282 	mutex_lock(&of_aliases_mutex);
1283 	list_for_each_entry(app, &aliases_lookup, link) {
1284 		if (strcmp(app->stem, stem) != 0)
1285 			continue;
1286 
1287 		if (np == app->np) {
1288 			id = app->id;
1289 			break;
1290 		}
1291 	}
1292 	mutex_unlock(&of_aliases_mutex);
1293 
1294 	return id;
1295 }
1296 EXPORT_SYMBOL_GPL(of_alias_get_id);
1297 
1298 const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur,
1299 			       u32 *pu)
1300 {
1301 	const void *curv = cur;
1302 
1303 	if (!prop)
1304 		return NULL;
1305 
1306 	if (!cur) {
1307 		curv = prop->value;
1308 		goto out_val;
1309 	}
1310 
1311 	curv += sizeof(*cur);
1312 	if (curv >= prop->value + prop->length)
1313 		return NULL;
1314 
1315 out_val:
1316 	*pu = be32_to_cpup(curv);
1317 	return curv;
1318 }
1319 EXPORT_SYMBOL_GPL(of_prop_next_u32);
1320 
1321 const char *of_prop_next_string(struct property *prop, const char *cur)
1322 {
1323 	const void *curv = cur;
1324 
1325 	if (!prop)
1326 		return NULL;
1327 
1328 	if (!cur)
1329 		return prop->value;
1330 
1331 	curv += strlen(cur) + 1;
1332 	if (curv >= prop->value + prop->length)
1333 		return NULL;
1334 
1335 	return curv;
1336 }
1337 EXPORT_SYMBOL_GPL(of_prop_next_string);
1338