************************
Using U-Boot as Firmware
************************

U-boot can be configured to support the EBBR specification. This can be
enabled by enabling both `CONFIG_EFI_LOADER` and
`CONFIG_EFI_EBBR_2_0_CONFORMANCE`.

As UEFI Secure Boot is optional in EBBR, that has to be activated seperatly with
`CONFIG_EFI_SECURE_BOOT`

.. graphviz:: bootflow-uboot.dot

UEFI Secure Boot
================

CoreOS build system bundle all the needed public key for secure boot inside the
u-boot binary at buildtime. UEFI variables needed by secure boot are not allowed
to be changed at runtime.

Device tree handling
====================

As per the EBBR specification, the firmware is responsible to provide a
device tree to the kernel. Not that it's OK to export the device tree used by
U-Boot internally as it will be replaced by a propper device tree at a later
stage. This avoid the need to load the device tree from a boot partition.

Features to implement per machine
=================================

The u-boot provided by CoreOS should implement the following features for each
supported machine:

extension_board_scan
--------------------

The extension_board_scan function has to be implemented. This function should
return the list of add-ons board detected.

DT Fixup
--------

U-Boot can create, modify and remove node from the device tree dynamically
before starting the kernel. This can be used to pass dynamic information stored
inside a "board descriptor" eeprom or CPLD to the Kernel.
