1# 2# Device Tree Control 3# 4 5config SUPPORT_OF_CONTROL 6 bool 7 8config PYLIBFDT 9 bool 10 11config DTOC 12 bool 13 select PYLIBFDT 14 15config BINMAN 16 bool 17 select DTOC 18 19config BINMAN_STANDALONE_FDT 20 bool 21 depends on BINMAN 22 default y if OF_BOARD 23 help 24 This option tells U-Boot build system that a standalone device tree 25 source is explicitly required when using binman to package U-Boot. 26 27 This is not necessary in a common scenario where a device tree source 28 that contains the binman node is provided in the arch/<arch>/dts 29 directory for a specific board. Such device tree sources are built for 30 OF_SEPARATE or OF_EMBED. However for a scenario like the board device 31 tree blob is not provided in the U-Boot build tree, but fed to U-Boot 32 in the runtime, e.g.: in the OF_BOARD case that it is passed by 33 a prior stage bootloader. For such scenario, a standalone device tree 34 blob containing binman node to describe how to package U-Boot should 35 be provided explicitly. 36 37menu "Device Tree Control" 38 depends on SUPPORT_OF_CONTROL 39 40config OF_CONTROL 41 bool "Run-time configuration via Device Tree" 42 select OF_LIBFDT if !OF_PLATDATA 43 select OF_REAL if !OF_PLATDATA 44 help 45 This feature provides for run-time configuration of U-Boot 46 via a flattened device tree. 47 48config OF_REAL 49 bool 50 help 51 Indicates that a real devicetree is available which can be accessed 52 at runtime. This means that dev_read_...() functions can be used to 53 read data from the devicetree for each device. This is true if 54 OF_CONTROL is enabled in U-Boot proper. 55 56config OF_BOARD_FIXUP 57 bool "Board-specific manipulation of Device Tree" 58 help 59 In certain circumstances it is necessary to be able to modify 60 U-Boot's device tree (e.g. to delete device from it). This option 61 make the Device Tree writeable and provides a board-specific 62 "board_fix_fdt" callback (called during pre-relocation time), which 63 enables the board initialization to modifiy the Device Tree. The 64 modified copy is subsequently used by U-Boot after relocation. 65 66config SPL_OF_CONTROL 67 bool "Enable run-time configuration via Device Tree in SPL" 68 depends on SPL && OF_CONTROL 69 select SPL_OF_LIBFDT if !SPL_OF_PLATDATA 70 select SPL_OF_REAL if !SPL_OF_PLATDATA 71 help 72 Some boards use device tree in U-Boot but only have 4KB of SRAM 73 which is not enough to support device tree. Disable this option to 74 allow such boards to be supported by U-Boot SPL. 75 76config TPL_OF_CONTROL 77 bool "Enable run-time configuration via Device Tree in TPL" 78 depends on TPL && OF_CONTROL 79 select TPL_OF_LIBFDT if !TPL_OF_PLATDATA 80 select TPL_OF_REAL if !TPL_OF_PLATDATA 81 help 82 Some boards use device tree in U-Boot but only have 4KB of SRAM 83 which is not enough to support device tree. Enable this option to 84 allow such boards to be supported by U-Boot TPL. 85 86config OF_LIVE 87 bool "Enable use of a live tree" 88 depends on DM && OF_CONTROL 89 help 90 Normally U-Boot uses a flat device tree which saves space and 91 avoids the need to unpack the tree before use. However a flat 92 tree does not support modification from within U-Boot since it 93 can invalidate driver-model device tree offsets. This option 94 enables a live tree which is available after relocation, 95 and can be adjusted as needed. 96 97choice 98 prompt "Provider of DTB for DT control" 99 depends on OF_CONTROL 100 default OF_BOARD if SANDBOX 101 102config OF_SEPARATE 103 bool "Separate DTB for DT control" 104 depends on !SANDBOX 105 help 106 If this option is enabled, the device tree will be built and 107 placed as a separate u-boot.dtb file alongside the U-Boot image. 108 109config OF_EMBED 110 bool "Embedded DTB for DT control" 111 help 112 If this option is enabled, the device tree will be picked up and 113 built into the U-Boot image. This is suitable for local debugging 114 and development only and is not recommended for production devices. 115 Boards in the mainline U-Boot tree should not use it. 116 117config OF_BOARD 118 bool "Provided by the board (e.g a previous loader) at runtime" 119 help 120 If this option is enabled, the device tree will be provided by 121 the board at runtime if the board supports it, instead of being 122 bundled with the image. 123 124endchoice 125 126config DEFAULT_DEVICE_TREE 127 string "Default Device Tree for DT control" 128 depends on OF_CONTROL 129 help 130 This option specifies the default Device Tree used for DT control. 131 It can be overridden from the command line: 132 $ make DEVICE_TREE=<device-tree-name> 133 134config OF_LIST 135 string "List of device tree files to include for DT control" 136 depends on SPL_LOAD_FIT || MULTI_DTB_FIT 137 default DEFAULT_DEVICE_TREE 138 help 139 This option specifies a list of device tree files to use for DT 140 control. These will be packaged into a FIT. At run-time, U-boot 141 or SPL will select the correct DT to use by examining the 142 hardware (e.g. reading a board ID value). This is a list of 143 device tree files (without the directory or .dtb suffix) 144 separated by <space>. 145 146config OF_OVERLAY_LIST 147 string "List of device tree overlays to include for DT control" 148 depends on SPL_LOAD_FIT_APPLY_OVERLAY 149 help 150 This option specifies a list of device tree overlays to use for DT 151 control. This option can then be used by a FIT generator to include 152 the overlays in the FIT image. 153 154choice 155 prompt "OF LIST compression" 156 depends on MULTI_DTB_FIT 157 default MULTI_DTB_FIT_NO_COMPRESSION 158 159config MULTI_DTB_FIT_LZO 160 bool "LZO" 161 depends on SYS_MALLOC_F 162 select LZO 163 help 164 Compress the FIT image containing the DTBs available for the SPL 165 using LZO compression. (requires lzop on host). 166 167config MULTI_DTB_FIT_GZIP 168 bool "GZIP" 169 depends on SYS_MALLOC_F 170 select GZIP 171 help 172 Compress the FIT image containing the DTBs available for the SPL 173 using GZIP compression. (requires gzip on host) 174 175config MULTI_DTB_FIT_NO_COMPRESSION 176 bool "No compression" 177 help 178 Do not compress the FIT image containing the DTBs available for the SPL. 179 Use this options only if LZO is not available and the DTBs are very small. 180endchoice 181 182choice 183 prompt "Location of uncompressed DTBs" 184 depends on (MULTI_DTB_FIT_GZIP || MULTI_DTB_FIT_LZO) 185 default MULTI_DTB_FIT_DYN_ALLOC if SYS_MALLOC_F 186 187config MULTI_DTB_FIT_DYN_ALLOC 188 bool "Dynamically allocate the memory" 189 depends on SYS_MALLOC_F 190 191config MULTI_DTB_FIT_USER_DEFINED_AREA 192 bool "User-defined location" 193endchoice 194 195config MULTI_DTB_FIT_UNCOMPRESS_SZ 196 hex "Size of memory reserved to uncompress the DTBs" 197 depends on (MULTI_DTB_FIT_GZIP || MULTI_DTB_FIT_LZO) 198 default 0x8000 199 help 200 This is the size of this area where the DTBs are uncompressed. 201 If this area is dynamically allocated, make sure that 202 SYS_MALLOC_F_LEN is big enough to contain it. 203 204config MULTI_DTB_FIT_USER_DEF_ADDR 205 hex "Address of memory where dtbs are uncompressed" 206 depends on MULTI_DTB_FIT_USER_DEFINED_AREA 207 help 208 the FIT image containing the DTBs is uncompressed in an area defined 209 at compilation time. This is the address of this area. It must be 210 aligned on 2-byte boundary. 211 212config DTB_RESELECT 213 bool "Support swapping dtbs at a later point in boot" 214 depends on MULTI_DTB_FIT 215 help 216 It is possible during initial boot you may need to use a generic 217 dtb until you can fully determine the board your running on. This 218 config allows boards to implement a function at a later point 219 during boot to switch to the "correct" dtb. 220 221config MULTI_DTB_FIT 222 bool "Support embedding several DTBs in a FIT image for u-boot" 223 help 224 This option provides hooks to allow U-boot to parse an 225 appended FIT image and enable board specific code to then select 226 the correct DTB to be used. Use this if you need to support 227 multiple DTBs but don't use the SPL. 228 229 230config SPL_MULTI_DTB_FIT 231 depends on SPL_LOAD_FIT && SPL_OF_REAL 232 bool "Support embedding several DTBs in a FIT image for the SPL" 233 help 234 This option provides the SPL with the ability to select its own 235 DTB at runtime from an appended FIT image containing several DTBs. 236 This allows using the same SPL binary on multiple platforms. 237 The primary purpose is to handle different versions of 238 the same platform without tweaking the platform code if the 239 differences can be expressed in the DTBs (common examples are: bus 240 capabilities, pad configurations). 241 242config SPL_OF_LIST 243 string "List of device tree files to include for DT control in SPL" 244 depends on SPL_MULTI_DTB_FIT 245 default OF_LIST 246 help 247 This option specifies a list of device tree files to use for DT 248 control in the SPL. These will be packaged into a FIT. At run-time, 249 the SPL will select the correct DT to use by examining the 250 hardware (e.g. reading a board ID value). This is a list of 251 device tree files (without the directory or .dtb suffix) 252 separated by <space>. 253 254choice 255 prompt "SPL OF LIST compression" 256 depends on SPL_MULTI_DTB_FIT 257 default SPL_MULTI_DTB_FIT_LZO 258 259config SPL_MULTI_DTB_FIT_LZO 260 bool "LZO" 261 depends on SYS_MALLOC_F 262 select SPL_LZO 263 help 264 Compress the FIT image containing the DTBs available for the SPL 265 using LZO compression. (requires lzop on host). 266 267config SPL_MULTI_DTB_FIT_GZIP 268 bool "GZIP" 269 depends on SYS_MALLOC_F 270 select SPL_GZIP 271 help 272 Compress the FIT image containing the DTBs available for the SPL 273 using GZIP compression. (requires gzip on host) 274 275config SPL_MULTI_DTB_FIT_NO_COMPRESSION 276 bool "No compression" 277 help 278 Do not compress the FIT image containing the DTBs available for the SPL. 279 Use this options only if LZO is not available and the DTBs are very small. 280endchoice 281 282choice 283 prompt "Location of uncompressed DTBs" 284 depends on (SPL_MULTI_DTB_FIT_GZIP || SPL_MULTI_DTB_FIT_LZO) 285 default SPL_MULTI_DTB_FIT_DYN_ALLOC if SYS_MALLOC_F 286 287config SPL_MULTI_DTB_FIT_DYN_ALLOC 288 bool "Dynamically allocate the memory" 289 depends on SYS_MALLOC_F 290 291config SPL_MULTI_DTB_FIT_USER_DEFINED_AREA 292 bool "User-defined location" 293endchoice 294 295config SPL_MULTI_DTB_FIT_UNCOMPRESS_SZ 296 hex "Size of memory reserved to uncompress the DTBs" 297 depends on (SPL_MULTI_DTB_FIT_GZIP || SPL_MULTI_DTB_FIT_LZO) 298 default 0x8000 299 help 300 This is the size of this area where the DTBs are uncompressed. 301 If this area is dynamically allocated, make sure that 302 SPL_SYS_MALLOC_F_LEN is big enough to contain it. 303 304config SPL_MULTI_DTB_FIT_USER_DEF_ADDR 305 hex "Address of memory where dtbs are uncompressed" 306 depends on SPL_MULTI_DTB_FIT_USER_DEFINED_AREA 307 help 308 the FIT image containing the DTBs is uncompressed in an area defined 309 at compilation time. This is the address of this area. It must be 310 aligned on 2-byte boundary. 311 312config OF_SPL_REMOVE_PROPS 313 string "List of device tree properties to drop for SPL" 314 depends on SPL_OF_CONTROL 315 default "interrupt-parent interrupts" if SPL_PINCTRL && SPL_CLK 316 default "clocks clock-names interrupt-parent interrupts" if SPL_PINCTRL 317 default "pinctrl-0 pinctrl-names interrupt-parent interrupts" if SPL_CLK 318 default "pinctrl-0 pinctrl-names clocks clock-names interrupt-parent interrupts" 319 help 320 Since SPL normally runs in a reduced memory space, the device tree 321 is cut down to only what is needed to load and start U-Boot. Only 322 nodes marked with the property "u-boot,dm-pre-reloc" will be 323 included. In addition, some properties are not used by U-Boot and 324 can be discarded. This option defines the list of properties to 325 discard. 326 327config OF_DTB_PROPS_REMOVE 328 bool "Enable removal of device tree properties" 329 depends on OF_CONTROL 330 help 331 Some boards have restricted amount of storage for U-Boot image. 332 If the generated binary doesn't fit into available image storage, 333 the built-in device tree could probably be cut down by removing 334 some not required device tree properties to reduce the image size. 335 Enable this option and define the properties to be removed in the 336 CONFIG_OF_REMOVE_PROPS list. Do not enable this option if you must 337 pass the built-in DTB directly to the kernel! 338 339config OF_REMOVE_PROPS 340 string "List of device tree properties to drop" 341 depends on OF_DTB_PROPS_REMOVE 342 default "interrupt-parent interrupts" if PINCTRL 343 help 344 Some properties are not used by U-Boot and can be discarded. 345 This option defines the list of properties to discard. 346 347config SPL_OF_PLATDATA 348 bool "Generate platform data for use in SPL" 349 depends on SPL_OF_CONTROL 350 select DTOC 351 select SPL_OF_PLATDATA_DRIVER_RT if !SPL_OF_PLATDATA_INST 352 help 353 For very constrained SPL environments the overhead of decoding 354 device tree nodes and converting their contents into platform data 355 is too large. This overhead includes libfdt code as well as the 356 device tree contents itself. The latter is fairly compact, but the 357 former can add 3KB or more to a Thumb 2 Image. 358 359 This option enables generation of platform data from the device 360 tree as C code. This code creates devices using U_BOOT_DRVINFO() 361 declarations. The benefit is that it allows driver code to access 362 the platform data directly in C structures, avoidin the libfdt 363 overhead. 364 365 This option works by generating C structure declarations for each 366 compatible string, then adding platform data and U_BOOT_DRVINFO 367 declarations for each node. See of-plat.txt for more information. 368 369config SPL_OF_REAL 370 bool 371 help 372 Indicates that a real devicetree is available which can be accessed 373 at runtime. This means that dev_read_...() functions can be used to 374 read data from the devicetree for each device. This is true if 375 SPL_OF_CONTROL is enabled and not SPL_OF_PLATDATA 376 377if SPL_OF_PLATDATA 378 379config SPL_OF_PLATDATA_PARENT 380 bool "Support parent information in devices" 381 default y 382 help 383 Generally it is useful to be able to access the parent of a device 384 with of-platdata. To save space this can be disabled, but in that 385 case dev_get_parent() will always return NULL; 386 387config SPL_OF_PLATDATA_INST 388 bool "Declare devices at build time" 389 help 390 Declare devices as udevice instances so that they do not need to be 391 bound when U-Boot starts. This can save time and code space. 392 393config SPL_OF_PLATDATA_NO_BIND 394 bool "Don't allow run-time binding of devices" 395 depends on SPL_OF_PLATDATA_INST 396 default y 397 help 398 This removes the ability to bind devices at run time, thus saving 399 some code space in U-Boot. This can be disabled if binding is needed, 400 at the code of some code size increase. 401 402config SPL_OF_PLATDATA_RT 403 bool "Use a separate struct for device runtime data" 404 depends on SPL_OF_PLATDATA_INST 405 default y 406 help 407 For systems running SPL from read-only memory it is convenient to 408 separate out the runtime information, so that the devices don't need 409 to be copied before being used. This moves the read-write parts of 410 struct udevice (at present just the flags) into a separate struct, 411 which is allocated at runtime. 412 413config SPL_OF_PLATDATA_DRIVER_RT 414 bool 415 help 416 Use a separate struct for driver runtime data. 417 418 This enables the driver_rt information, used with of-platdata when 419 of-platdata-inst is not used. It allows finding devices by their 420 driver data. 421 422endif 423 424config TPL_OF_REAL 425 bool 426 help 427 Indicates that a real devicetree is available which can be accessed 428 at runtime. This means that dev_read_...() functions can be used to 429 read data from the devicetree for each device. This is true if 430 TPL_OF_CONTROL is enabled and not TPL_OF_PLATDATA 431 432config TPL_OF_PLATDATA 433 bool "Generate platform data for use in TPL" 434 depends on TPL_OF_CONTROL 435 select DTOC 436 select TPL_OF_PLATDATA_DRIVER_RT if !TPL_OF_PLATDATA_INST 437 help 438 For very constrained SPL environments the overhead of decoding 439 device tree nodes and converting their contents into platform data 440 is too large. This overhead includes libfdt code as well as the 441 device tree contents itself. The latter is fairly compact, but the 442 former can add 3KB or more to a Thumb 2 Image. 443 444 This option enables generation of platform data from the device 445 tree as C code. This code creates devices using U_BOOT_DRVINFO() 446 declarations. The benefit is that it allows driver code to access 447 the platform data directly in C structures, avoidin the libfdt 448 overhead. 449 450 This option works by generating C structure declarations for each 451 compatible string, then adding platform data and U_BOOT_DRVINFO 452 declarations for each node. See of-plat.txt for more information. 453 454if TPL_OF_PLATDATA 455 456config TPL_OF_PLATDATA_PARENT 457 bool "Support parent information in devices" 458 default y 459 help 460 Generally it is useful to be able to access the parent of a device 461 with of-platdata. To save space this can be disabled, but in that 462 case dev_get_parent() will always return NULL; 463 464config TPL_OF_PLATDATA_INST 465 bool "Declare devices at build time" 466 467 help 468 Declare devices as udevice instances so that they do not need to be 469 bound when U-Boot starts. This can save time and code space. 470 471config TPL_OF_PLATDATA_NO_BIND 472 bool "Don't allow run-time binding of devices" 473 depends on TPL_OF_PLATDATA_INST 474 default y 475 help 476 This removes the ability to bind devices at run time, thus saving 477 some code space in U-Boot. This can be disabled if binding is needed, 478 at the code of some code size increase. 479 480config TPL_OF_PLATDATA_RT 481 bool "Use a separate struct for device runtime data" 482 depends on TPL_OF_PLATDATA_INST 483 default y 484 help 485 For systems running TPL from read-only memory it is convenient to 486 separate out the runtime information, so that the devices don't need 487 to be copied before being used. This moves the read-write parts of 488 struct udevice (at present just the flags) into a separate struct, 489 which is allocated at runtime. 490 491config TPL_OF_PLATDATA_DRIVER_RT 492 bool 493 help 494 Use a separate struct for driver runtime data. 495 496 This enables the driver_rt information, used with of-platdata when 497 of-platdata-inst is not used. It allows finding devices by their 498 driver data. 499 500endif 501 502endmenu 503