.. |struct dev_pm_domain| replace:: :c:type:`struct dev_pm_domain <dev_pm_domain>`
.. |struct generic_pm_domain| replace:: :c:type:`struct generic_pm_domain <generic_pm_domain>`

============
Device links
============

By default, the driver core only enforces dependencies between devices
that are borne out of a parent/child relationship within the device
hierarchy: When suspending, resuming or shutting down the system, devices
are ordered based on this relationship, i.e. children are always suspended
before their parent, and the parent is always resumed before its children.

Sometimes there is a need to represent device dependencies beyond the
mere parent/child relationship, e.g. between siblings, and have the
driver core automatically take care of them.

Secondly, the driver core by default does not enforce any driver presence
dependencies, i.e. that one device must be bound to a driver before
another one can probe or function correctly.

Often these two dependency types come together, so a device depends on
another one both with regards to driver presence *and* with regards to
suspend/resume and shutdown ordering.

Device links allow representation of such dependencies in the driver core.

In its standard form, a device link combines *both* dependency types:
It guarantees correct suspend/resume and shutdown ordering between a
"supplier" device and its "consumer" devices, and it guarantees driver
presence on the supplier.  The consumer devices are not probed before the
supplier is bound to a driver, and they're unbound before the supplier
is unbound.

When driver presence on the supplier is irrelevant and only correct
suspend/resume and shutdown ordering is needed, the device link may
simply be set up with the ``DL_FLAG_STATELESS`` flag.  In other words,
enforcing driver presence on the supplier is optional.

Another optional feature is runtime PM integration:  By setting the
``DL_FLAG_PM_RUNTIME`` flag on addition of the device link, the PM core
is instructed to runtime resume the supplier and keep it active
whenever and for as long as the consumer is runtime resumed.

Usage
=====

The earliest point in time when device links can be added is after
:c:func:`device_add()` has been called for the supplier and
:c:func:`device_initialize()` has been called for the consumer.

It is legal to add them later, but care must be taken that the system
remains in a consistent state:  E.g. a device link cannot be added in
the midst of a suspend/resume transition, so either commencement of
such a transition needs to be prevented with :c:func:`lock_system_sleep()`,
or the device link needs to be added from a function which is guaranteed
not to run in parallel to a suspend/resume transition, such as from a
device ``->probe`` callback or a boot-time PCI quirk.

Another example for an inconsistent state would be a device link that
represents a driver presence dependency, yet is added from the consumer's
``->probe`` callback while the supplier hasn't probed yet:  Had the driver
core known about the device link earlier, it wouldn't have probed the
consumer in the first place.  The onus is thus on the consumer to check
presence of the supplier after adding the link, and defer probing on
non-presence.

If a device link is added in the ``->probe`` callback of the supplier or
consumer driver, it is typically deleted in its ``->remove`` callback for
symmetry.  That way, if the driver is compiled as a module, the device
link is added on module load and orderly deleted on unload.  The same
restrictions that apply to device link addition (e.g. exclusion of a
parallel suspend/resume transition) apply equally to deletion.

Several flags may be specified on device link addition, two of which
have already been mentioned above:  ``DL_FLAG_STATELESS`` to express that no
driver presence dependency is needed (but only correct suspend/resume and
shutdown ordering) and ``DL_FLAG_PM_RUNTIME`` to express that runtime PM
integration is desired.

Two other flags are specifically targeted at use cases where the device
link is added from the consumer's ``->probe`` callback:  ``DL_FLAG_RPM_ACTIVE``
can be specified to runtime resume the supplier upon addition of the
device link.  ``DL_FLAG_AUTOREMOVE`` causes the device link to be automatically
purged when the consumer fails to probe or later unbinds.  This obviates
the need to explicitly delete the link in the ``->remove`` callback or in
the error path of the ``->probe`` callback.

Limitations
===========

Driver authors should be aware that a driver presence dependency (i.e. when
``DL_FLAG_STATELESS`` is not specified on link addition) may cause probing of
the consumer to be deferred indefinitely.  This can become a problem if the
consumer is required to probe before a certain initcall level is reached.
Worse, if the supplier driver is blacklisted or missing, the consumer will
never be probed.

Sometimes drivers depend on optional resources.  They are able to operate
in a degraded mode (reduced feature set or performance) when those resources
are not present.  An example is an SPI controller that can use a DMA engine
or work in PIO mode.  The controller can determine presence of the optional
resources at probe time but on non-presence there is no way to know whether
they will become available in the near future (due to a supplier driver
probing) or never.  Consequently it cannot be determined whether to defer
probing or not.  It would be possible to notify drivers when optional
resources become available after probing, but it would come at a high cost
for drivers as switching between modes of operation at runtime based on the
availability of such resources would be much more complex than a mechanism
based on probe deferral.  In any case optional resources are beyond the
scope of device links.

Examples
========

* An MMU device exists alongside a busmaster device, both are in the same
  power domain.  The MMU implements DMA address translation for the busmaster
  device and shall be runtime resumed and kept active whenever and as long
  as the busmaster device is active.  The busmaster device's driver shall
  not bind before the MMU is bound.  To achieve this, a device link with
  runtime PM integration is added from the busmaster device (consumer)
  to the MMU device (supplier).  The effect with regards to runtime PM
  is the same as if the MMU was the parent of the master device.

  The fact that both devices share the same power domain would normally
  suggest usage of a |struct dev_pm_domain| or |struct generic_pm_domain|,
  however these are not independent devices that happen to share a power
  switch, but rather the MMU device serves the busmaster device and is
  useless without it.  A device link creates a synthetic hierarchical
  relationship between the devices and is thus more apt.

* A Thunderbolt host controller comprises a number of PCIe hotplug ports
  and an NHI device to manage the PCIe switch.  On resume from system sleep,
  the NHI device needs to re-establish PCI tunnels to attached devices
  before the hotplug ports can resume.  If the hotplug ports were children
  of the NHI, this resume order would automatically be enforced by the
  PM core, but unfortunately they're aunts.  The solution is to add
  device links from the hotplug ports (consumers) to the NHI device
  (supplier).  A driver presence dependency is not necessary for this
  use case.

* Discrete GPUs in hybrid graphics laptops often feature an HDA controller
  for HDMI/DP audio.  In the device hierarchy the HDA controller is a sibling
  of the VGA device, yet both share the same power domain and the HDA
  controller is only ever needed when an HDMI/DP display is attached to the
  VGA device.  A device link from the HDA controller (consumer) to the
  VGA device (supplier) aptly represents this relationship.

* ACPI allows definition of a device start order by way of _DEP objects.
  A classical example is when ACPI power management methods on one device
  are implemented in terms of I\ :sup:`2`\ C accesses and require a specific
  I\ :sup:`2`\ C controller to be present and functional for the power
  management of the device in question to work.

* In some SoCs a functional dependency exists from display, video codec and
  video processing IP cores on transparent memory access IP cores that handle
  burst access and compression/decompression.

Alternatives
============

* A |struct dev_pm_domain| can be used to override the bus,
  class or device type callbacks.  It is intended for devices sharing
  a single on/off switch, however it does not guarantee a specific
  suspend/resume ordering, this needs to be implemented separately.
  It also does not by itself track the runtime PM status of the involved
  devices and turn off the power switch only when all of them are runtime
  suspended.  Furthermore it cannot be used to enforce a specific shutdown
  ordering or a driver presence dependency.

* A |struct generic_pm_domain| is a lot more heavyweight than a
  device link and does not allow for shutdown ordering or driver presence
  dependencies.  It also cannot be used on ACPI systems.

Implementation
==============

The device hierarchy, which -- as the name implies -- is a tree,
becomes a directed acyclic graph once device links are added.

Ordering of these devices during suspend/resume is determined by the
dpm_list.  During shutdown it is determined by the devices_kset.  With
no device links present, the two lists are a flattened, one-dimensional
representations of the device tree such that a device is placed behind
all its ancestors.  That is achieved by traversing the ACPI namespace
or OpenFirmware device tree top-down and appending devices to the lists
as they are discovered.

Once device links are added, the lists need to satisfy the additional
constraint that a device is placed behind all its suppliers, recursively.
To ensure this, upon addition of the device link the consumer and the
entire sub-graph below it (all children and consumers of the consumer)
are moved to the end of the list.  (Call to :c:func:`device_reorder_to_tail()`
from :c:func:`device_link_add()`.)

To prevent introduction of dependency loops into the graph, it is
verified upon device link addition that the supplier is not dependent
on the consumer or any children or consumers of the consumer.
(Call to :c:func:`device_is_dependent()` from :c:func:`device_link_add()`.)
If that constraint is violated, :c:func:`device_link_add()` will return
``NULL`` and a ``WARNING`` will be logged.

Notably this also prevents the addition of a device link from a parent
device to a child.  However the converse is allowed, i.e. a device link
from a child to a parent.  Since the driver core already guarantees
correct suspend/resume and shutdown ordering between parent and child,
such a device link only makes sense if a driver presence dependency is
needed on top of that.  In this case driver authors should weigh
carefully if a device link is at all the right tool for the purpose.
A more suitable approach might be to simply use deferred probing or
add a device flag causing the parent driver to be probed before the
child one.

State machine
=============

.. kernel-doc:: include/linux/device.h
   :functions: device_link_state

::

                 .=============================.
                 |                             |
                 v                             |
 DORMANT <=> AVAILABLE <=> CONSUMER_PROBE => ACTIVE
    ^                                          |
    |                                          |
    '============ SUPPLIER_UNBIND <============'

* The initial state of a device link is automatically determined by
  :c:func:`device_link_add()` based on the driver presence on the supplier
  and consumer.  If the link is created before any devices are probed, it
  is set to ``DL_STATE_DORMANT``.

* When a supplier device is bound to a driver, links to its consumers
  progress to ``DL_STATE_AVAILABLE``.
  (Call to :c:func:`device_links_driver_bound()` from
  :c:func:`driver_bound()`.)

* Before a consumer device is probed, presence of supplier drivers is
  verified by checking that links to suppliers are in ``DL_STATE_AVAILABLE``
  state.  The state of the links is updated to ``DL_STATE_CONSUMER_PROBE``.
  (Call to :c:func:`device_links_check_suppliers()` from
  :c:func:`really_probe()`.)
  This prevents the supplier from unbinding.
  (Call to :c:func:`wait_for_device_probe()` from
  :c:func:`device_links_unbind_consumers()`.)

* If the probe fails, links to suppliers revert back to ``DL_STATE_AVAILABLE``.
  (Call to :c:func:`device_links_no_driver()` from :c:func:`really_probe()`.)

* If the probe succeeds, links to suppliers progress to ``DL_STATE_ACTIVE``.
  (Call to :c:func:`device_links_driver_bound()` from :c:func:`driver_bound()`.)

* When the consumer's driver is later on removed, links to suppliers revert
  back to ``DL_STATE_AVAILABLE``.
  (Call to :c:func:`__device_links_no_driver()` from
  :c:func:`device_links_driver_cleanup()`, which in turn is called from
  :c:func:`__device_release_driver()`.)

* Before a supplier's driver is removed, links to consumers that are not
  bound to a driver are updated to ``DL_STATE_SUPPLIER_UNBIND``.
  (Call to :c:func:`device_links_busy()` from
  :c:func:`__device_release_driver()`.)
  This prevents the consumers from binding.
  (Call to :c:func:`device_links_check_suppliers()` from
  :c:func:`really_probe()`.)
  Consumers that are bound are freed from their driver; consumers that are
  probing are waited for until they are done.
  (Call to :c:func:`device_links_unbind_consumers()` from
  :c:func:`__device_release_driver()`.)
  Once all links to consumers are in ``DL_STATE_SUPPLIER_UNBIND`` state,
  the supplier driver is released and the links revert to ``DL_STATE_DORMANT``.
  (Call to :c:func:`device_links_driver_cleanup()` from
  :c:func:`__device_release_driver()`.)

API
===

.. kernel-doc:: drivers/base/core.c
   :functions: device_link_add device_link_del
