"Das U-Boot" Source Tree

doc: Bring in the FIT overlay information

Bring this file into the documentation.

Signed-off-by: Simon Glass <sjg@chromium.org>

authored by

Simon Glass and committed by
Heinrich Schuchardt
6f6e8bb6 51de69cd

+228 -225
-225
doc/uImage.FIT/overlay-fdt-boot.txt
··· 1 - U-Boot FDT Overlay FIT usage 2 - ============================ 3 - 4 - Introduction 5 - ------------ 6 - In many cases it is desirable to have a single FIT image support a multitude 7 - of similar boards and their expansion options. The same kernel on DT enabled 8 - platforms can support this easily enough by providing a DT blob upon boot 9 - that matches the desired configuration. 10 - 11 - This document focuses on specifically using overlays as part of a FIT image. 12 - General information regarding overlays including its syntax and building it 13 - can be found in doc/README.fdt-overlays 14 - 15 - Configuration without overlays 16 - ------------------------------ 17 - 18 - Take a hypothetical board named 'foo' where there are different supported 19 - revisions, reva and revb. Assume that both board revisions can use add a bar 20 - add-on board, while only the revb board can use a baz add-on board. 21 - 22 - Without using overlays the configuration would be as follows for every case. 23 - 24 - /dts-v1/; 25 - / { 26 - images { 27 - kernel { 28 - data = /incbin/("./zImage"); 29 - type = "kernel"; 30 - arch = "arm"; 31 - os = "linux"; 32 - load = <0x82000000>; 33 - entry = <0x82000000>; 34 - }; 35 - fdt-1 { 36 - data = /incbin/("./foo-reva.dtb"); 37 - type = "flat_dt"; 38 - arch = "arm"; 39 - }; 40 - fdt-2 { 41 - data = /incbin/("./foo-revb.dtb"); 42 - type = "flat_dt"; 43 - arch = "arm"; 44 - }; 45 - fdt-3 { 46 - data = /incbin/("./foo-reva-bar.dtb"); 47 - type = "flat_dt"; 48 - arch = "arm"; 49 - }; 50 - fdt-4 { 51 - data = /incbin/("./foo-revb-bar.dtb"); 52 - type = "flat_dt"; 53 - arch = "arm"; 54 - }; 55 - fdt-5 { 56 - data = /incbin/("./foo-revb-baz.dtb"); 57 - type = "flat_dt"; 58 - arch = "arm"; 59 - }; 60 - fdt-6 { 61 - data = /incbin/("./foo-revb-bar-baz.dtb"); 62 - type = "flat_dt"; 63 - arch = "arm"; 64 - }; 65 - }; 66 - 67 - configurations { 68 - default = "foo-reva.dtb; 69 - foo-reva.dtb { 70 - kernel = "kernel"; 71 - fdt = "fdt-1"; 72 - }; 73 - foo-revb.dtb { 74 - kernel = "kernel"; 75 - fdt = "fdt-2"; 76 - }; 77 - foo-reva-bar.dtb { 78 - kernel = "kernel"; 79 - fdt = "fdt-3"; 80 - }; 81 - foo-revb-bar.dtb { 82 - kernel = "kernel"; 83 - fdt = "fdt-4"; 84 - }; 85 - foo-revb-baz.dtb { 86 - kernel = "kernel"; 87 - fdt = "fdt-5"; 88 - }; 89 - foo-revb-bar-baz.dtb { 90 - kernel = "kernel"; 91 - fdt = "fdt-6"; 92 - }; 93 - }; 94 - }; 95 - 96 - Note the blob needs to be compiled for each case and the combinatorial explosion of 97 - configurations. A typical device tree blob is in the low hunderds of kbytes so a 98 - multitude of configuration grows the image quite a bit. 99 - 100 - Booting this image is done by using 101 - 102 - # bootm <addr>#<config> 103 - 104 - Where config is one of: 105 - foo-reva.dtb, foo-revb.dtb, foo-reva-bar.dtb, foo-revb-bar.dtb, 106 - foo-revb-baz.dtb, foo-revb-bar-baz.dtb 107 - 108 - This selects the DTB to use when booting. 109 - 110 - Configuration using overlays 111 - ---------------------------- 112 - 113 - Device tree overlays can be applied to a base DT and result in the same blob 114 - being passed to the booting kernel. This saves on space and avoid the combinatorial 115 - explosion problem. 116 - 117 - /dts-v1/; 118 - / { 119 - images { 120 - kernel { 121 - data = /incbin/("./zImage"); 122 - type = "kernel"; 123 - arch = "arm"; 124 - os = "linux"; 125 - load = <0x82000000>; 126 - entry = <0x82000000>; 127 - }; 128 - fdt-1 { 129 - data = /incbin/("./foo.dtb"); 130 - type = "flat_dt"; 131 - arch = "arm"; 132 - load = <0x87f00000>; 133 - }; 134 - fdt-2 { 135 - data = /incbin/("./reva.dtbo"); 136 - type = "flat_dt"; 137 - arch = "arm"; 138 - load = <0x87fc0000>; 139 - }; 140 - fdt-3 { 141 - data = /incbin/("./revb.dtbo"); 142 - type = "flat_dt"; 143 - arch = "arm"; 144 - load = <0x87fc0000>; 145 - }; 146 - fdt-4 { 147 - data = /incbin/("./bar.dtbo"); 148 - type = "flat_dt"; 149 - arch = "arm"; 150 - load = <0x87fc0000>; 151 - }; 152 - fdt-5 { 153 - data = /incbin/("./baz.dtbo"); 154 - type = "flat_dt"; 155 - arch = "arm"; 156 - load = <0x87fc0000>; 157 - }; 158 - }; 159 - 160 - configurations { 161 - default = "foo-reva.dtb; 162 - foo-reva.dtb { 163 - kernel = "kernel"; 164 - fdt = "fdt-1", "fdt-2"; 165 - }; 166 - foo-revb.dtb { 167 - kernel = "kernel"; 168 - fdt = "fdt-1", "fdt-3"; 169 - }; 170 - foo-reva-bar.dtb { 171 - kernel = "kernel"; 172 - fdt = "fdt-1", "fdt-2", "fdt-4"; 173 - }; 174 - foo-revb-bar.dtb { 175 - kernel = "kernel"; 176 - fdt = "fdt-1", "fdt-3", "fdt-4"; 177 - }; 178 - foo-revb-baz.dtb { 179 - kernel = "kernel"; 180 - fdt = "fdt-1", "fdt-3", "fdt-5"; 181 - }; 182 - foo-revb-bar-baz.dtb { 183 - kernel = "kernel"; 184 - fdt = "fdt-1", "fdt-3", "fdt-4", "fdt-5"; 185 - }; 186 - bar { 187 - fdt = "fdt-4"; 188 - }; 189 - baz { 190 - fdt = "fdt-5"; 191 - }; 192 - }; 193 - }; 194 - 195 - Booting this image is exactly the same as the non-overlay example. 196 - u-boot will retrieve the base blob and apply the overlays in sequence as 197 - they are declared in the configuration. 198 - 199 - Note the minimum amount of different DT blobs, as well as the requirement for 200 - the DT blobs to have a load address; the overlay application requires the blobs 201 - to be writeable. 202 - 203 - Configuration using overlays and feature selection 204 - -------------------------------------------------- 205 - 206 - Although the configuration in the previous section works is a bit inflexible 207 - since it requires all possible configuration options to be laid out before 208 - hand in the FIT image. For the add-on boards the extra config selection method 209 - might make sense. 210 - 211 - Note the two bar & baz configuration nodes. To boot a reva board with 212 - the bar add-on board enabled simply use: 213 - 214 - # bootm <addr>#foo-reva.dtb#bar 215 - 216 - While booting a revb with bar and baz is as follows: 217 - 218 - # bootm <addr>#foo-revb.dtb#bar#baz 219 - 220 - The limitation for a feature selection configuration node is that a single 221 - fdt option is currently supported. 222 - 223 - Pantelis Antoniou 224 - pantelis.antoniou@konsulko.com 225 - 12/6/2017
+1
doc/usage/fit/index.rst
··· 16 16 signature 17 17 verified-boot 18 18 beaglebone_vboot 19 + overlay-fdt-boot
+227
doc/usage/fit/overlay-fdt-boot.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0+ 2 + 3 + U-Boot FDT Overlay FIT usage 4 + ============================ 5 + 6 + Introduction 7 + ------------ 8 + 9 + In many cases it is desirable to have a single FIT image support a multitude 10 + of similar boards and their expansion options. The same kernel on DT enabled 11 + platforms can support this easily enough by providing a DT blob upon boot 12 + that matches the desired configuration. 13 + 14 + This document focuses on specifically using overlays as part of a FIT image. 15 + General information regarding overlays including its syntax and building it 16 + can be found in doc/README.fdt-overlays 17 + 18 + Configuration without overlays 19 + ------------------------------ 20 + 21 + Take a hypothetical board named 'foo' where there are different supported 22 + revisions, reva and revb. Assume that both board revisions can use add a bar 23 + add-on board, while only the revb board can use a baz add-on board. 24 + 25 + Without using overlays the configuration would be as follows for every case:: 26 + 27 + /dts-v1/; 28 + / { 29 + images { 30 + kernel { 31 + data = /incbin/("./zImage"); 32 + type = "kernel"; 33 + arch = "arm"; 34 + os = "linux"; 35 + load = <0x82000000>; 36 + entry = <0x82000000>; 37 + }; 38 + fdt-1 { 39 + data = /incbin/("./foo-reva.dtb"); 40 + type = "flat_dt"; 41 + arch = "arm"; 42 + }; 43 + fdt-2 { 44 + data = /incbin/("./foo-revb.dtb"); 45 + type = "flat_dt"; 46 + arch = "arm"; 47 + }; 48 + fdt-3 { 49 + data = /incbin/("./foo-reva-bar.dtb"); 50 + type = "flat_dt"; 51 + arch = "arm"; 52 + }; 53 + fdt-4 { 54 + data = /incbin/("./foo-revb-bar.dtb"); 55 + type = "flat_dt"; 56 + arch = "arm"; 57 + }; 58 + fdt-5 { 59 + data = /incbin/("./foo-revb-baz.dtb"); 60 + type = "flat_dt"; 61 + arch = "arm"; 62 + }; 63 + fdt-6 { 64 + data = /incbin/("./foo-revb-bar-baz.dtb"); 65 + type = "flat_dt"; 66 + arch = "arm"; 67 + }; 68 + }; 69 + 70 + configurations { 71 + default = "foo-reva.dtb; 72 + foo-reva.dtb { 73 + kernel = "kernel"; 74 + fdt = "fdt-1"; 75 + }; 76 + foo-revb.dtb { 77 + kernel = "kernel"; 78 + fdt = "fdt-2"; 79 + }; 80 + foo-reva-bar.dtb { 81 + kernel = "kernel"; 82 + fdt = "fdt-3"; 83 + }; 84 + foo-revb-bar.dtb { 85 + kernel = "kernel"; 86 + fdt = "fdt-4"; 87 + }; 88 + foo-revb-baz.dtb { 89 + kernel = "kernel"; 90 + fdt = "fdt-5"; 91 + }; 92 + foo-revb-bar-baz.dtb { 93 + kernel = "kernel"; 94 + fdt = "fdt-6"; 95 + }; 96 + }; 97 + }; 98 + 99 + Note the blob needs to be compiled for each case and the combinatorial explosion of 100 + configurations. A typical device tree blob is in the low hunderds of kbytes so a 101 + multitude of configuration grows the image quite a bit. 102 + 103 + Booting this image is done by using:: 104 + 105 + # bootm <addr>#<config> 106 + 107 + Where config is one of:: 108 + 109 + foo-reva.dtb, foo-revb.dtb, foo-reva-bar.dtb, foo-revb-bar.dtb, 110 + foo-revb-baz.dtb, foo-revb-bar-baz.dtb 111 + 112 + This selects the DTB to use when booting. 113 + 114 + Configuration using overlays 115 + ---------------------------- 116 + 117 + Device tree overlays can be applied to a base DT and result in the same blob 118 + being passed to the booting kernel. This saves on space and avoid the combinatorial 119 + explosion problem:: 120 + 121 + /dts-v1/; 122 + / { 123 + images { 124 + kernel { 125 + data = /incbin/("./zImage"); 126 + type = "kernel"; 127 + arch = "arm"; 128 + os = "linux"; 129 + load = <0x82000000>; 130 + entry = <0x82000000>; 131 + }; 132 + fdt-1 { 133 + data = /incbin/("./foo.dtb"); 134 + type = "flat_dt"; 135 + arch = "arm"; 136 + load = <0x87f00000>; 137 + }; 138 + fdt-2 { 139 + data = /incbin/("./reva.dtbo"); 140 + type = "flat_dt"; 141 + arch = "arm"; 142 + load = <0x87fc0000>; 143 + }; 144 + fdt-3 { 145 + data = /incbin/("./revb.dtbo"); 146 + type = "flat_dt"; 147 + arch = "arm"; 148 + load = <0x87fc0000>; 149 + }; 150 + fdt-4 { 151 + data = /incbin/("./bar.dtbo"); 152 + type = "flat_dt"; 153 + arch = "arm"; 154 + load = <0x87fc0000>; 155 + }; 156 + fdt-5 { 157 + data = /incbin/("./baz.dtbo"); 158 + type = "flat_dt"; 159 + arch = "arm"; 160 + load = <0x87fc0000>; 161 + }; 162 + }; 163 + 164 + configurations { 165 + default = "foo-reva.dtb; 166 + foo-reva.dtb { 167 + kernel = "kernel"; 168 + fdt = "fdt-1", "fdt-2"; 169 + }; 170 + foo-revb.dtb { 171 + kernel = "kernel"; 172 + fdt = "fdt-1", "fdt-3"; 173 + }; 174 + foo-reva-bar.dtb { 175 + kernel = "kernel"; 176 + fdt = "fdt-1", "fdt-2", "fdt-4"; 177 + }; 178 + foo-revb-bar.dtb { 179 + kernel = "kernel"; 180 + fdt = "fdt-1", "fdt-3", "fdt-4"; 181 + }; 182 + foo-revb-baz.dtb { 183 + kernel = "kernel"; 184 + fdt = "fdt-1", "fdt-3", "fdt-5"; 185 + }; 186 + foo-revb-bar-baz.dtb { 187 + kernel = "kernel"; 188 + fdt = "fdt-1", "fdt-3", "fdt-4", "fdt-5"; 189 + }; 190 + bar { 191 + fdt = "fdt-4"; 192 + }; 193 + baz { 194 + fdt = "fdt-5"; 195 + }; 196 + }; 197 + }; 198 + 199 + Booting this image is exactly the same as the non-overlay example. 200 + u-boot will retrieve the base blob and apply the overlays in sequence as 201 + they are declared in the configuration. 202 + 203 + Note the minimum amount of different DT blobs, as well as the requirement for 204 + the DT blobs to have a load address; the overlay application requires the blobs 205 + to be writeable. 206 + 207 + Configuration using overlays and feature selection 208 + -------------------------------------------------- 209 + 210 + Although the configuration in the previous section works is a bit inflexible 211 + since it requires all possible configuration options to be laid out before 212 + hand in the FIT image. For the add-on boards the extra config selection method 213 + might make sense. 214 + 215 + Note the two bar & baz configuration nodes. To boot a reva board with 216 + the bar add-on board enabled simply use:: 217 + 218 + => bootm <addr>#foo-reva.dtb#bar 219 + 220 + While booting a revb with bar and baz is as follows:: 221 + 222 + => bootm <addr>#foo-revb.dtb#bar#baz 223 + 224 + The limitation for a feature selection configuration node is that a single 225 + fdt option is currently supported. 226 + 227 + .. sectionauthor:: Pantelis Antoniou <pantelis.antoniou@konsulko.com>, 12/6/2017