Features Download
From: Jeremy Kerr <jeremy.kerr-Z7WLFzj8eWMS+FvcfC7Uqw <at> public.gmane.org>
Subject: [PATCH 00/11] Device-tree support for ARM
Newsgroups: gmane.linux.drivers.devicetree
Date: Tuesday 22nd December 2009 10:54:56 UTC (over 8 years ago)
Hi all,

The following series of patches is an early prototype to add device tree
support to the ARM architecture.

If you're not familiar with device trees: a device tree is a data
structure describing the hardware that the kernel is booted on. On boot,
the bootloader can pass a 'device tree blob' to the kernel; the kernel
then parses the blob and extracts data used to initialise the machine.
Think ATAGS with a free-form structure and arbitrary property names and

For cases where we don't want to rely on the bootloader's device tree
blob[1] (maybe we have an updated one with fixes), we can supply our own
device tree, attached to the kernel and passed through a boot wrapper.

Device trees are currently used in the boot process for the powerpc,
sparc and microblaze architectures.

This work is aimed at reducing the effort required to port to a new
board. Some hardware changes to may not require a new kernel at all;
these may be described by a corresponding change to the device

We'd also hope to see an overall decrease in code required as drivers
can be made generic enough to support a set of compatible devices, with
the differences being represented in the device tree.

At this stage, I've just added a mechanism to probe a platform
(Versatile PB) using a device tree; this is just a proof of concept for
machine probe, the interesting stuff happens when we can add DT support
to drivers that the DT-enabled platforms use. Also todo is the boot
wrapper to enable us to embed an updated DT in a bootable image.

These patches are based on Grant Likely's test-devicetree repo[2], which
is an effort to merge the common device tree code between the powerpc,
sparc and microblaze architectures. I have a git tree[3] of these
patches up too, based on his tree.

The approach I've chosen for a boot interface is to add an ATAG that
points to a device tree blob. If this ATAG is found, we use the
device-tree based discovery. There are a couple of other options, but I
think this is the least-intrusive method of passing the DT to the
kernel, and will continue to work with non-DT bootloaders.

If you'd like to try the code out, I have a page[4] up that has
details of the kernel, a link to DT-enabled qemu sources and a sample
device tree for the versatile machine.

This is only an initial prototype, but I'd appreciate any comments,
feedback or review.



1: http://lkml.org/lkml/2009/5/27/446
2: http://git.secretlab.ca/?p=linux-2.6.git;a=shortlog;h=refs/heads/test-devicetree
3: http://kernel.ubuntu.com/git?p=jk/dt/linux-2.6.git;a=summary
4: https://wiki.ubuntu.com/KernelTeam/ARMDeviceTrees

Jeremy Kerr (11):
      arm: change command_line to cmd_line, and export it
      arm: use generic infrastructure for early params
      arm: export arm_add_memory
      arm-dt: Add ATAG_DEVTREE tag
      arm-dt: Add CONFIG_ARM_DEVTREE
      arm-dt: postpone machine detection until setup_arch with
      arm-dt: parse devtree pointer on boot
      arm-dt: parse memory info from DT
      arm-dt: probe for device-tree enabled platforms
      arm-dt: parse initrd from device tree
      arm/versatile: probe via device tree
CD: 3ms