of: add node name compare helper functions
[linux-block.git] / include / linux / of.h
CommitLineData
af6074fc 1/* SPDX-License-Identifier: GPL-2.0+ */
76c1ce78
SR
2#ifndef _LINUX_OF_H
3#define _LINUX_OF_H
4/*
5 * Definitions for talking to the Open Firmware PROM on
6 * Power Macintosh and other computers.
7 *
8 * Copyright (C) 1996-2005 Paul Mackerras.
9 *
10 * Updates for PPC64 by Peter Bergner & David Engebretsen, IBM Corp.
11 * Updates for SPARC64 by David S. Miller
12 * Derived from PowerPC and Sparc prom.h files by Stephen Rothwell, IBM Corp.
76c1ce78
SR
13 */
14#include <linux/types.h>
1977f032 15#include <linux/bitops.h>
e51130c0 16#include <linux/errno.h>
75b57ecf 17#include <linux/kobject.h>
283029d1 18#include <linux/mod_devicetable.h>
0d351c3e 19#include <linux/spinlock.h>
5ca4db61 20#include <linux/topology.h>
1cf3d8b3 21#include <linux/notifier.h>
b31384fa 22#include <linux/property.h>
7518b589 23#include <linux/list.h>
76c1ce78 24
2e89e685 25#include <asm/byteorder.h>
d0a99402 26#include <asm/errno.h>
2e89e685 27
731581e6
GL
28typedef u32 phandle;
29typedef u32 ihandle;
30
31struct property {
32 char *name;
33 int length;
34 void *value;
35 struct property *next;
16bba30e 36#if defined(CONFIG_OF_DYNAMIC) || defined(CONFIG_SPARC)
731581e6 37 unsigned long _flags;
16bba30e 38#endif
36689ecd 39#if defined(CONFIG_OF_PROMTREE)
731581e6 40 unsigned int unique_id;
36689ecd 41#endif
b56b5528 42#if defined(CONFIG_OF_KOBJ)
75b57ecf 43 struct bin_attribute attr;
b56b5528 44#endif
731581e6
GL
45};
46
6f192492
GL
47#if defined(CONFIG_SPARC)
48struct of_irq_controller;
49#endif
50
51struct device_node {
52 const char *name;
53 const char *type;
6016a363 54 phandle phandle;
c22618a1 55 const char *full_name;
8a0662d9 56 struct fwnode_handle fwnode;
6f192492
GL
57
58 struct property *properties;
59 struct property *deadprops; /* removed properties */
60 struct device_node *parent;
61 struct device_node *child;
62 struct device_node *sibling;
b56b5528 63#if defined(CONFIG_OF_KOBJ)
75b57ecf 64 struct kobject kobj;
b56b5528 65#endif
6f192492
GL
66 unsigned long _flags;
67 void *data;
68#if defined(CONFIG_SPARC)
c22618a1 69 const char *path_component_name;
6f192492
GL
70 unsigned int unique_id;
71 struct of_irq_controller *irq_trans;
72#endif
73};
74
b66548e2 75#define MAX_PHANDLE_ARGS 16
15c9a0ac
GL
76struct of_phandle_args {
77 struct device_node *np;
78 int args_count;
79 uint32_t args[MAX_PHANDLE_ARGS];
80};
81
74e1fbb1
JR
82struct of_phandle_iterator {
83 /* Common iterator information */
84 const char *cells_name;
85 int cell_count;
86 const struct device_node *parent;
87
88 /* List size information */
89 const __be32 *list_end;
90 const __be32 *phandle_end;
91
92 /* Current position state */
93 const __be32 *cur;
94 uint32_t cur_count;
95 phandle phandle;
96 struct device_node *node;
97};
98
f5242e5a
GL
99struct of_reconfig_data {
100 struct device_node *dn;
101 struct property *prop;
102 struct property *old_prop;
103};
104
0829f6d1
PA
105/* initialize a node */
106extern struct kobj_type of_node_ktype;
3708184a 107extern const struct fwnode_operations of_fwnode_ops;
0829f6d1
PA
108static inline void of_node_init(struct device_node *node)
109{
b56b5528 110#if defined(CONFIG_OF_KOBJ)
0829f6d1 111 kobject_init(&node->kobj, &of_node_ktype);
b56b5528 112#endif
3708184a 113 node->fwnode.ops = &of_fwnode_ops;
0829f6d1
PA
114}
115
b56b5528 116#if defined(CONFIG_OF_KOBJ)
0c3c234b 117#define of_node_kobj(n) (&(n)->kobj)
b56b5528
RH
118#else
119#define of_node_kobj(n) NULL
120#endif
0829f6d1 121
0f22dd39
GL
122#ifdef CONFIG_OF_DYNAMIC
123extern struct device_node *of_node_get(struct device_node *node);
124extern void of_node_put(struct device_node *node);
125#else /* CONFIG_OF_DYNAMIC */
3ecdd051
RH
126/* Dummy ref counting routines - to be implemented later */
127static inline struct device_node *of_node_get(struct device_node *node)
128{
129 return node;
130}
0f22dd39
GL
131static inline void of_node_put(struct device_node *node) { }
132#endif /* !CONFIG_OF_DYNAMIC */
3ecdd051 133
41f88009 134/* Pointer for first entry in chain of all nodes. */
5063e25a 135extern struct device_node *of_root;
fc0bdae4 136extern struct device_node *of_chosen;
611cad72 137extern struct device_node *of_aliases;
a752ee56 138extern struct device_node *of_stdout;
d6d3c4e6 139extern raw_spinlock_t devtree_lock;
41f88009 140
391b459d
PA
141/* flag descriptions (need to be visible even when !CONFIG_OF) */
142#define OF_DYNAMIC 1 /* node and properties were allocated via kmalloc */
143#define OF_DETACHED 2 /* node has been detached from the device tree */
144#define OF_POPULATED 3 /* device already created for the node */
145#define OF_POPULATED_BUS 4 /* of_platform_populate recursed to children of this node */
146
b1d06b60
GR
147#define OF_BAD_ADDR ((u64)-1)
148
6d09dc6b 149#ifdef CONFIG_OF
194ec936
SH
150void of_core_init(void);
151
d20dc149 152static inline bool is_of_node(const struct fwnode_handle *fwnode)
8a0662d9 153{
db3e50f3 154 return !IS_ERR_OR_NULL(fwnode) && fwnode->ops == &of_fwnode_ops;
8a0662d9
RW
155}
156
d20dc149
SA
157#define to_of_node(__fwnode) \
158 ({ \
159 typeof(__fwnode) __to_of_node_fwnode = (__fwnode); \
160 \
161 is_of_node(__to_of_node_fwnode) ? \
162 container_of(__to_of_node_fwnode, \
163 struct device_node, fwnode) : \
164 NULL; \
165 })
8a0662d9 166
debd3a3b
SA
167#define of_fwnode_handle(node) \
168 ({ \
169 typeof(node) __of_fwnode_handle_node = (node); \
170 \
171 __of_fwnode_handle_node ? \
172 &__of_fwnode_handle_node->fwnode : NULL; \
173 })
67831837 174
3bcbaf6e
SAS
175static inline bool of_have_populated_dt(void)
176{
5063e25a 177 return of_root != NULL;
3bcbaf6e
SAS
178}
179
035ebefc
AS
180static inline bool of_node_is_root(const struct device_node *node)
181{
182 return node && (node->parent == NULL);
183}
184
50436312
GL
185static inline int of_node_check_flag(struct device_node *n, unsigned long flag)
186{
187 return test_bit(flag, &n->_flags);
188}
189
c6e126de
PM
190static inline int of_node_test_and_set_flag(struct device_node *n,
191 unsigned long flag)
192{
193 return test_and_set_bit(flag, &n->_flags);
194}
195
50436312
GL
196static inline void of_node_set_flag(struct device_node *n, unsigned long flag)
197{
198 set_bit(flag, &n->_flags);
199}
200
588453c6
PA
201static inline void of_node_clear_flag(struct device_node *n, unsigned long flag)
202{
203 clear_bit(flag, &n->_flags);
204}
205
16bba30e 206#if defined(CONFIG_OF_DYNAMIC) || defined(CONFIG_SPARC)
588453c6
PA
207static inline int of_property_check_flag(struct property *p, unsigned long flag)
208{
209 return test_bit(flag, &p->_flags);
210}
211
212static inline void of_property_set_flag(struct property *p, unsigned long flag)
213{
214 set_bit(flag, &p->_flags);
215}
216
217static inline void of_property_clear_flag(struct property *p, unsigned long flag)
218{
219 clear_bit(flag, &p->_flags);
220}
16bba30e 221#endif
588453c6 222
5063e25a 223extern struct device_node *__of_find_all_nodes(struct device_node *prev);
e91edcf5
GL
224extern struct device_node *of_find_all_nodes(struct device_node *prev);
225
b6caf2ad 226/*
3d6b8828 227 * OF address retrieval & translation
b6caf2ad
GL
228 */
229
230/* Helper to read a big number; size is in cells (not bytes) */
2e89e685 231static inline u64 of_read_number(const __be32 *cell, int size)
b6caf2ad
GL
232{
233 u64 r = 0;
234 while (size--)
2e89e685 235 r = (r << 32) | be32_to_cpu(*(cell++));
b6caf2ad
GL
236 return r;
237}
238
239/* Like of_read_number, but we want an unsigned long result */
2e89e685 240static inline unsigned long of_read_ulong(const __be32 *cell, int size)
b6caf2ad 241{
2be09cb9
GL
242 /* toss away upper bits if unsigned long is smaller than u64 */
243 return of_read_number(cell, size);
b6caf2ad 244}
b6caf2ad 245
b5b4bb3f 246#if defined(CONFIG_SPARC)
76c1ce78 247#include <asm/prom.h>
b5b4bb3f 248#endif
76c1ce78 249
7c7b60cb
GL
250/* Default #address and #size cells. Allow arch asm/prom.h to override */
251#if !defined(OF_ROOT_NODE_ADDR_CELLS_DEFAULT)
252#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 1
253#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1
254#endif
255
61e955db
GL
256#define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags)
257#define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags)
258
f42b0e18
RH
259extern bool of_node_name_eq(const struct device_node *np, const char *name);
260extern bool of_node_name_prefix(const struct device_node *np, const char *prefix);
261
c0a05bf0 262static inline const char *of_node_full_name(const struct device_node *np)
74a7f084
GL
263{
264 return np ? np->full_name : "<no-node>";
265}
266
5063e25a
GL
267#define for_each_of_allnodes_from(from, dn) \
268 for (dn = __of_find_all_nodes(from); dn; dn = __of_find_all_nodes(dn))
269#define for_each_of_allnodes(dn) for_each_of_allnodes_from(NULL, dn)
76c1ce78
SR
270extern struct device_node *of_find_node_by_name(struct device_node *from,
271 const char *name);
76c1ce78
SR
272extern struct device_node *of_find_node_by_type(struct device_node *from,
273 const char *type);
76c1ce78
SR
274extern struct device_node *of_find_compatible_node(struct device_node *from,
275 const char *type, const char *compat);
50c8af4c
SW
276extern struct device_node *of_find_matching_node_and_match(
277 struct device_node *from,
278 const struct of_device_id *matches,
279 const struct of_device_id **match);
662372e4 280
75c28c09
LL
281extern struct device_node *of_find_node_opts_by_path(const char *path,
282 const char **opts);
283static inline struct device_node *of_find_node_by_path(const char *path)
284{
285 return of_find_node_opts_by_path(path, NULL);
286}
287
76c1ce78
SR
288extern struct device_node *of_find_node_by_phandle(phandle handle);
289extern struct device_node *of_get_parent(const struct device_node *node);
f4eb0107 290extern struct device_node *of_get_next_parent(struct device_node *node);
76c1ce78
SR
291extern struct device_node *of_get_next_child(const struct device_node *node,
292 struct device_node *prev);
3296193d
TT
293extern struct device_node *of_get_next_available_child(
294 const struct device_node *node, struct device_node *prev);
295
36156f92
JH
296extern struct device_node *of_get_compatible_child(const struct device_node *parent,
297 const char *compatible);
9c19761a
SK
298extern struct device_node *of_get_child_by_name(const struct device_node *node,
299 const char *name);
954e04b9 300
a3e31b45
SK
301/* cache lookup */
302extern struct device_node *of_find_next_cache_node(const struct device_node *);
5fa23530 303extern int of_find_last_cache_level(unsigned int cpu);
1e291b14
ME
304extern struct device_node *of_find_node_with_property(
305 struct device_node *from, const char *prop_name);
1e291b14 306
76c1ce78
SR
307extern struct property *of_find_property(const struct device_node *np,
308 const char *name,
309 int *lenp);
ad54a0cf
HS
310extern int of_property_count_elems_of_size(const struct device_node *np,
311 const char *propname, int elem_size);
3daf3726
TP
312extern int of_property_read_u32_index(const struct device_node *np,
313 const char *propname,
314 u32 index, u32 *out_value);
2475a2b6
AP
315extern int of_property_read_u64_index(const struct device_node *np,
316 const char *propname,
317 u32 index, u64 *out_value);
a67e9472
RF
318extern int of_property_read_variable_u8_array(const struct device_node *np,
319 const char *propname, u8 *out_values,
320 size_t sz_min, size_t sz_max);
321extern int of_property_read_variable_u16_array(const struct device_node *np,
322 const char *propname, u16 *out_values,
323 size_t sz_min, size_t sz_max);
324extern int of_property_read_variable_u32_array(const struct device_node *np,
325 const char *propname,
326 u32 *out_values,
327 size_t sz_min,
328 size_t sz_max);
4cd7f7a3
JI
329extern int of_property_read_u64(const struct device_node *np,
330 const char *propname, u64 *out_value);
a67e9472
RF
331extern int of_property_read_variable_u64_array(const struct device_node *np,
332 const char *propname,
333 u64 *out_values,
334 size_t sz_min,
335 size_t sz_max);
0e373639 336
fe99c707 337extern int of_property_read_string(const struct device_node *np,
aac285c6
JI
338 const char *propname,
339 const char **out_string);
fe99c707 340extern int of_property_match_string(const struct device_node *np,
7aff0fe3
GL
341 const char *propname,
342 const char *string);
fe99c707 343extern int of_property_read_string_helper(const struct device_node *np,
a87fa1d8
GL
344 const char *propname,
345 const char **out_strs, size_t sz, int index);
76c1ce78
SR
346extern int of_device_is_compatible(const struct device_node *device,
347 const char *);
b9c13fe3
BH
348extern int of_device_compatible_match(struct device_node *device,
349 const char *const *compat);
53a4ab96 350extern bool of_device_is_available(const struct device_node *device);
37786c7f 351extern bool of_device_is_big_endian(const struct device_node *device);
76c1ce78
SR
352extern const void *of_get_property(const struct device_node *node,
353 const char *name,
354 int *lenp);
183912d3 355extern struct device_node *of_get_cpu_node(int cpu, unsigned int *thread);
8af0da93
DA
356#define for_each_property_of_node(dn, pp) \
357 for (pp = dn->properties; pp != NULL; pp = pp->next)
611cad72 358
76c1ce78
SR
359extern int of_n_addr_cells(struct device_node *np);
360extern int of_n_size_cells(struct device_node *np);
283029d1
GL
361extern const struct of_device_id *of_match_node(
362 const struct of_device_id *matches, const struct device_node *node);
3f07af49 363extern int of_modalias_node(struct device_node *node, char *modalias, int len);
624cfca5 364extern void of_print_phandle_args(const char *msg, const struct of_phandle_args *args);
b8fbdc42 365extern struct device_node *of_parse_phandle(const struct device_node *np,
739649c5
GL
366 const char *phandle_name,
367 int index);
93c667ca 368extern int of_parse_phandle_with_args(const struct device_node *np,
64b60e09 369 const char *list_name, const char *cells_name, int index,
15c9a0ac 370 struct of_phandle_args *out_args);
bd6f2fd5
SB
371extern int of_parse_phandle_with_args_map(const struct device_node *np,
372 const char *list_name, const char *stem_name, int index,
373 struct of_phandle_args *out_args);
035fd948
SW
374extern int of_parse_phandle_with_fixed_args(const struct device_node *np,
375 const char *list_name, int cells_count, int index,
376 struct of_phandle_args *out_args);
bd69f73f
GL
377extern int of_count_phandle_with_args(const struct device_node *np,
378 const char *list_name, const char *cells_name);
76c1ce78 379
74e1fbb1
JR
380/* phandle iterator functions */
381extern int of_phandle_iterator_init(struct of_phandle_iterator *it,
382 const struct device_node *np,
383 const char *list_name,
384 const char *cells_name,
385 int cell_count);
386
cd209b41 387extern int of_phandle_iterator_next(struct of_phandle_iterator *it);
abdaa77b
JR
388extern int of_phandle_iterator_args(struct of_phandle_iterator *it,
389 uint32_t *args,
390 int size);
cd209b41 391
611cad72
SG
392extern void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align));
393extern int of_alias_get_id(struct device_node *np, const char *stem);
351d224f 394extern int of_alias_get_highest_id(const char *stem);
611cad72 395
21b082ec
GL
396extern int of_machine_is_compatible(const char *compat);
397
79d1c712
NF
398extern int of_add_property(struct device_node *np, struct property *prop);
399extern int of_remove_property(struct device_node *np, struct property *prop);
400extern int of_update_property(struct device_node *np, struct property *newprop);
21b082ec 401
fcdeb7fe 402/* For updating the device tree at runtime */
1cf3d8b3
NF
403#define OF_RECONFIG_ATTACH_NODE 0x0001
404#define OF_RECONFIG_DETACH_NODE 0x0002
405#define OF_RECONFIG_ADD_PROPERTY 0x0003
406#define OF_RECONFIG_REMOVE_PROPERTY 0x0004
407#define OF_RECONFIG_UPDATE_PROPERTY 0x0005
408
1cf3d8b3
NF
409extern int of_attach_node(struct device_node *);
410extern int of_detach_node(struct device_node *);
fcdeb7fe 411
3a1e362e 412#define of_match_ptr(_ptr) (_ptr)
c541adc6 413
a67e9472
RF
414/**
415 * of_property_read_u8_array - Find and read an array of u8 from a property.
416 *
417 * @np: device node from which the property value is to be read.
418 * @propname: name of the property to be searched.
419 * @out_values: pointer to return value, modified only if return value is 0.
420 * @sz: number of array elements to read
421 *
422 * Search for a property in a device node and read 8-bit value(s) from
423 * it. Returns 0 on success, -EINVAL if the property does not exist,
424 * -ENODATA if property does not have a value, and -EOVERFLOW if the
425 * property data isn't large enough.
426 *
427 * dts entry of array should be like:
428 * property = /bits/ 8 <0x50 0x60 0x70>;
429 *
430 * The out_values is modified only if a valid u8 value can be decoded.
431 */
432static inline int of_property_read_u8_array(const struct device_node *np,
433 const char *propname,
434 u8 *out_values, size_t sz)
435{
436 int ret = of_property_read_variable_u8_array(np, propname, out_values,
437 sz, 0);
438 if (ret >= 0)
439 return 0;
440 else
441 return ret;
442}
443
444/**
445 * of_property_read_u16_array - Find and read an array of u16 from a property.
446 *
447 * @np: device node from which the property value is to be read.
448 * @propname: name of the property to be searched.
449 * @out_values: pointer to return value, modified only if return value is 0.
450 * @sz: number of array elements to read
451 *
452 * Search for a property in a device node and read 16-bit value(s) from
453 * it. Returns 0 on success, -EINVAL if the property does not exist,
454 * -ENODATA if property does not have a value, and -EOVERFLOW if the
455 * property data isn't large enough.
456 *
457 * dts entry of array should be like:
458 * property = /bits/ 16 <0x5000 0x6000 0x7000>;
459 *
460 * The out_values is modified only if a valid u16 value can be decoded.
461 */
462static inline int of_property_read_u16_array(const struct device_node *np,
463 const char *propname,
464 u16 *out_values, size_t sz)
465{
466 int ret = of_property_read_variable_u16_array(np, propname, out_values,
467 sz, 0);
468 if (ret >= 0)
469 return 0;
470 else
471 return ret;
472}
473
474/**
475 * of_property_read_u32_array - Find and read an array of 32 bit integers
476 * from a property.
477 *
478 * @np: device node from which the property value is to be read.
479 * @propname: name of the property to be searched.
480 * @out_values: pointer to return value, modified only if return value is 0.
481 * @sz: number of array elements to read
482 *
483 * Search for a property in a device node and read 32-bit value(s) from
484 * it. Returns 0 on success, -EINVAL if the property does not exist,
485 * -ENODATA if property does not have a value, and -EOVERFLOW if the
486 * property data isn't large enough.
487 *
488 * The out_values is modified only if a valid u32 value can be decoded.
489 */
490static inline int of_property_read_u32_array(const struct device_node *np,
491 const char *propname,
492 u32 *out_values, size_t sz)
493{
494 int ret = of_property_read_variable_u32_array(np, propname, out_values,
495 sz, 0);
496 if (ret >= 0)
497 return 0;
498 else
499 return ret;
500}
501
502/**
503 * of_property_read_u64_array - Find and read an array of 64 bit integers
504 * from a property.
505 *
506 * @np: device node from which the property value is to be read.
507 * @propname: name of the property to be searched.
508 * @out_values: pointer to return value, modified only if return value is 0.
509 * @sz: number of array elements to read
510 *
511 * Search for a property in a device node and read 64-bit value(s) from
512 * it. Returns 0 on success, -EINVAL if the property does not exist,
513 * -ENODATA if property does not have a value, and -EOVERFLOW if the
514 * property data isn't large enough.
515 *
516 * The out_values is modified only if a valid u64 value can be decoded.
517 */
518static inline int of_property_read_u64_array(const struct device_node *np,
519 const char *propname,
520 u64 *out_values, size_t sz)
521{
522 int ret = of_property_read_variable_u64_array(np, propname, out_values,
523 sz, 0);
524 if (ret >= 0)
525 return 0;
526 else
527 return ret;
528}
529
c541adc6
SW
530/*
531 * struct property *prop;
532 * const __be32 *p;
533 * u32 u;
534 *
535 * of_property_for_each_u32(np, "propname", prop, p, u)
536 * printk("U32 value: %x\n", u);
537 */
538const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur,
539 u32 *pu);
c541adc6
SW
540/*
541 * struct property *prop;
542 * const char *s;
543 *
544 * of_property_for_each_string(np, "propname", prop, s)
545 * printk("String value: %s\n", s);
546 */
547const char *of_prop_next_string(struct property *prop, const char *cur);
c541adc6 548
3482f2c5 549bool of_console_check(struct device_node *dn, char *name, int index);
5c19e952 550
a0e71cd9
SP
551extern int of_cpu_node_to_id(struct device_node *np);
552
b98c0239 553#else /* CONFIG_OF */
3bcbaf6e 554
194ec936
SH
555static inline void of_core_init(void)
556{
557}
558
d20dc149 559static inline bool is_of_node(const struct fwnode_handle *fwnode)
8a0662d9
RW
560{
561 return false;
562}
563
d20dc149 564static inline struct device_node *to_of_node(const struct fwnode_handle *fwnode)
8a0662d9
RW
565{
566 return NULL;
567}
568
f42b0e18
RH
569static inline bool of_node_name_eq(const struct device_node *np, const char *name)
570{
571 return false;
572}
573
574static inline bool of_node_name_prefix(const struct device_node *np, const char *prefix)
575{
576 return false;
577}
578
4c358e15 579static inline const char* of_node_full_name(const struct device_node *np)
74a7f084
GL
580{
581 return "<no-node>";
582}
583
1cc44f43
PU
584static inline struct device_node *of_find_node_by_name(struct device_node *from,
585 const char *name)
586{
587 return NULL;
588}
589
662372e4
RH
590static inline struct device_node *of_find_node_by_type(struct device_node *from,
591 const char *type)
066ec1dd
AS
592{
593 return NULL;
594}
595
662372e4
RH
596static inline struct device_node *of_find_matching_node_and_match(
597 struct device_node *from,
598 const struct of_device_id *matches,
599 const struct of_device_id **match)
3bcbaf6e 600{
662372e4 601 return NULL;
3bcbaf6e
SAS
602}
603
20cd477c
AS
604static inline struct device_node *of_find_node_by_path(const char *path)
605{
606 return NULL;
607}
608
75c28c09
LL
609static inline struct device_node *of_find_node_opts_by_path(const char *path,
610 const char **opts)
611{
612 return NULL;
613}
614
ce16b9d2
SA
615static inline struct device_node *of_find_node_by_phandle(phandle handle)
616{
617 return NULL;
618}
619
662372e4 620static inline struct device_node *of_get_parent(const struct device_node *node)
00b2c76a 621{
662372e4 622 return NULL;
00b2c76a
DH
623}
624
662372e4
RH
625static inline struct device_node *of_get_next_child(
626 const struct device_node *node, struct device_node *prev)
627{
628 return NULL;
629}
aba3dfff 630
662372e4
RH
631static inline struct device_node *of_get_next_available_child(
632 const struct device_node *node, struct device_node *prev)
633{
634 return NULL;
635}
f6f0747e 636
662372e4
RH
637static inline struct device_node *of_find_node_with_property(
638 struct device_node *from, const char *prop_name)
25c040c9
OJ
639{
640 return NULL;
641}
642
67831837
SA
643#define of_fwnode_handle(node) NULL
644
662372e4 645static inline bool of_have_populated_dt(void)
183f1d0c 646{
662372e4 647 return false;
183f1d0c
DA
648}
649
36156f92
JH
650static inline struct device_node *of_get_compatible_child(const struct device_node *parent,
651 const char *compatible)
652{
653 return NULL;
654}
655
662372e4
RH
656static inline struct device_node *of_get_child_by_name(
657 const struct device_node *node,
658 const char *name)
954e04b9 659{
662372e4 660 return NULL;
954e04b9
BW
661}
662
36a0904e
RN
663static inline int of_device_is_compatible(const struct device_node *device,
664 const char *name)
665{
666 return 0;
667}
668
3bc16307
GU
669static inline int of_device_compatible_match(struct device_node *device,
670 const char *const *compat)
671{
672 return 0;
673}
674
53a4ab96 675static inline bool of_device_is_available(const struct device_node *device)
d7195696 676{
53a4ab96 677 return false;
d7195696
RH
678}
679
37786c7f
KC
680static inline bool of_device_is_big_endian(const struct device_node *device)
681{
682 return false;
d7195696
RH
683}
684
aba3dfff
SW
685static inline struct property *of_find_property(const struct device_node *np,
686 const char *name,
687 int *lenp)
688{
689 return NULL;
690}
691
2261cc62
SG
692static inline struct device_node *of_find_compatible_node(
693 struct device_node *from,
694 const char *type,
695 const char *compat)
696{
697 return NULL;
698}
699
ad54a0cf
HS
700static inline int of_property_count_elems_of_size(const struct device_node *np,
701 const char *propname, int elem_size)
702{
703 return -ENOSYS;
704}
705
be193249
VK
706static inline int of_property_read_u8_array(const struct device_node *np,
707 const char *propname, u8 *out_values, size_t sz)
708{
709 return -ENOSYS;
710}
711
712static inline int of_property_read_u16_array(const struct device_node *np,
713 const char *propname, u16 *out_values, size_t sz)
714{
715 return -ENOSYS;
716}
717
b98c0239 718static inline int of_property_read_u32_array(const struct device_node *np,
aac285c6
JI
719 const char *propname,
720 u32 *out_values, size_t sz)
b98c0239
SG
721{
722 return -ENOSYS;
723}
724
b31384fa
RW
725static inline int of_property_read_u64_array(const struct device_node *np,
726 const char *propname,
727 u64 *out_values, size_t sz)
728{
729 return -ENOSYS;
730}
731
96c623e5
AB
732static inline int of_property_read_u32_index(const struct device_node *np,
733 const char *propname, u32 index, u32 *out_value)
b98c0239
SG
734{
735 return -ENOSYS;
736}
737
96c623e5
AB
738static inline int of_property_read_u64_index(const struct device_node *np,
739 const char *propname, u32 index, u64 *out_value)
4fcd15a0
BC
740{
741 return -ENOSYS;
742}
743
89272b8c
SW
744static inline const void *of_get_property(const struct device_node *node,
745 const char *name,
746 int *lenp)
747{
748 return NULL;
749}
750
183912d3
SK
751static inline struct device_node *of_get_cpu_node(int cpu,
752 unsigned int *thread)
753{
754 return NULL;
755}
756
8a1ac5dc
AB
757static inline int of_n_addr_cells(struct device_node *np)
758{
759 return 0;
760
761}
762static inline int of_n_size_cells(struct device_node *np)
763{
764 return 0;
765}
766
96c623e5
AB
767static inline int of_property_read_variable_u8_array(const struct device_node *np,
768 const char *propname, u8 *out_values,
769 size_t sz_min, size_t sz_max)
770{
771 return -ENOSYS;
772}
773
774static inline int of_property_read_variable_u16_array(const struct device_node *np,
775 const char *propname, u16 *out_values,
776 size_t sz_min, size_t sz_max)
777{
778 return -ENOSYS;
779}
780
781static inline int of_property_read_variable_u32_array(const struct device_node *np,
782 const char *propname,
783 u32 *out_values,
784 size_t sz_min,
785 size_t sz_max)
786{
787 return -ENOSYS;
788}
789
4cd7f7a3
JI
790static inline int of_property_read_u64(const struct device_node *np,
791 const char *propname, u64 *out_value)
792{
793 return -ENOSYS;
794}
795
96c623e5
AB
796static inline int of_property_read_variable_u64_array(const struct device_node *np,
797 const char *propname,
798 u64 *out_values,
799 size_t sz_min,
800 size_t sz_max)
801{
802 return -ENOSYS;
803}
804
805static inline int of_property_read_string(const struct device_node *np,
806 const char *propname,
807 const char **out_string)
808{
809 return -ENOSYS;
810}
811
fe99c707 812static inline int of_property_match_string(const struct device_node *np,
bd3d5500
TR
813 const char *propname,
814 const char *string)
815{
816 return -ENOSYS;
817}
818
96c623e5
AB
819static inline int of_property_read_string_helper(const struct device_node *np,
820 const char *propname,
821 const char **out_strs, size_t sz, int index)
822{
823 return -ENOSYS;
824}
825
b8fbdc42 826static inline struct device_node *of_parse_phandle(const struct device_node *np,
36a0904e
RN
827 const char *phandle_name,
828 int index)
829{
830 return NULL;
831}
832
e93aeeae 833static inline int of_parse_phandle_with_args(const struct device_node *np,
e05e5070
TR
834 const char *list_name,
835 const char *cells_name,
836 int index,
837 struct of_phandle_args *out_args)
838{
839 return -ENOSYS;
840}
841
bd6f2fd5
SB
842static inline int of_parse_phandle_with_args_map(const struct device_node *np,
843 const char *list_name,
844 const char *stem_name,
845 int index,
846 struct of_phandle_args *out_args)
847{
848 return -ENOSYS;
849}
850
035fd948
SW
851static inline int of_parse_phandle_with_fixed_args(const struct device_node *np,
852 const char *list_name, int cells_count, int index,
853 struct of_phandle_args *out_args)
854{
855 return -ENOSYS;
856}
857
bd69f73f
GL
858static inline int of_count_phandle_with_args(struct device_node *np,
859 const char *list_name,
860 const char *cells_name)
861{
862 return -ENOSYS;
863}
864
74e1fbb1
JR
865static inline int of_phandle_iterator_init(struct of_phandle_iterator *it,
866 const struct device_node *np,
867 const char *list_name,
868 const char *cells_name,
869 int cell_count)
870{
871 return -ENOSYS;
872}
873
cd209b41
JR
874static inline int of_phandle_iterator_next(struct of_phandle_iterator *it)
875{
876 return -ENOSYS;
877}
878
abdaa77b
JR
879static inline int of_phandle_iterator_args(struct of_phandle_iterator *it,
880 uint32_t *args,
881 int size)
882{
883 return 0;
884}
885
ed5f886d
NF
886static inline int of_alias_get_id(struct device_node *np, const char *stem)
887{
888 return -ENOSYS;
889}
890
351d224f
WS
891static inline int of_alias_get_highest_id(const char *stem)
892{
893 return -ENOSYS;
894}
895
50e07f88
SW
896static inline int of_machine_is_compatible(const char *compat)
897{
898 return 0;
899}
900
3482f2c5 901static inline bool of_console_check(const struct device_node *dn, const char *name, int index)
5c19e952 902{
3482f2c5 903 return false;
5c19e952
SH
904}
905
2adfffa2
SAS
906static inline const __be32 *of_prop_next_u32(struct property *prop,
907 const __be32 *cur, u32 *pu)
908{
909 return NULL;
910}
911
912static inline const char *of_prop_next_string(struct property *prop,
913 const char *cur)
914{
915 return NULL;
916}
917
0384e8c6
PA
918static inline int of_node_check_flag(struct device_node *n, unsigned long flag)
919{
920 return 0;
921}
922
923static inline int of_node_test_and_set_flag(struct device_node *n,
924 unsigned long flag)
925{
926 return 0;
927}
928
929static inline void of_node_set_flag(struct device_node *n, unsigned long flag)
930{
931}
932
933static inline void of_node_clear_flag(struct device_node *n, unsigned long flag)
934{
935}
936
937static inline int of_property_check_flag(struct property *p, unsigned long flag)
938{
939 return 0;
940}
941
942static inline void of_property_set_flag(struct property *p, unsigned long flag)
943{
944}
945
946static inline void of_property_clear_flag(struct property *p, unsigned long flag)
947{
948}
949
a0e71cd9
SP
950static inline int of_cpu_node_to_id(struct device_node *np)
951{
952 return -ENODEV;
953}
954
3a1e362e 955#define of_match_ptr(_ptr) NULL
5762c205 956#define of_match_node(_matches, _node) NULL
9dfbf207 957#endif /* CONFIG_OF */
b98c0239 958
613e9721
AT
959/* Default string compare functions, Allow arch asm/prom.h to override */
960#if !defined(of_compat_cmp)
961#define of_compat_cmp(s1, s2, l) strcasecmp((s1), (s2))
962#define of_prop_cmp(s1, s2) strcmp((s1), (s2))
963#define of_node_cmp(s1, s2) strcasecmp((s1), (s2))
964#endif
965
0c3f061c
RH
966#if defined(CONFIG_OF) && defined(CONFIG_NUMA)
967extern int of_node_to_nid(struct device_node *np);
968#else
c8fff7bc
KK
969static inline int of_node_to_nid(struct device_node *device)
970{
971 return NUMA_NO_NODE;
972}
5ca4db61
PM
973#endif
974
298535c0
DD
975#ifdef CONFIG_OF_NUMA
976extern int of_numa_init(void);
977#else
978static inline int of_numa_init(void)
979{
980 return -ENOSYS;
981}
982#endif
983
662372e4
RH
984static inline struct device_node *of_find_matching_node(
985 struct device_node *from,
986 const struct of_device_id *matches)
987{
988 return of_find_matching_node_and_match(from, matches, NULL);
989}
990
ad54a0cf
HS
991/**
992 * of_property_count_u8_elems - Count the number of u8 elements in a property
993 *
994 * @np: device node from which the property value is to be read.
995 * @propname: name of the property to be searched.
996 *
997 * Search for a property in a device node and count the number of u8 elements
998 * in it. Returns number of elements on sucess, -EINVAL if the property does
999 * not exist or its length does not match a multiple of u8 and -ENODATA if the
1000 * property does not have a value.
1001 */
1002static inline int of_property_count_u8_elems(const struct device_node *np,
1003 const char *propname)
1004{
1005 return of_property_count_elems_of_size(np, propname, sizeof(u8));
1006}
1007
1008/**
1009 * of_property_count_u16_elems - Count the number of u16 elements in a property
1010 *
1011 * @np: device node from which the property value is to be read.
1012 * @propname: name of the property to be searched.
1013 *
1014 * Search for a property in a device node and count the number of u16 elements
1015 * in it. Returns number of elements on sucess, -EINVAL if the property does
1016 * not exist or its length does not match a multiple of u16 and -ENODATA if the
1017 * property does not have a value.
1018 */
1019static inline int of_property_count_u16_elems(const struct device_node *np,
1020 const char *propname)
1021{
1022 return of_property_count_elems_of_size(np, propname, sizeof(u16));
1023}
1024
1025/**
1026 * of_property_count_u32_elems - Count the number of u32 elements in a property
1027 *
1028 * @np: device node from which the property value is to be read.
1029 * @propname: name of the property to be searched.
1030 *
1031 * Search for a property in a device node and count the number of u32 elements
1032 * in it. Returns number of elements on sucess, -EINVAL if the property does
1033 * not exist or its length does not match a multiple of u32 and -ENODATA if the
1034 * property does not have a value.
1035 */
1036static inline int of_property_count_u32_elems(const struct device_node *np,
1037 const char *propname)
1038{
1039 return of_property_count_elems_of_size(np, propname, sizeof(u32));
1040}
1041
1042/**
1043 * of_property_count_u64_elems - Count the number of u64 elements in a property
1044 *
1045 * @np: device node from which the property value is to be read.
1046 * @propname: name of the property to be searched.
1047 *
1048 * Search for a property in a device node and count the number of u64 elements
1049 * in it. Returns number of elements on sucess, -EINVAL if the property does
1050 * not exist or its length does not match a multiple of u64 and -ENODATA if the
1051 * property does not have a value.
1052 */
1053static inline int of_property_count_u64_elems(const struct device_node *np,
1054 const char *propname)
1055{
1056 return of_property_count_elems_of_size(np, propname, sizeof(u64));
1057}
1058
a87fa1d8
GL
1059/**
1060 * of_property_read_string_array() - Read an array of strings from a multiple
1061 * strings property.
1062 * @np: device node from which the property value is to be read.
1063 * @propname: name of the property to be searched.
1064 * @out_strs: output array of string pointers.
1065 * @sz: number of array elements to read.
1066 *
1067 * Search for a property in a device tree node and retrieve a list of
1068 * terminated string values (pointer to data, not a copy) in that property.
1069 *
1070 * If @out_strs is NULL, the number of strings in the property is returned.
1071 */
fe99c707 1072static inline int of_property_read_string_array(const struct device_node *np,
a87fa1d8
GL
1073 const char *propname, const char **out_strs,
1074 size_t sz)
1075{
1076 return of_property_read_string_helper(np, propname, out_strs, sz, 0);
1077}
1078
1079/**
1080 * of_property_count_strings() - Find and return the number of strings from a
1081 * multiple strings property.
1082 * @np: device node from which the property value is to be read.
1083 * @propname: name of the property to be searched.
1084 *
1085 * Search for a property in a device tree node and retrieve the number of null
1086 * terminated string contain in it. Returns the number of strings on
1087 * success, -EINVAL if the property does not exist, -ENODATA if property
1088 * does not have a value, and -EILSEQ if the string is not null-terminated
1089 * within the length of the property data.
1090 */
fe99c707 1091static inline int of_property_count_strings(const struct device_node *np,
a87fa1d8
GL
1092 const char *propname)
1093{
1094 return of_property_read_string_helper(np, propname, NULL, 0, 0);
1095}
1096
1097/**
1098 * of_property_read_string_index() - Find and read a string from a multiple
1099 * strings property.
1100 * @np: device node from which the property value is to be read.
1101 * @propname: name of the property to be searched.
1102 * @index: index of the string in the list of strings
1103 * @out_string: pointer to null terminated return string, modified only if
1104 * return value is 0.
1105 *
1106 * Search for a property in a device tree node and retrieve a null
1107 * terminated string value (pointer to data, not a copy) in the list of strings
1108 * contained in that property.
1109 * Returns 0 on success, -EINVAL if the property does not exist, -ENODATA if
1110 * property does not have a value, and -EILSEQ if the string is not
1111 * null-terminated within the length of the property data.
1112 *
1113 * The out_string pointer is modified only if a valid string can be decoded.
1114 */
fe99c707 1115static inline int of_property_read_string_index(const struct device_node *np,
a87fa1d8
GL
1116 const char *propname,
1117 int index, const char **output)
1118{
1119 int rc = of_property_read_string_helper(np, propname, output, 1, index);
1120 return rc < 0 ? rc : 0;
1121}
1122
fa4d34cc
JCPV
1123/**
1124 * of_property_read_bool - Findfrom a property
1125 * @np: device node from which the property value is to be read.
1126 * @propname: name of the property to be searched.
1127 *
1128 * Search for a property in a device node.
31712c98 1129 * Returns true if the property exists false otherwise.
fa4d34cc
JCPV
1130 */
1131static inline bool of_property_read_bool(const struct device_node *np,
1132 const char *propname)
1133{
1134 struct property *prop = of_find_property(np, propname, NULL);
1135
1136 return prop ? true : false;
1137}
1138
be193249
VK
1139static inline int of_property_read_u8(const struct device_node *np,
1140 const char *propname,
1141 u8 *out_value)
1142{
1143 return of_property_read_u8_array(np, propname, out_value, 1);
1144}
1145
1146static inline int of_property_read_u16(const struct device_node *np,
1147 const char *propname,
1148 u16 *out_value)
1149{
1150 return of_property_read_u16_array(np, propname, out_value, 1);
1151}
1152
b98c0239 1153static inline int of_property_read_u32(const struct device_node *np,
aac285c6 1154 const char *propname,
b98c0239
SG
1155 u32 *out_value)
1156{
1157 return of_property_read_u32_array(np, propname, out_value, 1);
1158}
1159
e7a00e42
SR
1160static inline int of_property_read_s32(const struct device_node *np,
1161 const char *propname,
1162 s32 *out_value)
1163{
1164 return of_property_read_u32(np, propname, (u32*) out_value);
1165}
1166
f623ce95
JR
1167#define of_for_each_phandle(it, err, np, ln, cn, cc) \
1168 for (of_phandle_iterator_init((it), (np), (ln), (cn), (cc)), \
1169 err = of_phandle_iterator_next(it); \
1170 err == 0; \
1171 err = of_phandle_iterator_next(it))
1172
2adfffa2
SAS
1173#define of_property_for_each_u32(np, propname, prop, p, u) \
1174 for (prop = of_find_property(np, propname, NULL), \
1175 p = of_prop_next_u32(prop, NULL, &u); \
1176 p; \
1177 p = of_prop_next_u32(prop, p, &u))
1178
1179#define of_property_for_each_string(np, propname, prop, s) \
1180 for (prop = of_find_property(np, propname, NULL), \
1181 s = of_prop_next_string(prop, NULL); \
1182 s; \
1183 s = of_prop_next_string(prop, s))
1184
662372e4
RH
1185#define for_each_node_by_name(dn, name) \
1186 for (dn = of_find_node_by_name(NULL, name); dn; \
1187 dn = of_find_node_by_name(dn, name))
1188#define for_each_node_by_type(dn, type) \
1189 for (dn = of_find_node_by_type(NULL, type); dn; \
1190 dn = of_find_node_by_type(dn, type))
1191#define for_each_compatible_node(dn, type, compatible) \
1192 for (dn = of_find_compatible_node(NULL, type, compatible); dn; \
1193 dn = of_find_compatible_node(dn, type, compatible))
1194#define for_each_matching_node(dn, matches) \
1195 for (dn = of_find_matching_node(NULL, matches); dn; \
1196 dn = of_find_matching_node(dn, matches))
1197#define for_each_matching_node_and_match(dn, matches, match) \
1198 for (dn = of_find_matching_node_and_match(NULL, matches, match); \
1199 dn; dn = of_find_matching_node_and_match(dn, matches, match))
1200
1201#define for_each_child_of_node(parent, child) \
1202 for (child = of_get_next_child(parent, NULL); child != NULL; \
1203 child = of_get_next_child(parent, child))
1204#define for_each_available_child_of_node(parent, child) \
1205 for (child = of_get_next_available_child(parent, NULL); child != NULL; \
1206 child = of_get_next_available_child(parent, child))
1207
1208#define for_each_node_with_property(dn, prop_name) \
1209 for (dn = of_find_node_with_property(NULL, prop_name); dn; \
1210 dn = of_find_node_with_property(dn, prop_name))
1211
1212static inline int of_get_child_count(const struct device_node *np)
1213{
1214 struct device_node *child;
1215 int num = 0;
1216
1217 for_each_child_of_node(np, child)
1218 num++;
1219
1220 return num;
1221}
1222
1223static inline int of_get_available_child_count(const struct device_node *np)
1224{
1225 struct device_node *child;
1226 int num = 0;
1227
1228 for_each_available_child_of_node(np, child)
1229 num++;
1230
1231 return num;
1232}
1233
71f50c6d 1234#if defined(CONFIG_OF) && !defined(MODULE)
54196ccb
RH
1235#define _OF_DECLARE(table, name, compat, fn, fn_type) \
1236 static const struct of_device_id __of_table_##name \
1237 __used __section(__##table##_of_table) \
1238 = { .compatible = compat, \
1239 .data = (fn == (fn_type)NULL) ? fn : fn }
1240#else
5f563585 1241#define _OF_DECLARE(table, name, compat, fn, fn_type) \
54196ccb
RH
1242 static const struct of_device_id __of_table_##name \
1243 __attribute__((unused)) \
1244 = { .compatible = compat, \
1245 .data = (fn == (fn_type)NULL) ? fn : fn }
1246#endif
1247
1248typedef int (*of_init_fn_2)(struct device_node *, struct device_node *);
c35d9292 1249typedef int (*of_init_fn_1_ret)(struct device_node *);
54196ccb
RH
1250typedef void (*of_init_fn_1)(struct device_node *);
1251
1252#define OF_DECLARE_1(table, name, compat, fn) \
1253 _OF_DECLARE(table, name, compat, fn, of_init_fn_1)
c35d9292
DL
1254#define OF_DECLARE_1_RET(table, name, compat, fn) \
1255 _OF_DECLARE(table, name, compat, fn, of_init_fn_1_ret)
54196ccb
RH
1256#define OF_DECLARE_2(table, name, compat, fn) \
1257 _OF_DECLARE(table, name, compat, fn, of_init_fn_2)
1258
201c910b
PA
1259/**
1260 * struct of_changeset_entry - Holds a changeset entry
1261 *
1262 * @node: list_head for the log list
1263 * @action: notifier action
1264 * @np: pointer to the device node affected
1265 * @prop: pointer to the property affected
1266 * @old_prop: hold a pointer to the original property
1267 *
1268 * Every modification of the device tree during a changeset
1269 * is held in a list of of_changeset_entry structures.
1270 * That way we can recover from a partial application, or we can
1271 * revert the changeset
1272 */
1273struct of_changeset_entry {
1274 struct list_head node;
1275 unsigned long action;
1276 struct device_node *np;
1277 struct property *prop;
1278 struct property *old_prop;
1279};
1280
1281/**
1282 * struct of_changeset - changeset tracker structure
1283 *
1284 * @entries: list_head for the changeset entries
1285 *
1286 * changesets are a convenient way to apply bulk changes to the
1287 * live tree. In case of an error, changes are rolled-back.
1288 * changesets live on after initial application, and if not
1289 * destroyed after use, they can be reverted in one single call.
1290 */
1291struct of_changeset {
1292 struct list_head entries;
1293};
1294
b53a2340
PA
1295enum of_reconfig_change {
1296 OF_RECONFIG_NO_CHANGE = 0,
1297 OF_RECONFIG_CHANGE_ADD,
1298 OF_RECONFIG_CHANGE_REMOVE,
1299};
1300
201c910b 1301#ifdef CONFIG_OF_DYNAMIC
f6892d19
GL
1302extern int of_reconfig_notifier_register(struct notifier_block *);
1303extern int of_reconfig_notifier_unregister(struct notifier_block *);
f5242e5a
GL
1304extern int of_reconfig_notify(unsigned long, struct of_reconfig_data *rd);
1305extern int of_reconfig_get_state_change(unsigned long action,
1306 struct of_reconfig_data *arg);
f6892d19 1307
201c910b
PA
1308extern void of_changeset_init(struct of_changeset *ocs);
1309extern void of_changeset_destroy(struct of_changeset *ocs);
1310extern int of_changeset_apply(struct of_changeset *ocs);
1311extern int of_changeset_revert(struct of_changeset *ocs);
1312extern int of_changeset_action(struct of_changeset *ocs,
1313 unsigned long action, struct device_node *np,
1314 struct property *prop);
1315
1316static inline int of_changeset_attach_node(struct of_changeset *ocs,
1317 struct device_node *np)
1318{
1319 return of_changeset_action(ocs, OF_RECONFIG_ATTACH_NODE, np, NULL);
1320}
1321
1322static inline int of_changeset_detach_node(struct of_changeset *ocs,
1323 struct device_node *np)
1324{
1325 return of_changeset_action(ocs, OF_RECONFIG_DETACH_NODE, np, NULL);
1326}
1327
1328static inline int of_changeset_add_property(struct of_changeset *ocs,
1329 struct device_node *np, struct property *prop)
1330{
1331 return of_changeset_action(ocs, OF_RECONFIG_ADD_PROPERTY, np, prop);
1332}
1333
1334static inline int of_changeset_remove_property(struct of_changeset *ocs,
1335 struct device_node *np, struct property *prop)
1336{
1337 return of_changeset_action(ocs, OF_RECONFIG_REMOVE_PROPERTY, np, prop);
1338}
1339
1340static inline int of_changeset_update_property(struct of_changeset *ocs,
1341 struct device_node *np, struct property *prop)
1342{
1343 return of_changeset_action(ocs, OF_RECONFIG_UPDATE_PROPERTY, np, prop);
1344}
f6892d19
GL
1345#else /* CONFIG_OF_DYNAMIC */
1346static inline int of_reconfig_notifier_register(struct notifier_block *nb)
1347{
1348 return -EINVAL;
1349}
1350static inline int of_reconfig_notifier_unregister(struct notifier_block *nb)
1351{
1352 return -EINVAL;
1353}
f5242e5a
GL
1354static inline int of_reconfig_notify(unsigned long action,
1355 struct of_reconfig_data *arg)
f6892d19
GL
1356{
1357 return -EINVAL;
1358}
f5242e5a
GL
1359static inline int of_reconfig_get_state_change(unsigned long action,
1360 struct of_reconfig_data *arg)
f6892d19
GL
1361{
1362 return -EINVAL;
1363}
1364#endif /* CONFIG_OF_DYNAMIC */
201c910b 1365
a4b4e046 1366/**
8f73110f 1367 * of_device_is_system_power_controller - Tells if system-power-controller is found for device_node
a4b4e046
RP
1368 * @np: Pointer to the given device_node
1369 *
1370 * return true if present false otherwise
1371 */
8f73110f 1372static inline bool of_device_is_system_power_controller(const struct device_node *np)
a4b4e046 1373{
8f73110f 1374 return of_property_read_bool(np, "system-power-controller");
a4b4e046
RP
1375}
1376
7518b589
PA
1377/**
1378 * Overlay support
1379 */
1380
39a842e2 1381enum of_overlay_notify_action {
24789c5c 1382 OF_OVERLAY_PRE_APPLY = 0,
39a842e2
AT
1383 OF_OVERLAY_POST_APPLY,
1384 OF_OVERLAY_PRE_REMOVE,
1385 OF_OVERLAY_POST_REMOVE,
1386};
1387
1388struct of_overlay_notify_data {
1389 struct device_node *overlay;
1390 struct device_node *target;
1391};
1392
7518b589
PA
1393#ifdef CONFIG_OF_OVERLAY
1394
39a751a4
FR
1395int of_overlay_fdt_apply(const void *overlay_fdt, u32 overlay_fdt_size,
1396 int *ovcs_id);
24789c5c 1397int of_overlay_remove(int *ovcs_id);
0290c4ca 1398int of_overlay_remove_all(void);
7518b589 1399
39a842e2
AT
1400int of_overlay_notifier_register(struct notifier_block *nb);
1401int of_overlay_notifier_unregister(struct notifier_block *nb);
1402
7518b589
PA
1403#else
1404
39a751a4 1405static inline int of_overlay_fdt_apply(void *overlay_fdt, int *ovcs_id)
7518b589
PA
1406{
1407 return -ENOTSUPP;
1408}
1409
24789c5c 1410static inline int of_overlay_remove(int *ovcs_id)
7518b589
PA
1411{
1412 return -ENOTSUPP;
1413}
1414
0290c4ca 1415static inline int of_overlay_remove_all(void)
7518b589
PA
1416{
1417 return -ENOTSUPP;
1418}
1419
39a842e2
AT
1420static inline int of_overlay_notifier_register(struct notifier_block *nb)
1421{
1422 return 0;
1423}
1424
1425static inline int of_overlay_notifier_unregister(struct notifier_block *nb)
1426{
1427 return 0;
1428}
1429
7518b589
PA
1430#endif
1431
76c1ce78 1432#endif /* _LINUX_OF_H */