acpi: Collect tables in the acpi_item list
[platform/kernel/u-boot.git] / drivers / core / device.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Device manager
4  *
5  * Copyright (c) 2013 Google, Inc
6  *
7  * (C) Copyright 2012
8  * Pavel Herrmann <morpheus.ibis@gmail.com>
9  */
10
11 #include <common.h>
12 #include <cpu_func.h>
13 #include <log.h>
14 #include <asm/global_data.h>
15 #include <asm/io.h>
16 #include <clk.h>
17 #include <fdtdec.h>
18 #include <fdt_support.h>
19 #include <malloc.h>
20 #include <asm/cache.h>
21 #include <dm/device.h>
22 #include <dm/device-internal.h>
23 #include <dm/lists.h>
24 #include <dm/of_access.h>
25 #include <dm/pinctrl.h>
26 #include <dm/platdata.h>
27 #include <dm/read.h>
28 #include <dm/uclass.h>
29 #include <dm/uclass-internal.h>
30 #include <dm/util.h>
31 #include <iommu.h>
32 #include <linux/err.h>
33 #include <linux/list.h>
34 #include <power-domain.h>
35
36 DECLARE_GLOBAL_DATA_PTR;
37
38 static int device_bind_common(struct udevice *parent, const struct driver *drv,
39                               const char *name, void *plat,
40                               ulong driver_data, ofnode node,
41                               uint of_plat_size, struct udevice **devp)
42 {
43         struct udevice *dev;
44         struct uclass *uc;
45         int size, ret = 0;
46         bool auto_seq = true;
47         void *ptr;
48
49         if (CONFIG_IS_ENABLED(OF_PLATDATA_NO_BIND))
50                 return -ENOSYS;
51
52         if (devp)
53                 *devp = NULL;
54         if (!name)
55                 return -EINVAL;
56
57         ret = uclass_get(drv->id, &uc);
58         if (ret) {
59                 debug("Missing uclass for driver %s\n", drv->name);
60                 return ret;
61         }
62
63         dev = calloc(1, sizeof(struct udevice));
64         if (!dev)
65                 return -ENOMEM;
66
67         INIT_LIST_HEAD(&dev->sibling_node);
68         INIT_LIST_HEAD(&dev->child_head);
69         INIT_LIST_HEAD(&dev->uclass_node);
70 #ifdef CONFIG_DEVRES
71         INIT_LIST_HEAD(&dev->devres_head);
72 #endif
73         dev_set_plat(dev, plat);
74         dev->driver_data = driver_data;
75         dev->name = name;
76         dev_set_ofnode(dev, node);
77         dev->parent = parent;
78         dev->driver = drv;
79         dev->uclass = uc;
80
81         dev->seq_ = -1;
82         if (CONFIG_IS_ENABLED(DM_SEQ_ALIAS) &&
83             (uc->uc_drv->flags & DM_UC_FLAG_SEQ_ALIAS)) {
84                 /*
85                  * Some devices, such as a SPI bus, I2C bus and serial ports
86                  * are numbered using aliases.
87                  */
88                 if (CONFIG_IS_ENABLED(OF_CONTROL) &&
89                     !CONFIG_IS_ENABLED(OF_PLATDATA)) {
90                         if (uc->uc_drv->name && ofnode_valid(node)) {
91                                 if (!dev_read_alias_seq(dev, &dev->seq_)) {
92                                         auto_seq = false;
93                                         log_debug("   - seq=%d\n", dev->seq_);
94                                         }
95                         }
96                 }
97         }
98         if (auto_seq && !(uc->uc_drv->flags & DM_UC_FLAG_NO_AUTO_SEQ))
99                 dev->seq_ = uclass_find_next_free_seq(uc);
100
101         /* Check if we need to allocate plat */
102         if (drv->plat_auto) {
103                 bool alloc = !plat;
104
105                 /*
106                  * For of-platdata, we try use the existing data, but if
107                  * plat_auto is larger, we must allocate a new space
108                  */
109                 if (CONFIG_IS_ENABLED(OF_PLATDATA)) {
110                         if (of_plat_size)
111                                 dev_or_flags(dev, DM_FLAG_OF_PLATDATA);
112                         if (of_plat_size < drv->plat_auto)
113                                 alloc = true;
114                 }
115                 if (alloc) {
116                         dev_or_flags(dev, DM_FLAG_ALLOC_PDATA);
117                         ptr = calloc(1, drv->plat_auto);
118                         if (!ptr) {
119                                 ret = -ENOMEM;
120                                 goto fail_alloc1;
121                         }
122
123                         /*
124                          * For of-platdata, copy the old plat into the new
125                          * space
126                          */
127                         if (CONFIG_IS_ENABLED(OF_PLATDATA) && plat)
128                                 memcpy(ptr, plat, of_plat_size);
129                         dev_set_plat(dev, ptr);
130                 }
131         }
132
133         size = uc->uc_drv->per_device_plat_auto;
134         if (size) {
135                 dev_or_flags(dev, DM_FLAG_ALLOC_UCLASS_PDATA);
136                 ptr = calloc(1, size);
137                 if (!ptr) {
138                         ret = -ENOMEM;
139                         goto fail_alloc2;
140                 }
141                 dev_set_uclass_plat(dev, ptr);
142         }
143
144         if (parent) {
145                 size = parent->driver->per_child_plat_auto;
146                 if (!size)
147                         size = parent->uclass->uc_drv->per_child_plat_auto;
148                 if (size) {
149                         dev_or_flags(dev, DM_FLAG_ALLOC_PARENT_PDATA);
150                         ptr = calloc(1, size);
151                         if (!ptr) {
152                                 ret = -ENOMEM;
153                                 goto fail_alloc3;
154                         }
155                         dev_set_parent_plat(dev, ptr);
156                 }
157                 /* put dev into parent's successor list */
158                 list_add_tail(&dev->sibling_node, &parent->child_head);
159         }
160
161         ret = uclass_bind_device(dev);
162         if (ret)
163                 goto fail_uclass_bind;
164
165         /* if we fail to bind we remove device from successors and free it */
166         if (drv->bind) {
167                 ret = drv->bind(dev);
168                 if (ret)
169                         goto fail_bind;
170         }
171         if (parent && parent->driver->child_post_bind) {
172                 ret = parent->driver->child_post_bind(dev);
173                 if (ret)
174                         goto fail_child_post_bind;
175         }
176         if (uc->uc_drv->post_bind) {
177                 ret = uc->uc_drv->post_bind(dev);
178                 if (ret)
179                         goto fail_uclass_post_bind;
180         }
181
182         if (parent)
183                 pr_debug("Bound device %s to %s\n", dev->name, parent->name);
184         if (devp)
185                 *devp = dev;
186
187         dev_or_flags(dev, DM_FLAG_BOUND);
188
189         return 0;
190
191 fail_uclass_post_bind:
192         /* There is no child unbind() method, so no clean-up required */
193 fail_child_post_bind:
194         if (CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)) {
195                 if (drv->unbind && drv->unbind(dev)) {
196                         dm_warn("unbind() method failed on dev '%s' on error path\n",
197                                 dev->name);
198                 }
199         }
200
201 fail_bind:
202         if (CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)) {
203                 if (uclass_unbind_device(dev)) {
204                         dm_warn("Failed to unbind dev '%s' on error path\n",
205                                 dev->name);
206                 }
207         }
208 fail_uclass_bind:
209         if (CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)) {
210                 list_del(&dev->sibling_node);
211                 if (dev_get_flags(dev) & DM_FLAG_ALLOC_PARENT_PDATA) {
212                         free(dev_get_parent_plat(dev));
213                         dev_set_parent_plat(dev, NULL);
214                 }
215         }
216 fail_alloc3:
217         if (CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)) {
218                 if (dev_get_flags(dev) & DM_FLAG_ALLOC_UCLASS_PDATA) {
219                         free(dev_get_uclass_plat(dev));
220                         dev_set_uclass_plat(dev, NULL);
221                 }
222         }
223 fail_alloc2:
224         if (CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)) {
225                 if (dev_get_flags(dev) & DM_FLAG_ALLOC_PDATA) {
226                         free(dev_get_plat(dev));
227                         dev_set_plat(dev, NULL);
228                 }
229         }
230 fail_alloc1:
231         devres_release_all(dev);
232
233         free(dev);
234
235         return ret;
236 }
237
238 int device_bind_with_driver_data(struct udevice *parent,
239                                  const struct driver *drv, const char *name,
240                                  ulong driver_data, ofnode node,
241                                  struct udevice **devp)
242 {
243         return device_bind_common(parent, drv, name, NULL, driver_data, node,
244                                   0, devp);
245 }
246
247 int device_bind(struct udevice *parent, const struct driver *drv,
248                 const char *name, void *plat, ofnode node,
249                 struct udevice **devp)
250 {
251         return device_bind_common(parent, drv, name, plat, 0, node, 0,
252                                   devp);
253 }
254
255 int device_bind_by_name(struct udevice *parent, bool pre_reloc_only,
256                         const struct driver_info *info, struct udevice **devp)
257 {
258         struct driver *drv;
259         uint plat_size = 0;
260         int ret;
261
262         drv = lists_driver_lookup_name(info->name);
263         if (!drv)
264                 return -ENOENT;
265         if (pre_reloc_only && !(drv->flags & DM_FLAG_PRE_RELOC))
266                 return -EPERM;
267
268 #if CONFIG_IS_ENABLED(OF_PLATDATA)
269         plat_size = info->plat_size;
270 #endif
271         ret = device_bind_common(parent, drv, info->name, (void *)info->plat, 0,
272                                  ofnode_null(), plat_size, devp);
273         if (ret)
274                 return ret;
275
276         return ret;
277 }
278
279 int device_reparent(struct udevice *dev, struct udevice *new_parent)
280 {
281         struct udevice *pos, *n;
282
283         assert(dev);
284         assert(new_parent);
285
286         list_for_each_entry_safe(pos, n, &dev->parent->child_head,
287                                  sibling_node) {
288                 if (pos->driver != dev->driver)
289                         continue;
290
291                 list_del(&dev->sibling_node);
292                 list_add_tail(&dev->sibling_node, &new_parent->child_head);
293                 dev->parent = new_parent;
294
295                 break;
296         }
297
298         return 0;
299 }
300
301 static void *alloc_priv(int size, uint flags)
302 {
303         void *priv;
304
305         if (flags & DM_FLAG_ALLOC_PRIV_DMA) {
306                 size = ROUND(size, ARCH_DMA_MINALIGN);
307                 priv = memalign(ARCH_DMA_MINALIGN, size);
308                 if (priv) {
309                         memset(priv, '\0', size);
310
311                         /*
312                          * Ensure that the zero bytes are flushed to memory.
313                          * This prevents problems if the driver uses this as
314                          * both an input and an output buffer:
315                          *
316                          * 1. Zeroes written to buffer (here) and sit in the
317                          *      cache
318                          * 2. Driver issues a read command to DMA
319                          * 3. CPU runs out of cache space and evicts some cache
320                          *      data in the buffer, writing zeroes to RAM from
321                          *      the memset() above
322                          * 4. DMA completes
323                          * 5. Buffer now has some DMA data and some zeroes
324                          * 6. Data being read is now incorrect
325                          *
326                          * To prevent this, ensure that the cache is clean
327                          * within this range at the start. The driver can then
328                          * use normal flush-after-write, invalidate-before-read
329                          * procedures.
330                          *
331                          * TODO(sjg@chromium.org): Drop this microblaze
332                          * exception.
333                          */
334 #ifndef CONFIG_MICROBLAZE
335                         flush_dcache_range((ulong)priv, (ulong)priv + size);
336 #endif
337                 }
338         } else {
339                 priv = calloc(1, size);
340         }
341
342         return priv;
343 }
344
345 /**
346  * device_alloc_priv() - Allocate priv/plat data required by the device
347  *
348  * @dev: Device to process
349  * Return: 0 if OK, -ENOMEM if out of memory
350  */
351 static int device_alloc_priv(struct udevice *dev)
352 {
353         const struct driver *drv;
354         void *ptr;
355         int size;
356
357         drv = dev->driver;
358         assert(drv);
359
360         /* Allocate private data if requested and not reentered */
361         if (drv->priv_auto && !dev_get_priv(dev)) {
362                 ptr = alloc_priv(drv->priv_auto, drv->flags);
363                 if (!ptr)
364                         return -ENOMEM;
365                 dev_set_priv(dev, ptr);
366         }
367
368         /* Allocate private data if requested and not reentered */
369         size = dev->uclass->uc_drv->per_device_auto;
370         if (size && !dev_get_uclass_priv(dev)) {
371                 ptr = alloc_priv(size, dev->uclass->uc_drv->flags);
372                 if (!ptr)
373                         return -ENOMEM;
374                 dev_set_uclass_priv(dev, ptr);
375         }
376
377         /* Allocate parent data for this child */
378         if (dev->parent) {
379                 size = dev->parent->driver->per_child_auto;
380                 if (!size)
381                         size = dev->parent->uclass->uc_drv->per_child_auto;
382                 if (size && !dev_get_parent_priv(dev)) {
383                         ptr = alloc_priv(size, drv->flags);
384                         if (!ptr)
385                                 return -ENOMEM;
386                         dev_set_parent_priv(dev, ptr);
387                 }
388         }
389
390         return 0;
391 }
392
393 int device_of_to_plat(struct udevice *dev)
394 {
395         const struct driver *drv;
396         int ret;
397
398         if (!dev)
399                 return -EINVAL;
400
401         if (dev_get_flags(dev) & DM_FLAG_PLATDATA_VALID)
402                 return 0;
403
404         /*
405          * This is not needed if binding is disabled, since data is allocated
406          * at build time.
407          */
408         if (!CONFIG_IS_ENABLED(OF_PLATDATA_NO_BIND)) {
409                 /* Ensure all parents have ofdata */
410                 if (dev->parent) {
411                         ret = device_of_to_plat(dev->parent);
412                         if (ret)
413                                 goto fail;
414
415                         /*
416                          * The device might have already been probed during
417                          * the call to device_probe() on its parent device
418                          * (e.g. PCI bridge devices). Test the flags again
419                          * so that we don't mess up the device.
420                          */
421                         if (dev_get_flags(dev) & DM_FLAG_PLATDATA_VALID)
422                                 return 0;
423                 }
424
425                 ret = device_alloc_priv(dev);
426                 if (ret)
427                         goto fail;
428         }
429         drv = dev->driver;
430         assert(drv);
431
432         if (drv->of_to_plat &&
433             (CONFIG_IS_ENABLED(OF_PLATDATA) || dev_has_ofnode(dev))) {
434                 ret = drv->of_to_plat(dev);
435                 if (ret)
436                         goto fail;
437         }
438
439         dev_or_flags(dev, DM_FLAG_PLATDATA_VALID);
440
441         return 0;
442 fail:
443         device_free(dev);
444
445         return ret;
446 }
447
448 /**
449  * device_get_dma_constraints() - Populate device's DMA constraints
450  *
451  * Gets a device's DMA constraints from firmware. This information is later
452  * used by drivers to translate physcal addresses to the device's bus address
453  * space. For now only device-tree is supported.
454  *
455  * @dev: Pointer to target device
456  * Return: 0 if OK or if no DMA constraints were found, error otherwise
457  */
458 static int device_get_dma_constraints(struct udevice *dev)
459 {
460         struct udevice *parent = dev->parent;
461         phys_addr_t cpu = 0;
462         dma_addr_t bus = 0;
463         u64 size = 0;
464         int ret;
465
466         if (!CONFIG_IS_ENABLED(DM_DMA) || !parent || !dev_has_ofnode(parent))
467                 return 0;
468
469         /*
470          * We start parsing for dma-ranges from the device's bus node. This is
471          * specially important on nested buses.
472          */
473         ret = dev_get_dma_range(parent, &cpu, &bus, &size);
474         /* Don't return an error if no 'dma-ranges' were found */
475         if (ret && ret != -ENOENT) {
476                 dm_warn("%s: failed to get DMA range, %d\n", dev->name, ret);
477                 return ret;
478         }
479
480         dev_set_dma_offset(dev, cpu - bus);
481
482         return 0;
483 }
484
485 int device_probe(struct udevice *dev)
486 {
487         const struct driver *drv;
488         int ret;
489
490         if (!dev)
491                 return -EINVAL;
492
493         if (dev_get_flags(dev) & DM_FLAG_ACTIVATED)
494                 return 0;
495
496         drv = dev->driver;
497         assert(drv);
498
499         ret = device_of_to_plat(dev);
500         if (ret)
501                 goto fail;
502
503         /* Ensure all parents are probed */
504         if (dev->parent) {
505                 ret = device_probe(dev->parent);
506                 if (ret)
507                         goto fail;
508
509                 /*
510                  * The device might have already been probed during
511                  * the call to device_probe() on its parent device
512                  * (e.g. PCI bridge devices). Test the flags again
513                  * so that we don't mess up the device.
514                  */
515                 if (dev_get_flags(dev) & DM_FLAG_ACTIVATED)
516                         return 0;
517         }
518
519         dev_or_flags(dev, DM_FLAG_ACTIVATED);
520
521         if (CONFIG_IS_ENABLED(POWER_DOMAIN) && dev->parent &&
522             (device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) &&
523             !(drv->flags & DM_FLAG_DEFAULT_PD_CTRL_OFF)) {
524                 ret = dev_power_domain_on(dev);
525                 if (ret)
526                         goto fail;
527         }
528
529         /*
530          * Process pinctrl for everything except the root device, and
531          * continue regardless of the result of pinctrl. Don't process pinctrl
532          * settings for pinctrl devices since the device may not yet be
533          * probed.
534          *
535          * This call can produce some non-intuitive results. For example, on an
536          * x86 device where dev is the main PCI bus, the pinctrl device may be
537          * child or grandchild of that bus, meaning that the child will be
538          * probed here. If the child happens to be the P2SB and the pinctrl
539          * device is a child of that, then both the pinctrl and P2SB will be
540          * probed by this call. This works because the DM_FLAG_ACTIVATED flag
541          * is set just above. However, the PCI bus' probe() method and
542          * associated uclass methods have not yet been called.
543          */
544         if (dev->parent && device_get_uclass_id(dev) != UCLASS_PINCTRL) {
545                 ret = pinctrl_select_state(dev, "default");
546                 if (ret && ret != -ENOSYS)
547                         log_debug("Device '%s' failed to configure default pinctrl: %d (%s)\n",
548                                   dev->name, ret, errno_str(ret));
549         }
550
551         if (CONFIG_IS_ENABLED(IOMMU) && dev->parent &&
552             (device_get_uclass_id(dev) != UCLASS_IOMMU)) {
553                 ret = dev_iommu_enable(dev);
554                 if (ret)
555                         goto fail;
556         }
557
558         ret = device_get_dma_constraints(dev);
559         if (ret)
560                 goto fail;
561
562         ret = uclass_pre_probe_device(dev);
563         if (ret)
564                 goto fail;
565
566         if (dev->parent && dev->parent->driver->child_pre_probe) {
567                 ret = dev->parent->driver->child_pre_probe(dev);
568                 if (ret)
569                         goto fail;
570         }
571
572         /* Only handle devices that have a valid ofnode */
573         if (dev_has_ofnode(dev)) {
574                 /*
575                  * Process 'assigned-{clocks/clock-parents/clock-rates}'
576                  * properties
577                  */
578                 ret = clk_set_defaults(dev, CLK_DEFAULTS_PRE);
579                 if (ret)
580                         goto fail;
581         }
582
583         if (drv->probe) {
584                 ret = drv->probe(dev);
585                 if (ret)
586                         goto fail;
587         }
588
589         ret = uclass_post_probe_device(dev);
590         if (ret)
591                 goto fail_uclass;
592
593         if (dev->parent && device_get_uclass_id(dev) == UCLASS_PINCTRL) {
594                 ret = pinctrl_select_state(dev, "default");
595                 if (ret && ret != -ENOSYS)
596                         log_debug("Device '%s' failed to configure default pinctrl: %d (%s)\n",
597                                   dev->name, ret, errno_str(ret));
598         }
599
600         return 0;
601 fail_uclass:
602         if (device_remove(dev, DM_REMOVE_NORMAL)) {
603                 dm_warn("%s: Device '%s' failed to remove on error path\n",
604                         __func__, dev->name);
605         }
606 fail:
607         dev_bic_flags(dev, DM_FLAG_ACTIVATED);
608
609         device_free(dev);
610
611         return ret;
612 }
613
614 void *dev_get_plat(const struct udevice *dev)
615 {
616         if (!dev) {
617                 dm_warn("%s: null device\n", __func__);
618                 return NULL;
619         }
620
621         return dm_priv_to_rw(dev->plat_);
622 }
623
624 void *dev_get_parent_plat(const struct udevice *dev)
625 {
626         if (!dev) {
627                 dm_warn("%s: null device\n", __func__);
628                 return NULL;
629         }
630
631         return dm_priv_to_rw(dev->parent_plat_);
632 }
633
634 void *dev_get_uclass_plat(const struct udevice *dev)
635 {
636         if (!dev) {
637                 dm_warn("%s: null device\n", __func__);
638                 return NULL;
639         }
640
641         return dm_priv_to_rw(dev->uclass_plat_);
642 }
643
644 void *dev_get_priv(const struct udevice *dev)
645 {
646         if (!dev) {
647                 dm_warn("%s: null device\n", __func__);
648                 return NULL;
649         }
650
651         return dm_priv_to_rw(dev->priv_);
652 }
653
654 void *dev_get_uclass_priv(const struct udevice *dev)
655 {
656         if (!dev) {
657                 dm_warn("%s: null device\n", __func__);
658                 return NULL;
659         }
660
661         return dm_priv_to_rw(dev->uclass_priv_);
662 }
663
664 void *dev_get_parent_priv(const struct udevice *dev)
665 {
666         if (!dev) {
667                 dm_warn("%s: null device\n", __func__);
668                 return NULL;
669         }
670
671         return dm_priv_to_rw(dev->parent_priv_);
672 }
673
674 static int device_get_device_tail(struct udevice *dev, int ret,
675                                   struct udevice **devp)
676 {
677         if (ret)
678                 return ret;
679
680         ret = device_probe(dev);
681         if (ret)
682                 return ret;
683
684         *devp = dev;
685
686         return 0;
687 }
688
689 #if CONFIG_IS_ENABLED(OF_REAL)
690 /**
691  * device_find_by_ofnode() - Return device associated with given ofnode
692  *
693  * The returned device is *not* activated.
694  *
695  * @node: The ofnode for which a associated device should be looked up
696  * @devp: Pointer to structure to hold the found device
697  * Return: 0 if OK, -ve on error
698  */
699 static int device_find_by_ofnode(ofnode node, struct udevice **devp)
700 {
701         struct uclass *uc;
702         struct udevice *dev;
703         int ret;
704
705         list_for_each_entry(uc, gd->uclass_root, sibling_node) {
706                 ret = uclass_find_device_by_ofnode(uc->uc_drv->id, node,
707                                                    &dev);
708                 if (!ret || dev) {
709                         *devp = dev;
710                         return 0;
711                 }
712         }
713
714         return -ENODEV;
715 }
716 #endif
717
718 int device_get_child(const struct udevice *parent, int index,
719                      struct udevice **devp)
720 {
721         struct udevice *dev;
722
723         list_for_each_entry(dev, &parent->child_head, sibling_node) {
724                 if (!index--)
725                         return device_get_device_tail(dev, 0, devp);
726         }
727
728         return -ENODEV;
729 }
730
731 int device_get_child_count(const struct udevice *parent)
732 {
733         struct udevice *dev;
734         int count = 0;
735
736         list_for_each_entry(dev, &parent->child_head, sibling_node)
737                 count++;
738
739         return count;
740 }
741
742 int device_get_decendent_count(const struct udevice *parent)
743 {
744         const struct udevice *dev;
745         int count = 1;
746
747         list_for_each_entry(dev, &parent->child_head, sibling_node)
748                 count += device_get_decendent_count(dev);
749
750         return count;
751 }
752
753 int device_find_child_by_seq(const struct udevice *parent, int seq,
754                              struct udevice **devp)
755 {
756         struct udevice *dev;
757
758         *devp = NULL;
759
760         list_for_each_entry(dev, &parent->child_head, sibling_node) {
761                 if (dev->seq_ == seq) {
762                         *devp = dev;
763                         return 0;
764                 }
765         }
766
767         return -ENODEV;
768 }
769
770 int device_get_child_by_seq(const struct udevice *parent, int seq,
771                             struct udevice **devp)
772 {
773         struct udevice *dev;
774         int ret;
775
776         *devp = NULL;
777         ret = device_find_child_by_seq(parent, seq, &dev);
778
779         return device_get_device_tail(dev, ret, devp);
780 }
781
782 int device_find_child_by_of_offset(const struct udevice *parent, int of_offset,
783                                    struct udevice **devp)
784 {
785         struct udevice *dev;
786
787         *devp = NULL;
788
789         list_for_each_entry(dev, &parent->child_head, sibling_node) {
790                 if (dev_of_offset(dev) == of_offset) {
791                         *devp = dev;
792                         return 0;
793                 }
794         }
795
796         return -ENODEV;
797 }
798
799 int device_get_child_by_of_offset(const struct udevice *parent, int node,
800                                   struct udevice **devp)
801 {
802         struct udevice *dev;
803         int ret;
804
805         *devp = NULL;
806         ret = device_find_child_by_of_offset(parent, node, &dev);
807         return device_get_device_tail(dev, ret, devp);
808 }
809
810 static struct udevice *_device_find_global_by_ofnode(struct udevice *parent,
811                                                      ofnode ofnode)
812 {
813         struct udevice *dev, *found;
814
815         if (ofnode_equal(dev_ofnode(parent), ofnode))
816                 return parent;
817
818         list_for_each_entry(dev, &parent->child_head, sibling_node) {
819                 found = _device_find_global_by_ofnode(dev, ofnode);
820                 if (found)
821                         return found;
822         }
823
824         return NULL;
825 }
826
827 int device_find_global_by_ofnode(ofnode ofnode, struct udevice **devp)
828 {
829         *devp = _device_find_global_by_ofnode(gd->dm_root, ofnode);
830
831         return *devp ? 0 : -ENOENT;
832 }
833
834 int device_get_global_by_ofnode(ofnode ofnode, struct udevice **devp)
835 {
836         struct udevice *dev;
837
838         dev = _device_find_global_by_ofnode(gd->dm_root, ofnode);
839         return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp);
840 }
841
842 #if CONFIG_IS_ENABLED(OF_PLATDATA)
843 int device_get_by_ofplat_idx(uint idx, struct udevice **devp)
844 {
845         struct udevice *dev;
846
847         if (CONFIG_IS_ENABLED(OF_PLATDATA_INST)) {
848                 struct udevice *base = ll_entry_start(struct udevice, udevice);
849
850                 dev = base + idx;
851         } else {
852                 struct driver_rt *drt = gd_dm_driver_rt() + idx;
853
854                 dev = drt->dev;
855         }
856         *devp = NULL;
857
858         return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp);
859 }
860 #endif
861
862 int device_find_first_child(const struct udevice *parent, struct udevice **devp)
863 {
864         if (list_empty(&parent->child_head)) {
865                 *devp = NULL;
866         } else {
867                 *devp = list_first_entry(&parent->child_head, struct udevice,
868                                          sibling_node);
869         }
870
871         return 0;
872 }
873
874 int device_find_next_child(struct udevice **devp)
875 {
876         struct udevice *dev = *devp;
877         struct udevice *parent = dev->parent;
878
879         if (list_is_last(&dev->sibling_node, &parent->child_head)) {
880                 *devp = NULL;
881         } else {
882                 *devp = list_entry(dev->sibling_node.next, struct udevice,
883                                    sibling_node);
884         }
885
886         return 0;
887 }
888
889 int device_find_first_inactive_child(const struct udevice *parent,
890                                      enum uclass_id uclass_id,
891                                      struct udevice **devp)
892 {
893         struct udevice *dev;
894
895         *devp = NULL;
896         list_for_each_entry(dev, &parent->child_head, sibling_node) {
897                 if (!device_active(dev) &&
898                     device_get_uclass_id(dev) == uclass_id) {
899                         *devp = dev;
900                         return 0;
901                 }
902         }
903
904         return -ENODEV;
905 }
906
907 int device_find_first_child_by_uclass(const struct udevice *parent,
908                                       enum uclass_id uclass_id,
909                                       struct udevice **devp)
910 {
911         struct udevice *dev;
912
913         *devp = NULL;
914         list_for_each_entry(dev, &parent->child_head, sibling_node) {
915                 if (device_get_uclass_id(dev) == uclass_id) {
916                         *devp = dev;
917                         return 0;
918                 }
919         }
920
921         return -ENODEV;
922 }
923
924 int device_find_child_by_namelen(const struct udevice *parent, const char *name,
925                                  int len, struct udevice **devp)
926 {
927         struct udevice *dev;
928
929         *devp = NULL;
930
931         list_for_each_entry(dev, &parent->child_head, sibling_node) {
932                 if (!strncmp(dev->name, name, len) &&
933                     strlen(dev->name) == len) {
934                         *devp = dev;
935                         return 0;
936                 }
937         }
938
939         return -ENODEV;
940 }
941
942 int device_find_child_by_name(const struct udevice *parent, const char *name,
943                               struct udevice **devp)
944 {
945         return device_find_child_by_namelen(parent, name, strlen(name), devp);
946 }
947
948 int device_first_child_err(struct udevice *parent, struct udevice **devp)
949 {
950         struct udevice *dev;
951
952         device_find_first_child(parent, &dev);
953         if (!dev)
954                 return -ENODEV;
955
956         return device_get_device_tail(dev, 0, devp);
957 }
958
959 int device_next_child_err(struct udevice **devp)
960 {
961         struct udevice *dev = *devp;
962
963         device_find_next_child(&dev);
964         if (!dev)
965                 return -ENODEV;
966
967         return device_get_device_tail(dev, 0, devp);
968 }
969
970 int device_first_child_ofdata_err(struct udevice *parent, struct udevice **devp)
971 {
972         struct udevice *dev;
973         int ret;
974
975         device_find_first_child(parent, &dev);
976         if (!dev)
977                 return -ENODEV;
978
979         ret = device_of_to_plat(dev);
980         if (ret)
981                 return ret;
982
983         *devp = dev;
984
985         return 0;
986 }
987
988 int device_next_child_ofdata_err(struct udevice **devp)
989 {
990         struct udevice *dev = *devp;
991         int ret;
992
993         device_find_next_child(&dev);
994         if (!dev)
995                 return -ENODEV;
996
997         ret = device_of_to_plat(dev);
998         if (ret)
999                 return ret;
1000
1001         *devp = dev;
1002
1003         return 0;
1004 }
1005
1006 struct udevice *dev_get_parent(const struct udevice *child)
1007 {
1008         return child->parent;
1009 }
1010
1011 ulong dev_get_driver_data(const struct udevice *dev)
1012 {
1013         return dev->driver_data;
1014 }
1015
1016 const void *dev_get_driver_ops(const struct udevice *dev)
1017 {
1018         if (!dev || !dev->driver->ops)
1019                 return NULL;
1020
1021         return dev->driver->ops;
1022 }
1023
1024 enum uclass_id device_get_uclass_id(const struct udevice *dev)
1025 {
1026         return dev->uclass->uc_drv->id;
1027 }
1028
1029 const char *dev_get_uclass_name(const struct udevice *dev)
1030 {
1031         if (!dev)
1032                 return NULL;
1033
1034         return dev->uclass->uc_drv->name;
1035 }
1036
1037 bool device_has_children(const struct udevice *dev)
1038 {
1039         return !list_empty(&dev->child_head);
1040 }
1041
1042 bool device_has_active_children(const struct udevice *dev)
1043 {
1044         struct udevice *child;
1045
1046         for (device_find_first_child(dev, &child);
1047              child;
1048              device_find_next_child(&child)) {
1049                 if (device_active(child))
1050                         return true;
1051         }
1052
1053         return false;
1054 }
1055
1056 bool device_is_last_sibling(const struct udevice *dev)
1057 {
1058         struct udevice *parent = dev->parent;
1059
1060         if (!parent)
1061                 return false;
1062         return list_is_last(&dev->sibling_node, &parent->child_head);
1063 }
1064
1065 void device_set_name_alloced(struct udevice *dev)
1066 {
1067         dev_or_flags(dev, DM_FLAG_NAME_ALLOCED);
1068 }
1069
1070 int device_set_name(struct udevice *dev, const char *name)
1071 {
1072         name = strdup(name);
1073         if (!name)
1074                 return -ENOMEM;
1075         dev->name = name;
1076         device_set_name_alloced(dev);
1077
1078         return 0;
1079 }
1080
1081 void dev_set_priv(struct udevice *dev, void *priv)
1082 {
1083         dev->priv_ = priv;
1084 }
1085
1086 void dev_set_parent_priv(struct udevice *dev, void *parent_priv)
1087 {
1088         dev->parent_priv_ = parent_priv;
1089 }
1090
1091 void dev_set_uclass_priv(struct udevice *dev, void *uclass_priv)
1092 {
1093         dev->uclass_priv_ = uclass_priv;
1094 }
1095
1096 void dev_set_plat(struct udevice *dev, void *plat)
1097 {
1098         dev->plat_ = plat;
1099 }
1100
1101 void dev_set_parent_plat(struct udevice *dev, void *parent_plat)
1102 {
1103         dev->parent_plat_ = parent_plat;
1104 }
1105
1106 void dev_set_uclass_plat(struct udevice *dev, void *uclass_plat)
1107 {
1108         dev->uclass_plat_ = uclass_plat;
1109 }
1110
1111 #if CONFIG_IS_ENABLED(OF_REAL)
1112 bool device_is_compatible(const struct udevice *dev, const char *compat)
1113 {
1114         return ofnode_device_is_compatible(dev_ofnode(dev), compat);
1115 }
1116
1117 bool of_machine_is_compatible(const char *compat)
1118 {
1119         const void *fdt = gd->fdt_blob;
1120
1121         return !fdt_node_check_compatible(fdt, 0, compat);
1122 }
1123
1124 int dev_disable_by_path(const char *path)
1125 {
1126         struct uclass *uc;
1127         ofnode node = ofnode_path(path);
1128         struct udevice *dev;
1129         int ret = 1;
1130
1131         if (!of_live_active())
1132                 return -ENOSYS;
1133
1134         list_for_each_entry(uc, gd->uclass_root, sibling_node) {
1135                 ret = uclass_find_device_by_ofnode(uc->uc_drv->id, node, &dev);
1136                 if (!ret)
1137                         break;
1138         }
1139
1140         if (ret)
1141                 return ret;
1142
1143         ret = device_remove(dev, DM_REMOVE_NORMAL);
1144         if (ret)
1145                 return ret;
1146
1147         ret = device_unbind(dev);
1148         if (ret)
1149                 return ret;
1150
1151         return ofnode_set_enabled(node, false);
1152 }
1153
1154 int dev_enable_by_path(const char *path)
1155 {
1156         ofnode node = ofnode_path(path);
1157         ofnode pnode = ofnode_get_parent(node);
1158         struct udevice *parent;
1159         int ret = 1;
1160
1161         if (!of_live_active())
1162                 return -ENOSYS;
1163
1164         ret = device_find_by_ofnode(pnode, &parent);
1165         if (ret)
1166                 return ret;
1167
1168         ret = ofnode_set_enabled(node, true);
1169         if (ret)
1170                 return ret;
1171
1172         return lists_bind_fdt(parent, node, NULL, NULL, false);
1173 }
1174 #endif
1175
1176 #if CONFIG_IS_ENABLED(OF_PLATDATA_RT)
1177 static struct udevice_rt *dev_get_rt(const struct udevice *dev)
1178 {
1179         struct udevice *base = ll_entry_start(struct udevice, udevice);
1180         int idx = dev - base;
1181
1182         struct udevice_rt *urt = gd_dm_udevice_rt() + idx;
1183
1184         return urt;
1185 }
1186
1187 u32 dev_get_flags(const struct udevice *dev)
1188 {
1189         const struct udevice_rt *urt = dev_get_rt(dev);
1190
1191         return urt->flags_;
1192 }
1193
1194 void dev_or_flags(const struct udevice *dev, u32 or)
1195 {
1196         struct udevice_rt *urt = dev_get_rt(dev);
1197
1198         urt->flags_ |= or;
1199 }
1200
1201 void dev_bic_flags(const struct udevice *dev, u32 bic)
1202 {
1203         struct udevice_rt *urt = dev_get_rt(dev);
1204
1205         urt->flags_ &= ~bic;
1206 }
1207 #endif /* OF_PLATDATA_RT */