1b274206ea356ce6bceeb30fd2769fc147047d5f
[platform/kernel/u-boot.git] / include / dm / device.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (c) 2013 Google, Inc
4  *
5  * (C) Copyright 2012
6  * Pavel Herrmann <morpheus.ibis@gmail.com>
7  * Marek Vasut <marex@denx.de>
8  */
9
10 #ifndef _DM_DEVICE_H
11 #define _DM_DEVICE_H
12
13 #include <dm/ofnode.h>
14 #include <dm/uclass-id.h>
15 #include <fdtdec.h>
16 #include <linker_lists.h>
17 #include <linux/kernel.h>
18 #include <linux/list.h>
19 #include <linux/printk.h>
20
21 struct driver_info;
22
23 /* Driver is active (probed). Cleared when it is removed */
24 #define DM_FLAG_ACTIVATED               (1 << 0)
25
26 /* DM is responsible for allocating and freeing plat */
27 #define DM_FLAG_ALLOC_PDATA             (1 << 1)
28
29 /* DM should init this device prior to relocation */
30 #define DM_FLAG_PRE_RELOC               (1 << 2)
31
32 /* DM is responsible for allocating and freeing parent_plat */
33 #define DM_FLAG_ALLOC_PARENT_PDATA      (1 << 3)
34
35 /* DM is responsible for allocating and freeing uclass_plat */
36 #define DM_FLAG_ALLOC_UCLASS_PDATA      (1 << 4)
37
38 /* Allocate driver private data on a DMA boundary */
39 #define DM_FLAG_ALLOC_PRIV_DMA          (1 << 5)
40
41 /* Device is bound */
42 #define DM_FLAG_BOUND                   (1 << 6)
43
44 /* Device name is allocated and should be freed on unbind() */
45 #define DM_FLAG_NAME_ALLOCED            (1 << 7)
46
47 /* Device has platform data provided by of-platdata */
48 #define DM_FLAG_OF_PLATDATA             (1 << 8)
49
50 /*
51  * Call driver remove function to stop currently active DMA transfers or
52  * give DMA buffers back to the HW / controller. This may be needed for
53  * some drivers to do some final stage cleanup before the OS is called
54  * (U-Boot exit)
55  */
56 #define DM_FLAG_ACTIVE_DMA              (1 << 9)
57
58 /*
59  * Call driver remove function to do some final configuration, before
60  * U-Boot exits and the OS is started
61  */
62 #define DM_FLAG_OS_PREPARE              (1 << 10)
63
64 /* DM does not enable/disable the power domains corresponding to this device */
65 #define DM_FLAG_DEFAULT_PD_CTRL_OFF     (1 << 11)
66
67 /* Driver plat has been read. Cleared when the device is removed */
68 #define DM_FLAG_PLATDATA_VALID          (1 << 12)
69
70 /*
71  * Device is removed without switching off its power domain. This might
72  * be required, i. e. for serial console (debug) output when booting OS.
73  */
74 #define DM_FLAG_REMOVE_WITH_PD_ON       (1 << 13)
75
76 /*
77  * One or multiple of these flags are passed to device_remove() so that
78  * a selective device removal as specified by the remove-stage and the
79  * driver flags can be done.
80  */
81 enum {
82         /* Normal remove, remove all devices */
83         DM_REMOVE_NORMAL        = 1 << 0,
84
85         /* Remove devices with active DMA */
86         DM_REMOVE_ACTIVE_DMA    = DM_FLAG_ACTIVE_DMA,
87
88         /* Remove devices which need some final OS preparation steps */
89         DM_REMOVE_OS_PREPARE    = DM_FLAG_OS_PREPARE,
90
91         /* Add more use cases here */
92
93         /* Remove devices with any active flag */
94         DM_REMOVE_ACTIVE_ALL    = DM_REMOVE_ACTIVE_DMA | DM_REMOVE_OS_PREPARE,
95
96         /* Don't power down any attached power domains */
97         DM_REMOVE_NO_PD         = 1 << 1,
98 };
99
100 /**
101  * struct udevice - An instance of a driver
102  *
103  * This holds information about a device, which is a driver bound to a
104  * particular port or peripheral (essentially a driver instance).
105  *
106  * A device will come into existence through a 'bind' call, either due to
107  * a U_BOOT_DEVICE() macro (in which case plat is non-NULL) or a node
108  * in the device tree (in which case of_offset is >= 0). In the latter case
109  * we translate the device tree information into plat in a function
110  * implemented by the driver of_to_plat method (called just before the
111  * probe method if the device has a device tree node.
112  *
113  * All three of plat, priv and uclass_priv can be allocated by the
114  * driver, or you can use the auto_alloc_size members of struct driver and
115  * struct uclass_driver to have driver model do this automatically.
116  *
117  * @driver: The driver used by this device
118  * @name: Name of device, typically the FDT node name
119  * @plat_: Configuration data for this device (do not access outside driver
120  *      model)
121  * @parent_plat_: The parent bus's configuration data for this device (do not
122  *      access outside driver model)
123  * @uclass_plat_: The uclass's configuration data for this device (do not access
124  *      outside driver model)
125  * @node: Reference to device tree node for this device
126  * @driver_data: Driver data word for the entry that matched this device with
127  *              its driver
128  * @parent: Parent of this device, or NULL for the top level device
129  * @priv_: Private data for this device (do not access outside driver model)
130  * @uclass: Pointer to uclass for this device
131  * @uclass_priv_: The uclass's private data for this device (do not access
132  *      outside driver model)
133  * @parent_priv_: The parent's private data for this device (do not access
134  *      outside driver model)
135  * @uclass_node: Used by uclass to link its devices
136  * @child_head: List of children of this device
137  * @sibling_node: Next device in list of all devices
138  * @flags_: Flags for this device DM_FLAG_... (do not access outside driver
139  *      model)
140  * @seq_: Allocated sequence number for this device (-1 = none). This is set up
141  * when the device is bound and is unique within the device's uclass. If the
142  * device has an alias in the devicetree then that is used to set the sequence
143  * number. Otherwise, the next available number is used. Sequence numbers are
144  * used by certain commands that need device to be numbered (e.g. 'mmc dev').
145  * (do not access outside driver model)
146  * @devres_head: List of memory allocations associated with this device.
147  *              When CONFIG_DEVRES is enabled, devm_kmalloc() and friends will
148  *              add to this list. Memory so-allocated will be freed
149  *              automatically when the device is removed / unbound
150  */
151 struct udevice {
152         const struct driver *driver;
153         const char *name;
154         void *plat_;
155         void *parent_plat_;
156         void *uclass_plat_;
157         ofnode node;
158         ulong driver_data;
159         struct udevice *parent;
160         void *priv_;
161         struct uclass *uclass;
162         void *uclass_priv_;
163         void *parent_priv_;
164         struct list_head uclass_node;
165         struct list_head child_head;
166         struct list_head sibling_node;
167         u32 flags_;
168         int seq_;
169 #ifdef CONFIG_DEVRES
170         struct list_head devres_head;
171 #endif
172 };
173
174 /* Maximum sequence number supported */
175 #define DM_MAX_SEQ      999
176
177 /* Returns the operations for a device */
178 #define device_get_ops(dev)     (dev->driver->ops)
179
180 static inline u32 dev_get_flags(const struct udevice *dev)
181 {
182         return dev->flags_;
183 }
184
185 static inline void dev_or_flags(struct udevice *dev, u32 or)
186 {
187         dev->flags_ |= or;
188 }
189
190 static inline void dev_bic_flags(struct udevice *dev, u32 bic)
191 {
192         dev->flags_ &= ~bic;
193 }
194
195 /**
196  * dev_ofnode() - get the DT node reference associated with a udevice
197  *
198  * @dev:        device to check
199  * @return reference of the the device's DT node
200  */
201 static inline ofnode dev_ofnode(const struct udevice *dev)
202 {
203 #if !CONFIG_IS_ENABLED(OF_PLATDATA)
204         return dev->node;
205 #else
206         return ofnode_null();
207 #endif
208 }
209
210 /* Returns non-zero if the device is active (probed and not removed) */
211 #define device_active(dev)      (dev_get_flags(dev) & DM_FLAG_ACTIVATED)
212
213 static inline int dev_of_offset(const struct udevice *dev)
214 {
215 #if !CONFIG_IS_ENABLED(OF_PLATDATA)
216         return ofnode_to_offset(dev_ofnode(dev));
217 #else
218         return -1;
219 #endif
220 }
221
222 static inline bool dev_has_ofnode(const struct udevice *dev)
223 {
224 #if !CONFIG_IS_ENABLED(OF_PLATDATA)
225         return ofnode_valid(dev_ofnode(dev));
226 #else
227         return false;
228 #endif
229 }
230
231 static inline void dev_set_ofnode(struct udevice *dev, ofnode node)
232 {
233 #if !CONFIG_IS_ENABLED(OF_PLATDATA)
234         dev->node = node;
235 #endif
236 }
237
238 static inline int dev_seq(const struct udevice *dev)
239 {
240         return dev->seq_;
241 }
242
243 /**
244  * struct udevice_id - Lists the compatible strings supported by a driver
245  * @compatible: Compatible string
246  * @data: Data for this compatible string
247  */
248 struct udevice_id {
249         const char *compatible;
250         ulong data;
251 };
252
253 #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)
254 #define of_match_ptr(_ptr)      (_ptr)
255 #else
256 #define of_match_ptr(_ptr)      NULL
257 #endif /* CONFIG_IS_ENABLED(OF_CONTROL) */
258
259 /**
260  * struct driver - A driver for a feature or peripheral
261  *
262  * This holds methods for setting up a new device, and also removing it.
263  * The device needs information to set itself up - this is provided either
264  * by plat or a device tree node (which we find by looking up
265  * matching compatible strings with of_match).
266  *
267  * Drivers all belong to a uclass, representing a class of devices of the
268  * same type. Common elements of the drivers can be implemented in the uclass,
269  * or the uclass can provide a consistent interface to the drivers within
270  * it.
271  *
272  * @name: Device name
273  * @id: Identifies the uclass we belong to
274  * @of_match: List of compatible strings to match, and any identifying data
275  * for each.
276  * @bind: Called to bind a device to its driver
277  * @probe: Called to probe a device, i.e. activate it
278  * @remove: Called to remove a device, i.e. de-activate it
279  * @unbind: Called to unbind a device from its driver
280  * @of_to_plat: Called before probe to decode device tree data
281  * @child_post_bind: Called after a new child has been bound
282  * @child_pre_probe: Called before a child device is probed. The device has
283  * memory allocated but it has not yet been probed.
284  * @child_post_remove: Called after a child device is removed. The device
285  * has memory allocated but its device_remove() method has been called.
286  * @priv_auto: If non-zero this is the size of the private data
287  * to be allocated in the device's ->priv pointer. If zero, then the driver
288  * is responsible for allocating any data required.
289  * @plat_auto: If non-zero this is the size of the
290  * platform data to be allocated in the device's ->plat pointer.
291  * This is typically only useful for device-tree-aware drivers (those with
292  * an of_match), since drivers which use plat will have the data
293  * provided in the U_BOOT_DEVICE() instantiation.
294  * @per_child_auto: Each device can hold private data owned by
295  * its parent. If required this will be automatically allocated if this
296  * value is non-zero.
297  * @per_child_plat_auto: A bus likes to store information about
298  * its children. If non-zero this is the size of this data, to be allocated
299  * in the child's parent_plat pointer.
300  * @ops: Driver-specific operations. This is typically a list of function
301  * pointers defined by the driver, to implement driver functions required by
302  * the uclass.
303  * @flags: driver flags - see DM_FLAGS_...
304  * @acpi_ops: Advanced Configuration and Power Interface (ACPI) operations,
305  * allowing the device to add things to the ACPI tables passed to Linux
306  */
307 struct driver {
308         char *name;
309         enum uclass_id id;
310         const struct udevice_id *of_match;
311         int (*bind)(struct udevice *dev);
312         int (*probe)(struct udevice *dev);
313         int (*remove)(struct udevice *dev);
314         int (*unbind)(struct udevice *dev);
315         int (*of_to_plat)(struct udevice *dev);
316         int (*child_post_bind)(struct udevice *dev);
317         int (*child_pre_probe)(struct udevice *dev);
318         int (*child_post_remove)(struct udevice *dev);
319         int priv_auto;
320         int plat_auto;
321         int per_child_auto;
322         int per_child_plat_auto;
323         const void *ops;        /* driver-specific operations */
324         uint32_t flags;
325 #if CONFIG_IS_ENABLED(ACPIGEN)
326         struct acpi_ops *acpi_ops;
327 #endif
328 };
329
330 /* Declare a new U-Boot driver */
331 #define U_BOOT_DRIVER(__name)                                           \
332         ll_entry_declare(struct driver, __name, driver)
333
334 /* Get a pointer to a given driver */
335 #define DM_GET_DRIVER(__name)                                           \
336         ll_entry_get(struct driver, __name, driver)
337
338 /**
339  * Declare a macro to state a alias for a driver name. This macro will
340  * produce no code but its information will be parsed by tools like
341  * dtoc
342  */
343 #define U_BOOT_DRIVER_ALIAS(__name, __alias)
344
345 /**
346  * dev_get_plat() - Get the platform data for a device
347  *
348  * This checks that dev is not NULL, but no other checks for now
349  *
350  * @dev         Device to check
351  * @return platform data, or NULL if none
352  */
353 void *dev_get_plat(const struct udevice *dev);
354
355 /**
356  * dev_get_parent_plat() - Get the parent platform data for a device
357  *
358  * This checks that dev is not NULL, but no other checks for now
359  *
360  * @dev         Device to check
361  * @return parent's platform data, or NULL if none
362  */
363 void *dev_get_parent_plat(const struct udevice *dev);
364
365 /**
366  * dev_get_uclass_plat() - Get the uclass platform data for a device
367  *
368  * This checks that dev is not NULL, but no other checks for now
369  *
370  * @dev         Device to check
371  * @return uclass's platform data, or NULL if none
372  */
373 void *dev_get_uclass_plat(const struct udevice *dev);
374
375 /**
376  * dev_get_priv() - Get the private data for a device
377  *
378  * This checks that dev is not NULL, but no other checks for now
379  *
380  * @dev         Device to check
381  * @return private data, or NULL if none
382  */
383 void *dev_get_priv(const struct udevice *dev);
384
385 /**
386  * dev_get_parent_priv() - Get the parent private data for a device
387  *
388  * The parent private data is data stored in the device but owned by the
389  * parent. For example, a USB device may have parent data which contains
390  * information about how to talk to the device over USB.
391  *
392  * This checks that dev is not NULL, but no other checks for now
393  *
394  * @dev         Device to check
395  * @return parent data, or NULL if none
396  */
397 void *dev_get_parent_priv(const struct udevice *dev);
398
399 /**
400  * dev_get_uclass_priv() - Get the private uclass data for a device
401  *
402  * This checks that dev is not NULL, but no other checks for now
403  *
404  * @dev         Device to check
405  * @return private uclass data for this device, or NULL if none
406  */
407 void *dev_get_uclass_priv(const struct udevice *dev);
408
409 /**
410  * struct dev_get_parent() - Get the parent of a device
411  *
412  * @child:      Child to check
413  * @return parent of child, or NULL if this is the root device
414  */
415 struct udevice *dev_get_parent(const struct udevice *child);
416
417 /**
418  * dev_get_driver_data() - get the driver data used to bind a device
419  *
420  * When a device is bound using a device tree node, it matches a
421  * particular compatible string in struct udevice_id. This function
422  * returns the associated data value for that compatible string. This is
423  * the 'data' field in struct udevice_id.
424  *
425  * As an example, consider this structure:
426  * static const struct udevice_id tegra_i2c_ids[] = {
427  *      { .compatible = "nvidia,tegra114-i2c", .data = TYPE_114 },
428  *      { .compatible = "nvidia,tegra20-i2c", .data = TYPE_STD },
429  *      { .compatible = "nvidia,tegra20-i2c-dvc", .data = TYPE_DVC },
430  *      { }
431  * };
432  *
433  * When driver model finds a driver for this it will store the 'data' value
434  * corresponding to the compatible string it matches. This function returns
435  * that value. This allows the driver to handle several variants of a device.
436  *
437  * For USB devices, this is the driver_info field in struct usb_device_id.
438  *
439  * @dev:        Device to check
440  * @return driver data (0 if none is provided)
441  */
442 ulong dev_get_driver_data(const struct udevice *dev);
443
444 /**
445  * dev_get_driver_ops() - get the device's driver's operations
446  *
447  * This checks that dev is not NULL, and returns the pointer to device's
448  * driver's operations.
449  *
450  * @dev:        Device to check
451  * @return void pointer to driver's operations or NULL for NULL-dev or NULL-ops
452  */
453 const void *dev_get_driver_ops(const struct udevice *dev);
454
455 /**
456  * device_get_uclass_id() - return the uclass ID of a device
457  *
458  * @dev:        Device to check
459  * @return uclass ID for the device
460  */
461 enum uclass_id device_get_uclass_id(const struct udevice *dev);
462
463 /**
464  * dev_get_uclass_name() - return the uclass name of a device
465  *
466  * This checks that dev is not NULL.
467  *
468  * @dev:        Device to check
469  * @return  pointer to the uclass name for the device
470  */
471 const char *dev_get_uclass_name(const struct udevice *dev);
472
473 /**
474  * device_get_child() - Get the child of a device by index
475  *
476  * Returns the numbered child, 0 being the first. This does not use
477  * sequence numbers, only the natural order.
478  *
479  * @dev:        Parent device to check
480  * @index:      Child index
481  * @devp:       Returns pointer to device
482  * @return 0 if OK, -ENODEV if no such device, other error if the device fails
483  *         to probe
484  */
485 int device_get_child(const struct udevice *parent, int index,
486                      struct udevice **devp);
487
488 /**
489  * device_get_child_count() - Get the available child count of a device
490  *
491  * Returns the number of children to a device.
492  *
493  * @parent:     Parent device to check
494  */
495 int device_get_child_count(const struct udevice *parent);
496
497 /**
498  * device_find_child_by_seq() - Find a child device based on a sequence
499  *
500  * This searches for a device with the given seq.
501  *
502  * @parent: Parent device
503  * @seq: Sequence number to find (0=first)
504  * @devp: Returns pointer to device (there is only one per for each seq).
505  * Set to NULL if none is found
506  * @return 0 if OK, -ENODEV if not found
507  */
508 int device_find_child_by_seq(const struct udevice *parent, int seq,
509                              struct udevice **devp);
510
511 /**
512  * device_get_child_by_seq() - Get a child device based on a sequence
513  *
514  * If an active device has this sequence it will be returned. If there is no
515  * such device then this will check for a device that is requesting this
516  * sequence.
517  *
518  * The device is probed to activate it ready for use.
519  *
520  * @parent: Parent device
521  * @seq: Sequence number to find (0=first)
522  * @devp: Returns pointer to device (there is only one per for each seq)
523  * Set to NULL if none is found
524  * @return 0 if OK, -ve on error
525  */
526 int device_get_child_by_seq(const struct udevice *parent, int seq,
527                             struct udevice **devp);
528
529 /**
530  * device_find_child_by_of_offset() - Find a child device based on FDT offset
531  *
532  * Locates a child device by its device tree offset.
533  *
534  * @parent: Parent device
535  * @of_offset: Device tree offset to find
536  * @devp: Returns pointer to device if found, otherwise this is set to NULL
537  * @return 0 if OK, -ve on error
538  */
539 int device_find_child_by_of_offset(const struct udevice *parent, int of_offset,
540                                    struct udevice **devp);
541
542 /**
543  * device_get_child_by_of_offset() - Get a child device based on FDT offset
544  *
545  * Locates a child device by its device tree offset.
546  *
547  * The device is probed to activate it ready for use.
548  *
549  * @parent: Parent device
550  * @of_offset: Device tree offset to find
551  * @devp: Returns pointer to device if found, otherwise this is set to NULL
552  * @return 0 if OK, -ve on error
553  */
554 int device_get_child_by_of_offset(const struct udevice *parent, int of_offset,
555                                   struct udevice **devp);
556
557 /**
558  * device_find_global_by_ofnode() - Get a device based on ofnode
559  *
560  * Locates a device by its device tree ofnode, searching globally throughout
561  * the all driver model devices.
562  *
563  * The device is NOT probed
564  *
565  * @node: Device tree ofnode to find
566  * @devp: Returns pointer to device if found, otherwise this is set to NULL
567  * @return 0 if OK, -ve on error
568  */
569
570 int device_find_global_by_ofnode(ofnode node, struct udevice **devp);
571
572 /**
573  * device_get_global_by_ofnode() - Get a device based on ofnode
574  *
575  * Locates a device by its device tree ofnode, searching globally throughout
576  * the all driver model devices.
577  *
578  * The device is probed to activate it ready for use.
579  *
580  * @node: Device tree ofnode to find
581  * @devp: Returns pointer to device if found, otherwise this is set to NULL
582  * @return 0 if OK, -ve on error
583  */
584 int device_get_global_by_ofnode(ofnode node, struct udevice **devp);
585
586 /**
587  * device_get_by_driver_info() - Get a device based on driver_info
588  *
589  * Locates a device by its struct driver_info, by using its reference which
590  * is updated during the bind process.
591  *
592  * The device is probed to activate it ready for use.
593  *
594  * @info: Struct driver_info
595  * @devp: Returns pointer to device if found, otherwise this is set to NULL
596  * @return 0 if OK, -ve on error
597  */
598 int device_get_by_driver_info(const struct driver_info *info,
599                               struct udevice **devp);
600
601 /**
602  * device_get_by_driver_info_idx() - Get a device based on driver_info index
603  *
604  * Locates a device by its struct driver_info, by using its index number which
605  * is written into the idx field of struct phandle_1_arg, etc.
606  *
607  * The device is probed to activate it ready for use.
608  *
609  * @idx: Index number of the driver_info structure (0=first)
610  * @devp: Returns pointer to device if found, otherwise this is set to NULL
611  * @return 0 if OK, -ve on error
612  */
613 int device_get_by_driver_info_idx(uint idx, struct udevice **devp);
614
615 /**
616  * device_find_first_child() - Find the first child of a device
617  *
618  * @parent: Parent device to search
619  * @devp: Returns first child device, or NULL if none
620  * @return 0
621  */
622 int device_find_first_child(const struct udevice *parent,
623                             struct udevice **devp);
624
625 /**
626  * device_find_next_child() - Find the next child of a device
627  *
628  * @devp: Pointer to previous child device on entry. Returns pointer to next
629  *              child device, or NULL if none
630  * @return 0
631  */
632 int device_find_next_child(struct udevice **devp);
633
634 /**
635  * device_find_first_inactive_child() - Find the first inactive child
636  *
637  * This is used to locate an existing child of a device which is of a given
638  * uclass.
639  *
640  * The device is NOT probed
641  *
642  * @parent:     Parent device to search
643  * @uclass_id:  Uclass to look for
644  * @devp:       Returns device found, if any
645  * @return 0 if found, else -ENODEV
646  */
647 int device_find_first_inactive_child(const struct udevice *parent,
648                                      enum uclass_id uclass_id,
649                                      struct udevice **devp);
650
651 /**
652  * device_find_first_child_by_uclass() - Find the first child of a device in uc
653  *
654  * @parent: Parent device to search
655  * @uclass_id:  Uclass to look for
656  * @devp: Returns first child device in that uclass, if any
657  * @return 0 if found, else -ENODEV
658  */
659 int device_find_first_child_by_uclass(const struct udevice *parent,
660                                       enum uclass_id uclass_id,
661                                       struct udevice **devp);
662
663 /**
664  * device_find_child_by_name() - Find a child by device name
665  *
666  * @parent:     Parent device to search
667  * @name:       Name to look for
668  * @devp:       Returns device found, if any
669  * @return 0 if found, else -ENODEV
670  */
671 int device_find_child_by_name(const struct udevice *parent, const char *name,
672                               struct udevice **devp);
673
674 /**
675  * device_first_child_ofdata_err() - Find the first child and reads its plat
676  *
677  * The of_to_plat() method is called on the child before it is returned,
678  * but the child is not probed.
679  *
680  * @parent: Parent to check
681  * @devp: Returns child that was found, if any
682  * @return 0 on success, -ENODEV if no children, other -ve on error
683  */
684 int device_first_child_ofdata_err(struct udevice *parent,
685                                   struct udevice **devp);
686
687 /*
688  * device_next_child_ofdata_err() - Find the next child and read its plat
689  *
690  * The of_to_plat() method is called on the child before it is returned,
691  * but the child is not probed.
692  *
693  * @devp: On entry, points to the previous child; on exit returns the child that
694  *      was found, if any
695  * @return 0 on success, -ENODEV if no children, other -ve on error
696  */
697 int device_next_child_ofdata_err(struct udevice **devp);
698
699 /**
700  * device_first_child_err() - Get the first child of a device
701  *
702  * The device returned is probed if necessary, and ready for use
703  *
704  * @parent:     Parent device to search
705  * @devp:       Returns device found, if any
706  * @return 0 if found, -ENODEV if not, -ve error if device failed to probe
707  */
708 int device_first_child_err(struct udevice *parent, struct udevice **devp);
709
710 /**
711  * device_next_child_err() - Get the next child of a parent device
712  *
713  * The device returned is probed if necessary, and ready for use
714  *
715  * @devp: On entry, pointer to device to lookup. On exit, returns pointer
716  * to the next sibling if no error occurred
717  * @return 0 if found, -ENODEV if not, -ve error if device failed to probe
718  */
719 int device_next_child_err(struct udevice **devp);
720
721 /**
722  * device_has_children() - check if a device has any children
723  *
724  * @dev:        Device to check
725  * @return true if the device has one or more children
726  */
727 bool device_has_children(const struct udevice *dev);
728
729 /**
730  * device_has_active_children() - check if a device has any active children
731  *
732  * @dev:        Device to check
733  * @return true if the device has one or more children and at least one of
734  * them is active (probed).
735  */
736 bool device_has_active_children(const struct udevice *dev);
737
738 /**
739  * device_is_last_sibling() - check if a device is the last sibling
740  *
741  * This function can be useful for display purposes, when special action needs
742  * to be taken when displaying the last sibling. This can happen when a tree
743  * view of devices is being displayed.
744  *
745  * @dev:        Device to check
746  * @return true if there are no more siblings after this one - i.e. is it
747  * last in the list.
748  */
749 bool device_is_last_sibling(const struct udevice *dev);
750
751 /**
752  * device_set_name() - set the name of a device
753  *
754  * This must be called in the device's bind() method and no later. Normally
755  * this is unnecessary but for probed devices which don't get a useful name
756  * this function can be helpful.
757  *
758  * The name is allocated and will be freed automatically when the device is
759  * unbound.
760  *
761  * @dev:        Device to update
762  * @name:       New name (this string is allocated new memory and attached to
763  *              the device)
764  * @return 0 if OK, -ENOMEM if there is not enough memory to allocate the
765  * string
766  */
767 int device_set_name(struct udevice *dev, const char *name);
768
769 /**
770  * device_set_name_alloced() - note that a device name is allocated
771  *
772  * This sets the DM_FLAG_NAME_ALLOCED flag for the device, so that when it is
773  * unbound the name will be freed. This avoids memory leaks.
774  *
775  * @dev:        Device to update
776  */
777 void device_set_name_alloced(struct udevice *dev);
778
779 /**
780  * device_is_compatible() - check if the device is compatible with the compat
781  *
782  * This allows to check whether the device is comaptible with the compat.
783  *
784  * @dev:        udevice pointer for which compatible needs to be verified.
785  * @compat:     Compatible string which needs to verified in the given
786  *              device
787  * @return true if OK, false if the compatible is not found
788  */
789 bool device_is_compatible(const struct udevice *dev, const char *compat);
790
791 /**
792  * of_machine_is_compatible() - check if the machine is compatible with
793  *                              the compat
794  *
795  * This allows to check whether the machine is comaptible with the compat.
796  *
797  * @compat:     Compatible string which needs to verified
798  * @return true if OK, false if the compatible is not found
799  */
800 bool of_machine_is_compatible(const char *compat);
801
802 /**
803  * dev_disable_by_path() - Disable a device given its device tree path
804  *
805  * @path:       The device tree path identifying the device to be disabled
806  * @return 0 on success, -ve on error
807  */
808 int dev_disable_by_path(const char *path);
809
810 /**
811  * dev_enable_by_path() - Enable a device given its device tree path
812  *
813  * @path:       The device tree path identifying the device to be enabled
814  * @return 0 on success, -ve on error
815  */
816 int dev_enable_by_path(const char *path);
817
818 /**
819  * device_is_on_pci_bus - Test if a device is on a PCI bus
820  *
821  * @dev:        device to test
822  * @return:     true if it is on a PCI bus, false otherwise
823  */
824 static inline bool device_is_on_pci_bus(const struct udevice *dev)
825 {
826         return dev->parent && device_get_uclass_id(dev->parent) == UCLASS_PCI;
827 }
828
829 /**
830  * device_foreach_child_safe() - iterate through child devices safely
831  *
832  * This allows the @pos child to be removed in the loop if required.
833  *
834  * @pos: struct udevice * for the current device
835  * @next: struct udevice * for the next device
836  * @parent: parent device to scan
837  */
838 #define device_foreach_child_safe(pos, next, parent)    \
839         list_for_each_entry_safe(pos, next, &parent->child_head, sibling_node)
840
841 /**
842  * device_foreach_child() - iterate through child devices
843  *
844  * @pos: struct udevice * for the current device
845  * @parent: parent device to scan
846  */
847 #define device_foreach_child(pos, parent)       \
848         list_for_each_entry(pos, &parent->child_head, sibling_node)
849
850 /**
851  * device_foreach_child_of_to_plat() - iterate through children
852  *
853  * This stops when it gets an error, with @pos set to the device that failed to
854  * read ofdata.
855
856  * This creates a for() loop which works through the available children of
857  * a device in order from start to end. Device ofdata is read by calling
858  * device_of_to_plat() on each one. The devices are not probed.
859  *
860  * @pos: struct udevice * for the current device
861  * @parent: parent device to scan
862  */
863 #define device_foreach_child_of_to_plat(pos, parent)    \
864         for (int _ret = device_first_child_ofdata_err(parent, &dev); !_ret; \
865              _ret = device_next_child_ofdata_err(&dev))
866
867 /**
868  * device_foreach_child_probe() - iterate through children, probing them
869  *
870  * This creates a for() loop which works through the available children of
871  * a device in order from start to end. Devices are probed if necessary,
872  * and ready for use.
873  *
874  * This stops when it gets an error, with @pos set to the device that failed to
875  * probe
876  *
877  * @pos: struct udevice * for the current device
878  * @parent: parent device to scan
879  */
880 #define device_foreach_child_probe(pos, parent) \
881         for (int _ret = device_first_child_err(parent, &dev); !_ret; \
882              _ret = device_next_child_err(&dev))
883
884 /**
885  * dm_scan_fdt_dev() - Bind child device in the device tree
886  *
887  * This handles device which have sub-nodes in the device tree. It scans all
888  * sub-nodes and binds drivers for each node where a driver can be found.
889  *
890  * If this is called prior to relocation, only pre-relocation devices will be
891  * bound (those marked with u-boot,dm-pre-reloc in the device tree, or where
892  * the driver has the DM_FLAG_PRE_RELOC flag set). Otherwise, all devices will
893  * be bound.
894  *
895  * @dev:        Device to scan
896  * @return 0 if OK, -ve on error
897  */
898 int dm_scan_fdt_dev(struct udevice *dev);
899
900 #endif