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

