#
# Copyright (c) 2011 The Chromium OS Authors.
#
# See file CREDITS for list of people who contributed to this
# project.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundatio; either version 2 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA
#

Device Tree Control in U-Boot
=============================

This feature provides for run-time configuration of U-Boot via a flat
device tree (fdt). U-Boot configuration has traditionally been done
using CONFIG options in the board config file. This feature aims to
make it possible for a single U-Boot binary to support multiple boards,
with the exact configuration of each board controlled by a flat device
tree (fdt). This is the approach recently taken by the ARM Linux kernel
and has been used by PowerPC for some time.

The fdt is a convenient vehicle for implementing run-time configuration
for three reasons. Firstly it is easy to use, being a simple text file.
It is extensible since it consists of nodes and properties in a nice
hierarchical format.

Finally, there is already excellent infrastructure for the fdt: a
compiler checks the text file and converts it to a compact binary
format, and a library is already available in U-Boot (libfdt) for
handling this format.

The dts directory contains a Makefile for building the device tree blob
and embedding it in your U-Boot image. This is useful since it allows
U-Boot to configure itself according to what it finds there. If you have
a number of similar boards with different peripherals, you can describe
the features of each board in the device tree file, and have a single
generic source base.

To enable this feature, add CONFIG_OF_CONTROL to your board config file.
It is currently supported on ARM, x86 and Microblaze - other architectures
will need to add code to their arch/xxx/lib/board.c file to locate the
FDT. Alternatively you can enable generic board support on your board
(with CONFIG_SYS_GENERIC_BOARD) if this is available (as it is for
PowerPC). For ARM, Tegra and Exynos5 have device trees available for
common devices.


What is a Flat Device Tree?
---------------------------

An fdt can be specified in source format as a text file. To read about
the fdt syntax, take a look at the specification here:

https://www.power.org/resources/downloads/Power_ePAPR_APPROVED_v1.0.pdf

You also might find this section of the Linux kernel documentation
useful: (access this in the Linux kernel source code)

	Documentation/devicetree/booting-without-of.txt

There is also a mailing list:

	http://lists.ozlabs.org/listinfo/devicetree-discuss

In case you are wondering, OF stands for Open Firmware.


Tools
-----

To use this feature you will need to get the device tree compiler here:

	git://jdl.com/software/dtc.git

For example:

	$ git clone git://jdl.com/software/dtc.git
	$ cd dtc
	$ make
	$ sudo make install

Then run the compiler (your version will vary):

	$ dtc -v
	Version: DTC 1.2.0-g2cb4b51f
	$ make tests
	$ cd tests
	$ ./run_tests.sh
	********** TEST SUMMARY
	*     Total testcases:	1371
	*                PASS:	1371
	*                FAIL:	0
	*   Bad configuration:	0
	* Strange test result:	0

You will also find a useful fdtdump utility for decoding a binary file, as
well as fdtget/fdtput for reading and writing properties in a binary file.


Where do I get an fdt file for my board?
----------------------------------------

You may find that the Linux kernel has a suitable file. Look in the
kernel source in arch/<arch>/boot/dts.

If not you might find other boards with suitable files that you can
modify to your needs. Look in the board directories for files with a
.dts extension.

Failing that, you could write one from scratch yourself!


Configuration
-------------

Use:

#define CONFIG_DEFAULT_DEVICE_TREE	"<name>"

to set the filename of the device tree source. Then put your device tree
file into

	board/<vendor>/dts/<name>.dts

This should include your CPU or SOC's device tree file, placed in
arch/<arch>/dts, and then make any adjustments required. The name of this
is CONFIG_ARCH_DEVICE_TREE.dts.

If CONFIG_OF_EMBED is defined, then it will be picked up and built into
the U-Boot image (including u-boot.bin).

If CONFIG_OF_SEPARATE is defined, then it will be built and placed in
a u-boot.dtb file alongside u-boot.bin. A common approach is then to
join the two:

	cat u-boot.bin u-boot.dtb >image.bin

and then flash image.bin onto your board.

If CONFIG_OF_HOSTFILE is defined, then it will be read from a file on
startup. This is only useful for sandbox. Use the -d flag to U-Boot to
specify the file to read.

You cannot use more than one of these options at the same time.

If you wish to put the fdt at a different address in memory, you can
define the "fdtcontroladdr" environment variable. This is the hex
address of the fdt binary blob, and will override either of the options.
Be aware that this environment variable is checked prior to relocation,
when only the compiled-in environment is available. Therefore it is not
possible to define this variable in the saved SPI/NAND flash
environment, for example (it will be ignored).

To use this, put something like this in your board header file:

#define CONFIG_EXTRA_ENV_SETTINGS	"fdtcontroladdr=10000\0"

Build:

After board configuration is done, fdt supported u-boot can be build in two ways:
1)  build the default dts which is defined from CONFIG_DEFAULT_DEVICE_TREE
    $ make
2)  build the user specified dts file
    $ make DEVICE_TREE=<dts-file-name>


Configuration Options
---------------------

A number of run-time configuration options are provided in the /config node
of the control device tree. You can access these using fdtdec_get_config_int(),
fdtdec_get_config_bool() and fdtdec_get_config_string().

Available options are:

force-bootstage-report
	If present, a boostage report will be printed even on a silent
	console. The console will be temporarily unsilenced for the report.
	Since the console can slow down boot, this permits accurate boot
	timing using a silent console, while still getting a report.

force-fthread-report
	Similar to force-bootstage-report, a report showing the
	runtime statistics of all the threads in the system will be
	printed, even on a silent console.  Since printing to the
	console can slow down a thread, this option allows accurate
	thread timing on a silent console, while still reporting
	statistics.

google,bad-wake-gpios
	If present, this GPIO will be placed in the machine params for the
	SPL's use.  When the SPL is waking up from sleep it will check the
	GPIO.  If the GPIO is not low then this is a "bad wakeup" and we
	should reboot the machine instead of waking from sleep.

	This is used on Chromebooks with an Exynos CPU in them and is part of
	the kernel/U-Boot protocol for keeping the TPM in a proper state.

hda-codec-beep-nid
	Indicates the NID of the HDA audio codec for the current machine.
	This can save having to search for it and perhaps finding the wrong
	one.

lazy-init
	An integer, if present and positive, U-Boot will defer initialization
	of some peripherals until absolutely necessary.

load-environment
	If 0, the environment is not loaded on boot. If 1 it is loaded.

	TODO(sjg@chromium.org): This would be better as a boolean property.

kernel-offset
	If present, it is the offset from the start of U-Boot to a kernel
	payload. U-Boot sets 'kernaddr' to the address of the payload. This
	is useful for bundling a kernel with U-Boot, e.g. using USB download.

malloc-len
	If present, this is the size of the malloc() pool to use in U-Boot.
	If absent, TOTAL_MALLOC_LEN is used.

rootdisk-offset
	If present, it is the offset from the start of U-Boot to a root
	filesystem payload. U-Boot sets 'rootaddr' to the address of the
	payload. This is useful for bundling a root filesystem with U-Boot,
	e.g. using USB download.

silent-console
	If present, the console is silenced by default on boot.

u-boot-offset
	Offset to load U-Boot from start of memory. Note that memory is
	normally SDRAM, but can be IRAN when EFS is used.

u-boot-offset,efs
	Same as u-boot-offset, but used when 'early-firmware-selection' is
	present in /chromeos-config.

samsung,bl1-offset
	For exynos, the offset from start of IRAM to load BL1 during
	initial boot

samsung,bl2-offset
	For exynos, the offset from start of IRAM to load BL2 during initial
	boot


Limitations
-----------

U-Boot is designed to build with a single architecture type and CPU
type. So for example it is not possible to build a single ARM binary
which runs on your AT91 and OMAP boards, relying on an fdt to configure
the various features. This is because you must select one of
the CPU families within arch/arm/cpu/arm926ejs (omap or at91) at build
time. Similarly you cannot build for multiple cpu types or
architectures.

That said the complexity reduction by using fdt to support variants of
boards which use the same SOC / CPU can be substantial.

It is important to understand that the fdt only selects options
available in the platform / drivers. It cannot add new drivers (yet). So
you must still have the CONFIG option to enable the driver. For example,
you need to define CONFIG_SYS_NS16550 to bring in the NS16550 driver,
but can use the fdt to specific the UART clock, peripheral address, etc.
In very broad terms, the CONFIG options in general control *what* driver
files are pulled in, and the fdt controls *how* those files work.

--
Simon Glass <sjg@chromium.org>
1-Sep-11
