.. SPDX-License-Identifier: GPL-2.0+
.. sectionauthor:: Simon Glass <sjg@chromium.org>

Design Details
==============

This README contains high-level information about driver model, a unified
way of declaring and accessing drivers in U-Boot. The original work was done
by:

   * Marek Vasut <marex@denx.de>
   * Pavel Herrmann <morpheus.ibis@gmail.com>
   * Viktor Křivák <viktor.krivak@gmail.com>
   * Tomas Hlavacek <tmshlvck@gmail.com>

This has been both simplified and extended into the current implementation
by:

   * Simon Glass <sjg@chromium.org>


Terminology
-----------

Uclass
  a group of devices which operate in the same way. A uclass provides
  a way of accessing individual devices within the group, but always
  using the same interface. For example a GPIO uclass provides
  operations for get/set value. An I2C uclass may have 10 I2C ports,
  4 with one driver, and 6 with another.

Driver
  some code which talks to a peripheral and presents a higher-level
  interface to it.

Device
  an instance of a driver, tied to a particular port or peripheral.


How to try it
-------------

Build U-Boot sandbox and run it::

   make sandbox_defconfig
   make
   ./u-boot -d u-boot.dtb

   (type 'reset' to exit U-Boot)


There is a uclass called 'demo'. This uclass handles
saying hello, and reporting its status. There are two drivers in this
uclass:

   - simple: Just prints a message for hello, doesn't implement status
   - shape: Prints shapes and reports number of characters printed as status

The demo class is pretty simple, but not trivial. The intention is that it
can be used for testing, so it will implement all driver model features and
provide good code coverage of them. It does have multiple drivers, it
handles parameter data and plat (data which tells the driver how
to operate on a particular platform) and it uses private driver data.

To try it, see the example session below::

   =>demo hello 1
   Hello '@' from 07981110: red 4
   =>demo status 2
   Status: 0
   =>demo hello 2
   g
   r@
   e@@
   e@@@
   n@@@@
   g@@@@@
   =>demo status 2
   Status: 21
   =>demo hello 4 ^
     y^^^
    e^^^^^
   l^^^^^^^
   l^^^^^^^
    o^^^^^
     w^^^
   =>demo status 4
   Status: 36
   =>


Running the tests
-----------------

The intent with driver model is that the core portion has 100% test coverage
in sandbox, and every uclass has its own test. As a move towards this, tests
are provided in test/dm. To run them, try::

   ./test/py/test.py --bd sandbox --build -k ut_dm -v

You should see something like this::

   (venv)$ ./test/py/test.py --bd sandbox --build -k ut_dm -v
   +make O=/root/u-boot/build-sandbox -s sandbox_defconfig
   +make O=/root/u-boot/build-sandbox -s -j8
   ============================= test session starts ==============================
   platform linux2 -- Python 2.7.5, pytest-2.9.0, py-1.4.31, pluggy-0.3.1 -- /root/u-boot/venv/bin/python
   cachedir: .cache
   rootdir: /root/u-boot, inifile:
   collected 199 items

   test/py/tests/test_ut.py::test_ut_dm_init PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_adc_bind] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_adc_multi_channel_conversion] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_adc_multi_channel_shot] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_adc_single_channel_conversion] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_adc_single_channel_shot] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_adc_supply] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_adc_wrong_channel_selection] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_autobind] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_autobind_uclass_pdata_alloc] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_autobind_uclass_pdata_valid] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_autoprobe] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_bus_child_post_bind] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_bus_child_post_bind_uclass] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_bus_child_pre_probe_uclass] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_bus_children] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_bus_children_funcs] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_bus_children_iterators] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_bus_parent_data] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_bus_parent_data_uclass] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_bus_parent_ops] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_bus_parent_platdata] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_bus_parent_platdata_uclass] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_children] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_clk_base] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_clk_periph] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_device_get_uclass_id] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_eth] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_eth_act] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_eth_alias] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_eth_prime] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_eth_rotate] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_fdt] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_fdt_offset] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_fdt_pre_reloc] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_fdt_uclass_seq] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_gpio] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_gpio_anon] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_gpio_copy] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_gpio_leak] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_gpio_phandles] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_gpio_requestf] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_i2c_bytewise] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_i2c_find] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_i2c_offset] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_i2c_offset_len] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_i2c_probe_empty] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_i2c_read_write] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_i2c_speed] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_leak] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_led_base] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_led_gpio] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_led_label] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_lifecycle] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_mmc_base] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_net_retry] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_operations] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_ordering] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_pci_base] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_pci_busnum] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_pci_swapcase] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_platdata] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_power_pmic_get] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_power_pmic_io] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_power_regulator_autoset] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_power_regulator_autoset_list] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_power_regulator_get] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_power_regulator_set_get_current] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_power_regulator_set_get_enable] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_power_regulator_set_get_mode] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_power_regulator_set_get_voltage] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_pre_reloc] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_ram_base] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_regmap_base] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_regmap_syscon] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_remoteproc_base] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_remove] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_reset_base] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_reset_walk] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_rtc_base] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_rtc_dual] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_rtc_reset] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_rtc_set_get] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_spi_find] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_spi_flash] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_spi_xfer] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_syscon_base] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_syscon_by_driver_data] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_timer_base] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_uclass] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_uclass_before_ready] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_uclass_devices_find] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_uclass_devices_find_by_name] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_uclass_devices_get] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_uclass_devices_get_by_name] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_usb_base] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_usb_flash] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_usb_keyb] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_usb_multi] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_usb_remove] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_usb_tree] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_usb_tree_remove] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_usb_tree_reorder] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_video_base] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_video_bmp] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_video_bmp_comp] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_video_chars] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_video_context] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_video_rotation1] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_video_rotation2] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_video_rotation3] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_video_text] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_video_truetype] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_video_truetype_bs] PASSED
   test/py/tests/test_ut.py::test_ut[ut_dm_video_truetype_scroll] PASSED

   ======================= 84 tests deselected by '-kut_dm' =======================
   ================== 115 passed, 84 deselected in 3.77 seconds ===================

What is going on?
-----------------

Let's start at the top. The demo command is in cmd/demo.c. It does
the usual command processing and then:

.. code-block:: c

	struct udevice *demo_dev;

	ret = uclass_get_device(UCLASS_DEMO, devnum, &demo_dev);

UCLASS_DEMO means the class of devices which implement 'demo'. Other
classes might be MMC, or GPIO, hashing or serial. The idea is that the
devices in the class all share a particular way of working. The class
presents a unified view of all these devices to U-Boot.

This function looks up a device for the demo uclass. Given a device
number we can find the device because all devices have registered with
the UCLASS_DEMO uclass.

The device is automatically activated ready for use by uclass_get_device().

Now that we have the device we can do things like:

.. code-block:: c

	return demo_hello(demo_dev, ch);

This function is in the demo uclass. It takes care of calling the 'hello'
method of the relevant driver. Bearing in mind that there are two drivers,
this particular device may use one or other of them.

The code for demo_hello() is in drivers/demo/demo-uclass.c:

.. code-block:: c

	int demo_hello(struct udevice *dev, int ch)
	{
		const struct demo_ops *ops = device_get_ops(dev);

		if (!ops->hello)
			return -ENOSYS;

		return ops->hello(dev, ch);
	}

As you can see it just calls the relevant driver method. One of these is
in drivers/demo/demo-simple.c:

.. code-block:: c

	static int simple_hello(struct udevice *dev, int ch)
	{
		const struct dm_demo_pdata *pdata = dev_get_plat(dev);

		printf("Hello from %08x: %s %d\n", map_to_sysmem(dev),
		       pdata->colour, pdata->sides);

		return 0;
	}


So that is a trip from top (command execution) to bottom (driver action)
but it leaves a lot of topics to address.


Declaring Drivers
-----------------

A driver declaration looks something like this (see
drivers/demo/demo-shape.c):

.. code-block:: c

	static const struct demo_ops shape_ops = {
		.hello = shape_hello,
		.status = shape_status,
	};

	U_BOOT_DRIVER(demo_shape_drv) = {
		.name	= "demo_shape_drv",
		.id	= UCLASS_DEMO,
		.ops	= &shape_ops,
		.priv_data_size = sizeof(struct shape_data),
	};


This driver has two methods (hello and status) and requires a bit of
private data (accessible through dev_get_priv(dev) once the driver has
been probed). It is a member of UCLASS_DEMO so will register itself
there.

In U_BOOT_DRIVER it is also possible to specify special methods for bind
and unbind, and these are called at appropriate times. For many drivers
it is hoped that only 'probe' and 'remove' will be needed.

The U_BOOT_DRIVER macro creates a data structure accessible from C,
so driver model can find the drivers that are available.

The methods a device can provide are documented in the device.h header.
Briefly, they are:

   * bind - make the driver model aware of a device (bind it to its driver)
   * unbind - make the driver model forget the device
   * of_to_plat - convert device tree data to plat - see later
   * probe - make a device ready for use
   * remove - remove a device so it cannot be used until probed again

The sequence to get a device to work is bind, of_to_plat (if using
device tree) and probe.


Platform Data
-------------

Note: platform data is the old way of doing things. It is
basically a C structure which is passed to drivers to tell them about
platform-specific settings like the address of its registers, bus
speed, etc. Device tree is now the preferred way of handling this.
Unless you have a good reason not to use device tree (the main one
being you need serial support in SPL and don't have enough SRAM for
the cut-down device tree and libfdt libraries) you should stay away
from platform data.

Platform data is like Linux platform data, if you are familiar with that.
It provides the board-specific information to start up a device.

Why is this information not just stored in the device driver itself? The
idea is that the device driver is generic, and can in principle operate on
any board that has that type of device. For example, with modern
highly-complex SoCs it is common for the IP to come from an IP vendor, and
therefore (for example) the MMC controller may be the same on chips from
different vendors. It makes no sense to write independent drivers for the
MMC controller on each vendor's SoC, when they are all almost the same.
Similarly, we may have 6 UARTs in an SoC, all of which are mostly the same,
but lie at different addresses in the address space.

Using the UART example, we have a single driver and it is instantiated 6
times by supplying 6 lots of platform data. Each lot of platform data
gives the driver name and a pointer to a structure containing information
about this instance - e.g. the address of the register space. It may be that
one of the UARTS supports RS-485 operation - this can be added as a flag in
the platform data, which is set for this one port and clear for the rest.

Think of your driver as a generic piece of code which knows how to talk to
a device, but needs to know where it is, any variant/option information and
so on. Platform data provides this link between the generic piece of code
and the specific way it is bound on a particular board.

Examples of platform data include:

   - The base address of the IP block's register space
   - Configuration options, like:
      - the SPI polarity and maximum speed for a SPI controller
      - the I2C speed to use for an I2C device
      - the number of GPIOs available in a GPIO device

Where does the platform data come from? It is either held in a structure
which is compiled into U-Boot, or it can be parsed from the Device Tree
(see 'Device Tree' below).

For an example of how it can be compiled in, see demo-pdata.c which
sets up a table of driver names and their associated platform data.
The data can be interpreted by the drivers however they like - it is
basically a communication scheme between the board-specific code and
the generic drivers, which are intended to work on any board.

Drivers can access their data via dev->info->plat. Here is
the declaration for the platform data, which would normally appear
in the board file.

.. code-block:: c

	static const struct dm_demo_pdata red_square = {
		.colour = "red",
		.sides = 4.
	};

	static const struct driver_info info[] = {
		{
			.name = "demo_shape_drv",
			.plat = &red_square,
		},
	};

	demo1 = driver_bind(root, &info[0]);


Device Tree
-----------

While plat is useful, a more flexible way of providing device data is
by using device tree. In U-Boot you should use this where possible. Avoid
sending patches which make use of the U_BOOT_DEVICE() macro unless strictly
necessary.

With device tree we replace the above code with the following device tree
fragment:

.. code-block:: c

	red-square {
		compatible = "demo-shape";
		colour = "red";
		sides = <4>;
	};

This means that instead of having lots of U_BOOT_DEVICE() declarations in
the board file, we put these in the device tree. This approach allows a lot
more generality, since the same board file can support many types of boards
(e,g. with the same SoC) just by using different device trees. An added
benefit is that the Linux device tree can be used, thus further simplifying
the task of board-bring up either for U-Boot or Linux devs (whoever gets to
the board first!).

The easiest way to make this work it to add a few members to the driver:

.. code-block:: c

	.plat_auto = sizeof(struct dm_test_pdata),
	.of_to_plat = testfdt_of_to_plat,

The 'auto' feature allowed space for the plat to be allocated
and zeroed before the driver's of_to_plat() method is called. The
of_to_plat() method, which the driver write supplies, should parse
the device tree node for this device and place it in dev->plat. Thus
when the probe method is called later (to set up the device ready for use)
the platform data will be present.

Note that both methods are optional. If you provide an of_to_plat
method then it will be called first (during activation). If you provide a
probe method it will be called next. See Driver Lifecycle below for more
details.

If you don't want to have the plat automatically allocated then you
can leave out plat_auto. In this case you can use malloc
in your of_to_plat (or probe) method to allocate the required memory,
and you should free it in the remove method.

The driver model tree is intended to mirror that of the device tree. The
root driver is at device tree offset 0 (the root node, '/'), and its
children are the children of the root node.

In order for a device tree to be valid, the content must be correct with
respect to either device tree specification
(https://www.devicetree.org/specifications/) or the device tree bindings that
are found in the doc/device-tree-bindings directory.  When not U-Boot specific
the bindings in this directory tend to come from the Linux Kernel.  As such
certain design decisions may have been made already for us in terms of how
specific devices are described and bound.  In most circumstances we wish to
retain compatibility without additional changes being made to the device tree
source files.

Declaring Uclasses
------------------

The demo uclass is declared like this:

.. code-block:: c

	UCLASS_DRIVER(demo) = {
		.id		= UCLASS_DEMO,
	};

It is also possible to specify special methods for probe, etc. The uclass
numbering comes from include/dm/uclass-id.h. To add a new uclass, add to the
end of the enum there, then declare your uclass as above.


Device Sequence Numbers
-----------------------

U-Boot numbers devices from 0 in many situations, such as in the command
line for I2C and SPI buses, and the device names for serial ports (serial0,
serial1, ...). Driver model supports this numbering and permits devices
to be locating by their 'sequence'. This numbering uniquely identifies a
device in its uclass, so no two devices within a particular uclass can have
the same sequence number.

Sequence numbers start from 0 but gaps are permitted. For example, a board
may have I2C buses 1, 4, 5 but no 0, 2 or 3. The choice of how devices are
numbered is up to a particular board, and may be set by the SoC in some
cases. While it might be tempting to automatically renumber the devices
where there are gaps in the sequence, this can lead to confusion and is
not the way that U-Boot works.

Each device can request a sequence number. If none is required then the
device will be automatically allocated the next available sequence number.

To specify the sequence number in the device tree an alias is typically
used. Make sure that the uclass has the DM_UC_FLAG_SEQ_ALIAS flag set.

.. code-block:: none

	aliases {
		serial2 = "/serial@22230000";
	};

This indicates that in the uclass called "serial", the named node
("/serial@22230000") will be given sequence number 2. Any command or driver
which requests serial device 2 will obtain this device.

More commonly you can use node references, which expand to the full path:

.. code-block:: none

	aliases {
		serial2 = &serial_2;
	};
	...
	serial_2: serial@22230000 {
	...
	};

The alias resolves to the same string in this case, but this version is
easier to read.

Device sequence numbers are resolved when a device is probed. Before then
the sequence number is only a request which may or may not be honoured,
depending on what other devices have been probed. However the numbering is
entirely under the control of the board author so a conflict is generally
an error.


Bus Drivers
-----------

A common use of driver model is to implement a bus, a device which provides
access to other devices. Example of buses include SPI and I2C. Typically
the bus provides some sort of transport or translation that makes it
possible to talk to the devices on the bus.

Driver model provides some useful features to help with implementing buses.
Firstly, a bus can request that its children store some 'parent data' which
can be used to keep track of child state. Secondly, the bus can define
methods which are called when a child is probed or removed. This is similar
to the methods the uclass driver provides. Thirdly, per-child platform data
can be provided to specify things like the child's address on the bus. This
persists across child probe()/remove() cycles.

For consistency and ease of implementation, the bus uclass can specify the
per-child platform data, so that it can be the same for all children of buses
in that uclass. There are also uclass methods which can be called when
children are bound and probed.

Here an explanation of how a bus fits with a uclass may be useful. Consider
a USB bus with several devices attached to it, each from a different (made
up) uclass::

   xhci_usb (UCLASS_USB)
      eth (UCLASS_ETH)
      camera (UCLASS_CAMERA)
      flash (UCLASS_FLASH_STORAGE)

Each of the devices is connected to a different address on the USB bus.
The bus device wants to store this address and some other information such
as the bus speed for each device.

To achieve this, the bus device can use dev->parent_plat in each of its
three children. This can be auto-allocated if the bus driver (or bus uclass)
has a non-zero value for per_child_plat_auto. If not, then
the bus device or uclass can allocate the space itself before the child
device is probed.

Also the bus driver can define the child_pre_probe() and child_post_remove()
methods to allow it to do some processing before the child is activated or
after it is deactivated.

Similarly the bus uclass can define the child_post_bind() method to obtain
the per-child platform data from the device tree and set it up for the child.
The bus uclass can also provide a child_pre_probe() method. Very often it is
the bus uclass that controls these features, since it avoids each driver
having to do the same processing. Of course the driver can still tweak and
override these activities.

Note that the information that controls this behaviour is in the bus's
driver, not the child's. In fact it is possible that child has no knowledge
that it is connected to a bus. The same child device may even be used on two
different bus types. As an example. the 'flash' device shown above may also
be connected on a SATA bus or standalone with no bus::

   xhci_usb (UCLASS_USB)
      flash (UCLASS_FLASH_STORAGE)  - parent data/methods defined by USB bus

   sata (UCLASS_AHCI)
      flash (UCLASS_FLASH_STORAGE)  - parent data/methods defined by SATA bus

   flash (UCLASS_FLASH_STORAGE)  - no parent data/methods (not on a bus)

Above you can see that the driver for xhci_usb/sata controls the child's
bus methods. In the third example the device is not on a bus, and therefore
will not have these methods at all. Consider the case where the flash
device defines child methods. These would be used for *its* children, and
would be quite separate from the methods defined by the driver for the bus
that the flash device is connetced to. The act of attaching a device to a
parent device which is a bus, causes the device to start behaving like a
bus device, regardless of its own views on the matter.

The uclass for the device can also contain data private to that uclass.
But note that each device on the bus may be a member of a different
uclass, and this data has nothing to do with the child data for each child
on the bus. It is the bus' uclass that controls the child with respect to
the bus.


Driver Lifecycle
----------------

Here are the stages that a device goes through in driver model. Note that all
methods mentioned here are optional - e.g. if there is no probe() method for
a device then it will not be called. A simple device may have very few
methods actually defined.

Bind stage
^^^^^^^^^^

U-Boot discovers devices using one of these two methods:

- Scan the U_BOOT_DEVICE() definitions. U-Boot looks up the name specified
  by each, to find the appropriate U_BOOT_DRIVER() definition. In this case,
  there is no path by which driver_data may be provided, but the U_BOOT_DEVICE()
  may provide plat.

- Scan through the device tree definitions. U-Boot looks at top-level
  nodes in the the device tree. It looks at the compatible string in each node
  and uses the of_match table of the U_BOOT_DRIVER() structure to find the
  right driver for each node. In this case, the of_match table may provide a
  driver_data value, but plat cannot be provided until later.

For each device that is discovered, U-Boot then calls device_bind() to create a
new device, initializes various core fields of the device object such as name,
uclass & driver, initializes any optional fields of the device object that are
applicable such as of_offset, driver_data & plat, and finally calls the
driver's bind() method if one is defined.

At this point all the devices are known, and bound to their drivers. There
is a 'struct udevice' allocated for all devices. However, nothing has been
activated (except for the root device). Each bound device that was created
from a U_BOOT_DEVICE() declaration will hold the plat pointer specified
in that declaration. For a bound device created from the device tree,
plat will be NULL, but of_offset will be the offset of the device tree
node that caused the device to be created. The uclass is set correctly for
the device.

The device's bind() method is permitted to perform simple actions, but
should not scan the device tree node, not initialise hardware, nor set up
structures or allocate memory. All of these tasks should be left for
the probe() method.

Note that compared to Linux, U-Boot's driver model has a separate step of
probe/remove which is independent of bind/unbind. This is partly because in
U-Boot it may be expensive to probe devices and we don't want to do it until
they are needed, or perhaps until after relocation.

Reading ofdata
^^^^^^^^^^^^^^

Most devices have data in the device tree which they can read to find out the
base address of hardware registers and parameters relating to driver
operation. This is called 'ofdata' (Open-Firmware data).

The device's of_to_plat() implemnents allocation and reading of
plat. A parent's ofdata is always read before a child.

The steps are:

   1. If priv_auto is non-zero, then the device-private space
   is allocated for the device and zeroed. It will be accessible as
   dev->priv. The driver can put anything it likes in there, but should use
   it for run-time information, not platform data (which should be static
   and known before the device is probed).

   2. If plat_auto is non-zero, then the platform data space
   is allocated. This is only useful for device tree operation, since
   otherwise you would have to specific the platform data in the
   U_BOOT_DEVICE() declaration. The space is allocated for the device and
   zeroed. It will be accessible as dev->plat.

   3. If the device's uclass specifies a non-zero per_device_auto,
   then this space is allocated and zeroed also. It is allocated for and
   stored in the device, but it is uclass data. owned by the uclass driver.
   It is possible for the device to access it.

   4. If the device's immediate parent specifies a per_child_auto
   then this space is allocated. This is intended for use by the parent
   device to keep track of things related to the child. For example a USB
   flash stick attached to a USB host controller would likely use this
   space. The controller can hold information about the USB state of each
   of its children.

   5. If the driver provides an of_to_plat() method, then this is
   called to convert the device tree data into platform data. This should
   do various calls like dev_read_u32(dev, ...) to access the node and store
   the resulting information into dev->plat. After this point, the device
   works the same way whether it was bound using a device tree node or
   U_BOOT_DEVICE() structure. In either case, the platform data is now stored
   in the plat structure. Typically you will use the
   plat_auto feature to specify the size of the platform data
   structure, and U-Boot will automatically allocate and zero it for you before
   entry to of_to_plat(). But if not, you can allocate it yourself in
   of_to_plat(). Note that it is preferable to do all the device tree
   decoding in of_to_plat() rather than in probe(). (Apart from the
   ugliness of mixing configuration and run-time data, one day it is possible
   that U-Boot will cache platform data for devices which are regularly
   de/activated).

   6. The device is marked 'plat valid'.

Note that ofdata reading is always done (for a child and all its parents)
before probing starts. Thus devices go through two distinct states when
probing: reading platform data and actually touching the hardware to bring
the device up.

Having probing separate from ofdata-reading helps deal with of-platdata, where
the probe() method is common to both DT/of-platdata operation, but the
of_to_plat() method is implemented differently.

Another case has come up where this separate is useful. Generation of ACPI
tables uses the of-platdata but does not want to probe the device. Probing
would cause U-Boot to violate one of its design principles, viz that it
should only probe devices that are used. For ACPI we want to generate a
table for each device, even if U-Boot does not use it. In fact it may not
even be possible to probe the device - e.g. an SD card which is not
present will cause an error on probe, yet we still must tell Linux about
the SD card connector in case it is used while Linux is running.

It is important that the of_to_plat() method does not actually probe
the device itself. However there are cases where other devices must be probed
in the of_to_plat() method. An example is where a device requires a
GPIO for it to operate. To select a GPIO obviously requires that the GPIO
device is probed. This is OK when used by common, core devices such as GPIO,
clock, interrupts, reset and the like.

If your device relies on its parent setting up a suitable address space, so
that dev_read_addr() works correctly, then make sure that the parent device
has its setup code in of_to_plat(). If it has it in the probe method,
then you cannot call dev_read_addr() from the child device's
of_to_plat() method. Move it to probe() instead. Buses like PCI can
fall afoul of this rule.

Activation/probe
^^^^^^^^^^^^^^^^

When a device needs to be used, U-Boot activates it, by first reading ofdata
as above and then following these steps (see device_probe()):

   1. All parent devices are probed. It is not possible to activate a device
   unless its predecessors (all the way up to the root device) are activated.
   This means (for example) that an I2C driver will require that its bus
   be activated.

   2. The device's sequence number is assigned, either the requested one
   (assuming no conflicts) or the next available one if there is a conflict
   or nothing particular is requested.

   4. The device's probe() method is called. This should do anything that
   is required by the device to get it going. This could include checking
   that the hardware is actually present, setting up clocks for the
   hardware and setting up hardware registers to initial values. The code
   in probe() can access:

      - platform data in dev->plat (for configuration)
      - private data in dev->priv (for run-time state)
      - uclass data in dev->uclass_priv (for things the uclass stores
        about this device)

   Note: If you don't use priv_auto then you will need to
   allocate the priv space here yourself. The same applies also to
   plat_auto. Remember to free them in the remove() method.

   5. The device is marked 'activated'

   10. The uclass's post_probe() method is called, if one exists. This may
   cause the uclass to do some housekeeping to record the device as
   activated and 'known' by the uclass.

Running stage
^^^^^^^^^^^^^

The device is now activated and can be used. From now until it is removed
all of the above structures are accessible. The device appears in the
uclass's list of devices (so if the device is in UCLASS_GPIO it will appear
as a device in the GPIO uclass). This is the 'running' state of the device.

Removal stage
^^^^^^^^^^^^^

When the device is no-longer required, you can call device_remove() to
remove it. This performs the probe steps in reverse:

   1. The uclass's pre_remove() method is called, if one exists. This may
   cause the uclass to do some housekeeping to record the device as
   deactivated and no-longer 'known' by the uclass.

   2. All the device's children are removed. It is not permitted to have
   an active child device with a non-active parent. This means that
   device_remove() is called for all the children recursively at this point.

   3. The device's remove() method is called. At this stage nothing has been
   deallocated so platform data, private data and the uclass data will all
   still be present. This is where the hardware can be shut down. It is
   intended that the device be completely inactive at this point, For U-Boot
   to be sure that no hardware is running, it should be enough to remove
   all devices.

   4. The device memory is freed (platform data, private data, uclass data,
   parent data).

   Note: Because the platform data for a U_BOOT_DEVICE() is defined with a
   static pointer, it is not de-allocated during the remove() method. For
   a device instantiated using the device tree data, the platform data will
   be dynamically allocated, and thus needs to be deallocated during the
   remove() method, either:

      - if the plat_auto is non-zero, the deallocation
        happens automatically within the driver model core; or

      - when plat_auto is 0, both the allocation (in probe()
        or preferably of_to_plat()) and the deallocation in remove()
        are the responsibility of the driver author.

   5. The device sequence number is set to -1, meaning that it no longer
   has an allocated sequence. If the device is later reactivated and that
   sequence number is still free, it may well receive the name sequence
   number again. But from this point, the sequence number previously used
   by this device will no longer exist (think of SPI bus 2 being removed
   and bus 2 is no longer available for use).

   6. The device is marked inactive. Note that it is still bound, so the
   device structure itself is not freed at this point. Should the device be
   activated again, then the cycle starts again at step 2 above.

Unbind stage
^^^^^^^^^^^^

The device is unbound. This is the step that actually destroys the device.
If a parent has children these will be destroyed first. After this point
the device does not exist and its memory has be deallocated.


Data Structures
---------------

Driver model uses a doubly-linked list as the basic data structure. Some
nodes have several lists running through them. Creating a more efficient
data structure might be worthwhile in some rare cases, once we understand
what the bottlenecks are.


Changes since v1
----------------

For the record, this implementation uses a very similar approach to the
original patches, but makes at least the following changes:

- Tried to aggressively remove boilerplate, so that for most drivers there
  is little or no 'driver model' code to write.
- Moved some data from code into data structure - e.g. store a pointer to
  the driver operations structure in the driver, rather than passing it
  to the driver bind function.
- Rename some structures to make them more similar to Linux (struct udevice
  instead of struct instance, struct plat, etc.)
- Change the name 'core' to 'uclass', meaning U-Boot class. It seems that
  this concept relates to a class of drivers (or a subsystem). We shouldn't
  use 'class' since it is a C++ reserved word, so U-Boot class (uclass) seems
  better than 'core'.
- Remove 'struct driver_instance' and just use a single 'struct udevice'.
  This removes a level of indirection that doesn't seem necessary.
- Built in device tree support, to avoid the need for plat
- Removed the concept of driver relocation, and just make it possible for
  the new driver (created after relocation) to access the old driver data.
  I feel that relocation is a very special case and will only apply to a few
  drivers, many of which can/will just re-init anyway. So the overhead of
  dealing with this might not be worth it.
- Implemented a GPIO system, trying to keep it simple


Pre-Relocation Support
----------------------

For pre-relocation we simply call the driver model init function. Only
drivers marked with DM_FLAG_PRE_RELOC or the device tree 'u-boot,dm-pre-reloc'
property are initialised prior to relocation. This helps to reduce the driver
model overhead. This flag applies to SPL and TPL as well, if device tree is
enabled (CONFIG_OF_CONTROL) there.

Note when device tree is enabled, the device tree 'u-boot,dm-pre-reloc'
property can provide better control granularity on which device is bound
before relocation. While with DM_FLAG_PRE_RELOC flag of the driver all
devices with the same driver are bound, which requires allocation a large
amount of memory. When device tree is not used, DM_FLAG_PRE_RELOC is the
only way for statically declared devices via U_BOOT_DEVICE() to be bound
prior to relocation.

It is possible to limit this to specific relocation steps, by using
the more specialized 'u-boot,dm-spl' and 'u-boot,dm-tpl' flags
in the device tree node. For U-Boot proper you can use 'u-boot,dm-pre-proper'
which means that it will be processed (and a driver bound) in U-Boot proper
prior to relocation, but will not be available in SPL or TPL.

To reduce the size of SPL and TPL, only the nodes with pre-relocation properties
('u-boot,dm-pre-reloc', 'u-boot,dm-spl' or 'u-boot,dm-tpl') are keept in their
device trees (see README.SPL for details); the remaining nodes are always bound.

Then post relocation we throw that away and re-init driver model again.
For drivers which require some sort of continuity between pre- and
post-relocation devices, we can provide access to the pre-relocation
device pointers, but this is not currently implemented (the root device
pointer is saved but not made available through the driver model API).


SPL Support
-----------

Driver model can operate in SPL. Its efficient implementation and small code
size provide for a small overhead which is acceptable for all but the most
constrained systems.

To enable driver model in SPL, define CONFIG_SPL_DM. You might want to
consider the following option also. See the main README for more details.

   - CONFIG_SYS_MALLOC_SIMPLE
   - CONFIG_DM_WARN
   - CONFIG_DM_DEVICE_REMOVE
   - CONFIG_DM_STDIO


Enabling Driver Model
---------------------

Driver model is being brought into U-Boot gradually. As each subsystems gets
support, a uclass is created and a CONFIG to enable use of driver model for
that subsystem.

For example CONFIG_DM_SERIAL enables driver model for serial. With that
defined, the old serial support is not enabled, and your serial driver must
conform to driver model. With that undefined, the old serial support is
enabled and driver model is not available for serial. This means that when
you convert a driver, you must either convert all its boards, or provide for
the driver to be compiled both with and without driver model (generally this
is not very hard).

See the main README for full details of the available driver model CONFIG
options.


Things to punt for later
------------------------

Uclasses are statically numbered at compile time. It would be possible to
change this to dynamic numbering, but then we would require some sort of
lookup service, perhaps searching by name. This is slightly less efficient
so has been left out for now. One small advantage of dynamic numbering might
be fewer merge conflicts in uclass-id.h.
