* reduce impact of getting board description wrong (FDT stored as a separate image instead of statically linked into firmware). If initial release gets the board description wrong, then it is easily updated without a risky reflash of firmware.

+

−

* expressive format to describe related board variants without allocating new machine numbers or new ATAGs.

+

−

* Note: The FDT isn't a replacement to ATAGS, but does supplement them.

the operating system can reliably decode them. However, only a dozen or

+

−

so ATAGs are defined and is not expressive enough to describe the board

+

−

design. Using ATAGs essentially requires a separate machine number to

+

−

be allocated for each board variant, even if they are based on the same

+

−

design.

+

−

+

−

That being said, an ATAG is an ideal method for passing an FDT image to

+

−

the kernel in the same way an ATAG is used to pass the initrd address.

+

−

+

−

=== ACPI ===

+

−

Firmware providing the [http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface Advanced Configuration and Power Interface] exports a hardware description in the form of the Differentiated System Description Table (DSDT). ACPI is found on x86 compatible systems and has its roots in the original IBM PC BIOS.

+

−

+

−

=== UEFI ===

+

−

The [http://en.wikipedia.org/wiki/Extensible_Firmware_Interface Extensible Firmware Interface] is an interface specification for passing control from a platforms firmware to the operating system. It was designed by Intel as a replacement for the PC BIOS interface.

+

−

+

−

ARM holdings is a [http://www.uefi.org/join/list member] of the [http://www.uefi.org/home United EFI Forum]. It is conceivable that there will be an ARM implementation of UEFI.

+

−

+

−

=== Open Firmware ===

+

−

[http://en.wikipedia.org/wiki/Open_Firmware Open Firmware] is a firmware interface specification designed by Sun in the late 1980's, and ported to many architectures. It specifies a runtime OS client interface, an cross platform device interface ([http://www.openfirmware.info/Forth/FCode FCode]), a user interface, and the Device Tree layout for describing the machine.

+

−

+

−

FDT is to Open Firmware what DSDT is to ACPI. The FDT reuses Open Firmware's established device tree layout. In fact, Linux PowerPC support uses the same codebase to support both Open Firmware and FDT platforms.

+

−

+

−

=== Some Notes on the Competing Solutions ===

+

−

Most of the competing solutions listed above provided feature rich firmware interfaces including both machine description and runtime services. Conversely, the FDT is only a data structure and doesn't specify any firmware interface details. Board ports using the FDT are typically booted from simple firmware implementations like U-Boot and don't provide any form of runtime services.

+

−

+

−

A common design goal of the feature rich firmware interfaces is to provide an abstract boot interface that factors away the differences between different hardware platforms, at least enough for the OS to initialize its own native device drivers. The idea is to be able to boot 'old' OS images on 'new' hardware, like how a Linux LiveCD image doesn't have explicit knowledge of the hardware configuration, but relies on the information provided to it by firmware.

+

−

+

−

Typical design goals for embedded firmware is to a) boot the OS as quickly as possible, b) upgrade the OS image, and maybe c) provide some low level debug support during initial board bringup. Focus tends to shift away from firmware once the OS is bootable since the kernel drivers the hardware directly (doesn't depend on firmware runtime services). In fact, firmware updates are discouraged due to the risk of rendering a board unbootable. ACPI, UEFI and OpenFirmware solutions, while arguably 'better', often don't boot as fast, and are more complex than required by the embedded system. In this regard the FDT approach has the advantage due to its simplicity. ie. the FDT provides an equivalently expressive way to describe hardware, but it works with existing firmware and can be updated without reflashing firmware.