aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrant Likely <grant.likely@secretlab.ca>2011-01-31 02:09:58 -0500
committerGrant Likely <grant.likely@secretlab.ca>2011-01-31 15:18:33 -0500
commit9830fcd6f6a4781d8b46d2b35c13b39f30915c63 (patch)
treea27be74182dc984678bcbb1668105adaf5a6efb0
parentcf4e5c6e8d2b87ae8e61168a7dc860d68c578745 (diff)
dt: add documentation of ARM dt boot interface
v3: added details to Documentation/arm/Booting Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
-rw-r--r--Documentation/arm/Booting33
-rw-r--r--Documentation/devicetree/booting-without-of.txt40
2 files changed, 69 insertions, 4 deletions
diff --git a/Documentation/arm/Booting b/Documentation/arm/Booting
index 76850295af8f..4e686a2ed91e 100644
--- a/Documentation/arm/Booting
+++ b/Documentation/arm/Booting
@@ -65,13 +65,19 @@ looks at the connected hardware is beyond the scope of this document.
65The boot loader must ultimately be able to provide a MACH_TYPE_xxx 65The boot loader must ultimately be able to provide a MACH_TYPE_xxx
66value to the kernel. (see linux/arch/arm/tools/mach-types). 66value to the kernel. (see linux/arch/arm/tools/mach-types).
67 67
68 684. Setup boot data
694. Setup the kernel tagged list 69------------------
70-------------------------------
71 70
72Existing boot loaders: OPTIONAL, HIGHLY RECOMMENDED 71Existing boot loaders: OPTIONAL, HIGHLY RECOMMENDED
73New boot loaders: MANDATORY 72New boot loaders: MANDATORY
74 73
74The boot loader must provide either a tagged list or a dtb image for
75passing configuration data to the kernel. The physical address of the
76boot data is passed to the kernel in register r2.
77
784a. Setup the kernel tagged list
79--------------------------------
80
75The boot loader must create and initialise the kernel tagged list. 81The boot loader must create and initialise the kernel tagged list.
76A valid tagged list starts with ATAG_CORE and ends with ATAG_NONE. 82A valid tagged list starts with ATAG_CORE and ends with ATAG_NONE.
77The ATAG_CORE tag may or may not be empty. An empty ATAG_CORE tag 83The ATAG_CORE tag may or may not be empty. An empty ATAG_CORE tag
@@ -101,6 +107,24 @@ The tagged list must be placed in a region of memory where neither
101the kernel decompressor nor initrd 'bootp' program will overwrite 107the kernel decompressor nor initrd 'bootp' program will overwrite
102it. The recommended placement is in the first 16KiB of RAM. 108it. The recommended placement is in the first 16KiB of RAM.
103 109
1104b. Setup the device tree
111-------------------------
112
113The boot loader must load a device tree image (dtb) into system ram
114at a 64bit aligned address and initialize it with the boot data. The
115dtb format is documented in Documentation/devicetree/booting-without-of.txt.
116The kernel will look for the dtb magic value of 0xd00dfeed at the dtb
117physical address to determine if a dtb has been passed instead of a
118tagged list.
119
120The boot loader must pass at a minimum the size and location of the
121system memory, and the root filesystem location. The dtb must be
122placed in a region of memory where the kernel decompressor will not
123overwrite it. The recommended placement is in the first 16KiB of RAM
124with the caveat that it may not be located at physical address 0 since
125the kernel interprets a value of 0 in r2 to mean neither a tagged list
126nor a dtb were passed.
127
1045. Calling the kernel image 1285. Calling the kernel image
105--------------------------- 129---------------------------
106 130
@@ -125,7 +149,8 @@ In either case, the following conditions must be met:
125- CPU register settings 149- CPU register settings
126 r0 = 0, 150 r0 = 0,
127 r1 = machine type number discovered in (3) above. 151 r1 = machine type number discovered in (3) above.
128 r2 = physical address of tagged list in system RAM. 152 r2 = physical address of tagged list in system RAM, or
153 physical address of device tree block (dtb) in system RAM
129 154
130- CPU mode 155- CPU mode
131 All forms of interrupts must be disabled (IRQs and FIQs) 156 All forms of interrupts must be disabled (IRQs and FIQs)
diff --git a/Documentation/devicetree/booting-without-of.txt b/Documentation/devicetree/booting-without-of.txt
index 28b1c9d3d351..9381a1481027 100644
--- a/Documentation/devicetree/booting-without-of.txt
+++ b/Documentation/devicetree/booting-without-of.txt
@@ -13,6 +13,7 @@ Table of Contents
13 13
14 I - Introduction 14 I - Introduction
15 1) Entry point for arch/powerpc 15 1) Entry point for arch/powerpc
16 2) Entry point for arch/arm
16 17
17 II - The DT block format 18 II - The DT block format
18 1) Header 19 1) Header
@@ -225,6 +226,45 @@ it with special cases.
225 cannot support both configurations with Book E and configurations 226 cannot support both configurations with Book E and configurations
226 with classic Powerpc architectures. 227 with classic Powerpc architectures.
227 228
2292) Entry point for arch/arm
230---------------------------
231
232 There is one single entry point to the kernel, at the start
233 of the kernel image. That entry point supports two calling
234 conventions. A summary of the interface is described here. A full
235 description of the boot requirements is documented in
236 Documentation/arm/Booting
237
238 a) ATAGS interface. Minimal information is passed from firmware
239 to the kernel with a tagged list of predefined parameters.
240
241 r0 : 0
242
243 r1 : Machine type number
244
245 r2 : Physical address of tagged list in system RAM
246
247 b) Entry with a flattened device-tree block. Firmware loads the
248 physical address of the flattened device tree block (dtb) into r2,
249 r1 is not used, but it is considered good practise to use a valid
250 machine number as described in Documentation/arm/Booting.
251
252 r0 : 0
253
254 r1 : Valid machine type number. When using a device tree,
255 a single machine type number will often be assigned to
256 represent a class or family of SoCs.
257
258 r2 : physical pointer to the device-tree block
259 (defined in chapter II) in RAM. Device tree can be located
260 anywhere in system RAM, but it should be aligned on a 32 bit
261 boundary.
262
263 The kernel will differentiate between ATAGS and device tree booting by
264 reading the memory pointed to by r1 and looking for either the flattened
265 device tree block magic value (0xd00dfeed) or the ATAG_CORE value at
266 offset 0x4 from r2 (0x54410001).
267
228 268
229II - The DT block format 269II - The DT block format
230======================== 270========================