diff options
| -rw-r--r-- | Documentation/arm/Booting | 33 | ||||
| -rw-r--r-- | Documentation/devicetree/booting-without-of.txt | 48 |
2 files changed, 73 insertions, 8 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. | |||
| 65 | The boot loader must ultimately be able to provide a MACH_TYPE_xxx | 65 | The boot loader must ultimately be able to provide a MACH_TYPE_xxx |
| 66 | value to the kernel. (see linux/arch/arm/tools/mach-types). | 66 | value to the kernel. (see linux/arch/arm/tools/mach-types). |
| 67 | 67 | ||
| 68 | 68 | 4. Setup boot data | |
| 69 | 4. Setup the kernel tagged list | 69 | ------------------ |
| 70 | ------------------------------- | ||
| 71 | 70 | ||
| 72 | Existing boot loaders: OPTIONAL, HIGHLY RECOMMENDED | 71 | Existing boot loaders: OPTIONAL, HIGHLY RECOMMENDED |
| 73 | New boot loaders: MANDATORY | 72 | New boot loaders: MANDATORY |
| 74 | 73 | ||
| 74 | The boot loader must provide either a tagged list or a dtb image for | ||
| 75 | passing configuration data to the kernel. The physical address of the | ||
| 76 | boot data is passed to the kernel in register r2. | ||
| 77 | |||
| 78 | 4a. Setup the kernel tagged list | ||
| 79 | -------------------------------- | ||
| 80 | |||
| 75 | The boot loader must create and initialise the kernel tagged list. | 81 | The boot loader must create and initialise the kernel tagged list. |
| 76 | A valid tagged list starts with ATAG_CORE and ends with ATAG_NONE. | 82 | A valid tagged list starts with ATAG_CORE and ends with ATAG_NONE. |
| 77 | The ATAG_CORE tag may or may not be empty. An empty ATAG_CORE tag | 83 | The 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 | |||
| 101 | the kernel decompressor nor initrd 'bootp' program will overwrite | 107 | the kernel decompressor nor initrd 'bootp' program will overwrite |
| 102 | it. The recommended placement is in the first 16KiB of RAM. | 108 | it. The recommended placement is in the first 16KiB of RAM. |
| 103 | 109 | ||
| 110 | 4b. Setup the device tree | ||
| 111 | ------------------------- | ||
| 112 | |||
| 113 | The boot loader must load a device tree image (dtb) into system ram | ||
| 114 | at a 64bit aligned address and initialize it with the boot data. The | ||
| 115 | dtb format is documented in Documentation/devicetree/booting-without-of.txt. | ||
| 116 | The kernel will look for the dtb magic value of 0xd00dfeed at the dtb | ||
| 117 | physical address to determine if a dtb has been passed instead of a | ||
| 118 | tagged list. | ||
| 119 | |||
| 120 | The boot loader must pass at a minimum the size and location of the | ||
| 121 | system memory, and the root filesystem location. The dtb must be | ||
| 122 | placed in a region of memory where the kernel decompressor will not | ||
| 123 | overwrite it. The recommended placement is in the first 16KiB of RAM | ||
| 124 | with the caveat that it may not be located at physical address 0 since | ||
| 125 | the kernel interprets a value of 0 in r2 to mean neither a tagged list | ||
| 126 | nor a dtb were passed. | ||
| 127 | |||
| 104 | 5. Calling the kernel image | 128 | 5. 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 50619a0720a8..7c1329de0596 100644 --- a/Documentation/devicetree/booting-without-of.txt +++ b/Documentation/devicetree/booting-without-of.txt | |||
| @@ -12,8 +12,9 @@ Table of Contents | |||
| 12 | ================= | 12 | ================= |
| 13 | 13 | ||
| 14 | I - Introduction | 14 | I - Introduction |
| 15 | 1) Entry point for arch/powerpc | 15 | 1) Entry point for arch/arm |
| 16 | 2) Entry point for arch/x86 | 16 | 2) Entry point for arch/powerpc |
| 17 | 3) Entry point for arch/x86 | ||
| 17 | 18 | ||
| 18 | II - The DT block format | 19 | II - The DT block format |
| 19 | 1) Header | 20 | 1) Header |
| @@ -148,7 +149,46 @@ upgrades without significantly impacting the kernel code or cluttering | |||
| 148 | it with special cases. | 149 | it with special cases. |
| 149 | 150 | ||
| 150 | 151 | ||
| 151 | 1) Entry point for arch/powerpc | 152 | 1) Entry point for arch/arm |
| 153 | --------------------------- | ||
| 154 | |||
| 155 | There is one single entry point to the kernel, at the start | ||
| 156 | of the kernel image. That entry point supports two calling | ||
| 157 | conventions. A summary of the interface is described here. A full | ||
| 158 | description of the boot requirements is documented in | ||
| 159 | Documentation/arm/Booting | ||
| 160 | |||
| 161 | a) ATAGS interface. Minimal information is passed from firmware | ||
| 162 | to the kernel with a tagged list of predefined parameters. | ||
| 163 | |||
| 164 | r0 : 0 | ||
| 165 | |||
| 166 | r1 : Machine type number | ||
| 167 | |||
| 168 | r2 : Physical address of tagged list in system RAM | ||
| 169 | |||
| 170 | b) Entry with a flattened device-tree block. Firmware loads the | ||
| 171 | physical address of the flattened device tree block (dtb) into r2, | ||
| 172 | r1 is not used, but it is considered good practise to use a valid | ||
| 173 | machine number as described in Documentation/arm/Booting. | ||
| 174 | |||
| 175 | r0 : 0 | ||
| 176 | |||
| 177 | r1 : Valid machine type number. When using a device tree, | ||
| 178 | a single machine type number will often be assigned to | ||
| 179 | represent a class or family of SoCs. | ||
| 180 | |||
| 181 | r2 : physical pointer to the device-tree block | ||
| 182 | (defined in chapter II) in RAM. Device tree can be located | ||
| 183 | anywhere in system RAM, but it should be aligned on a 64 bit | ||
| 184 | boundary. | ||
| 185 | |||
| 186 | The kernel will differentiate between ATAGS and device tree booting by | ||
| 187 | reading the memory pointed to by r2 and looking for either the flattened | ||
| 188 | device tree block magic value (0xd00dfeed) or the ATAG_CORE value at | ||
| 189 | offset 0x4 from r2 (0x54410001). | ||
| 190 | |||
| 191 | 2) Entry point for arch/powerpc | ||
| 152 | ------------------------------- | 192 | ------------------------------- |
| 153 | 193 | ||
| 154 | There is one single entry point to the kernel, at the start | 194 | There is one single entry point to the kernel, at the start |
| @@ -226,7 +266,7 @@ it with special cases. | |||
| 226 | cannot support both configurations with Book E and configurations | 266 | cannot support both configurations with Book E and configurations |
| 227 | with classic Powerpc architectures. | 267 | with classic Powerpc architectures. |
| 228 | 268 | ||
| 229 | 2) Entry point for arch/x86 | 269 | 3) Entry point for arch/x86 |
| 230 | ------------------------------- | 270 | ------------------------------- |
| 231 | 271 | ||
| 232 | There is one single 32bit entry point to the kernel at code32_start, | 272 | There is one single 32bit entry point to the kernel at code32_start, |
