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 19menu "Device Tree Control" 20 depends on SUPPORT_OF_CONTROL 21 22config OF_CONTROL 23 bool "Run-time configuration via Device Tree" 24 select OF_LIBFDT 25 select OF_REAL 26 help 27 This feature provides for run-time configuration of U-Boot 28 via a flattened device tree. 29 30config OF_REAL 31 bool 32 help 33 Indicates that a real devicetree is available which can be accessed 34 at runtime. This means that dev_read_...() functions can be used to 35 read data from the devicetree for each device. This is true if 36 OF_CONTROL is enabled in U-Boot proper. 37 38config OF_BOARD_FIXUP 39 bool "Board-specific manipulation of Device Tree" 40 help 41 In certain circumstances it is necessary to be able to modify 42 U-Boot's device tree (e.g. to delete device from it). This option 43 make the Device Tree writeable and provides a board-specific 44 "board_fix_fdt" callback (called during pre-relocation time), which 45 enables the board initialization to modifiy the Device Tree. The 46 modified copy is subsequently used by U-Boot after relocation. 47 48config SPL_OF_CONTROL 49 bool "Enable run-time configuration via Device Tree in SPL" 50 depends on SPL && OF_CONTROL 51 select SPL_OF_LIBFDT if !SPL_OF_PLATDATA 52 select SPL_OF_REAL if !SPL_OF_PLATDATA 53 help 54 Some boards use device tree in U-Boot but only have 4KB of SRAM 55 which is not enough to support device tree. Disable this option to 56 allow such boards to be supported by U-Boot SPL. 57 58config TPL_OF_CONTROL 59 bool "Enable run-time configuration via Device Tree in TPL" 60 depends on TPL && OF_CONTROL 61 select TPL_OF_LIBFDT if !TPL_OF_PLATDATA 62 select TPL_OF_REAL if !TPL_OF_PLATDATA 63 help 64 Some boards use device tree in U-Boot but only have 4KB of SRAM 65 which is not enough to support device tree. Enable this option to 66 allow such boards to be supported by U-Boot TPL. 67 68config VPL_OF_CONTROL 69 bool "Enable run-time configuration via Device Tree in VPL" 70 depends on VPL && OF_CONTROL 71 default y if SPL_OF_CONTROL 72 help 73 Some boards use device tree in U-Boot but only have 4KB of SRAM 74 which is not enough to support device tree. Enable this option to 75 allow such boards to be supported by U-Boot VPL. 76 77config OF_LIVE 78 bool "Enable use of a live tree" 79 depends on DM && OF_CONTROL 80 help 81 Normally U-Boot uses a flat device tree which saves space and 82 avoids the need to unpack the tree before use. However a flat 83 tree does not support modification from within U-Boot since it 84 can invalidate driver-model device tree offsets. This option 85 enables a live tree which is available after relocation, 86 and can be adjusted as needed. 87 88config OF_UPSTREAM 89 bool "Enable use of devicetree imported from Linux kernel release" 90 help 91 Traditionally, U-Boot platforms used to have their custom devicetree 92 files or copy devicetree files from Linux kernel which are hard to 93 maintain and can usually get out-of-sync from Linux kernel. This 94 option enables platforms to migrate to devicetree-rebasing repo where 95 a regular sync will be maintained every major Linux kernel release 96 cycle. However, platforms can still have some custom u-boot specific 97 bits maintained as part of *-u-boot.dtsi files. 98 99 Note: This option should be set in Kconfig, for the SoC as a whole. 100 However, newer boards whose devicetree source files haven't landed in 101 the dts/upstream subtree, they can override this option to have the 102 DT build from existing U-Boot tree location instead. 103 104config OF_UPSTREAM_BUILD_VENDOR 105 bool "Build all devicetree files for a particular vendor" 106 depends on OF_UPSTREAM 107 help 108 Enable building all devicetree files for a particular vendor. This 109 is useful for generic U-Boot configurations where many boards can 110 be supported with a single binary. 111 112 This is only available for platforms using upstream devicetree. 113 114config OF_UPSTREAM_VENDOR 115 string "Vendor to build all upstream devicetree files for" 116 depends on OF_UPSTREAM_BUILD_VENDOR 117 default "qcom" if ARCH_SNAPDRAGON 118 default "rockchip" if ARCH_ROCKCHIP 119 default "amlogic" if ARCH_MESON 120 default "allwinner" if ARCH_SUNXI 121 default "mediatek" if ARCH_MEDIATEK 122 default "marvell" if ARCH_MVEBU || ARCH_KIRKWOOD 123 default "xilinx" if ARCH_VERSAL || ARCH_ZYNQ 124 default "nvidia" if ARCH_TEGRA 125 help 126 Select the vendor to build all devicetree files for. 127 128choice 129 prompt "Provider of DTB for DT control" 130 depends on OF_CONTROL 131 132config OF_SEPARATE 133 bool "Separate DTB for DT control" 134 help 135 If this option is enabled, the device tree will be built and 136 placed as a separate u-boot.dtb file alongside the U-Boot image. 137 138config OF_EMBED 139 bool "Embedded DTB for DT control" 140 help 141 If this option is enabled, the device tree will be picked up and 142 built into the U-Boot image. This is suitable for local debugging 143 and development only and is not recommended for production devices. 144 Boards in the mainline U-Boot tree should not use it. 145 146endchoice 147 148config OF_BOARD 149 bool "Provided by the board (e.g a previous loader) at runtime" 150 default y if SANDBOX || OF_HAS_PRIOR_STAGE 151 help 152 If this option is enabled, the device tree is provided at runtime by 153 a custom function called board_fdt_blob_setup(). The board must 154 implement this function if it wishes to provide special behaviour. 155 156 With this option, the device tree build by U-Boot may be overridden or 157 ignored. See OF_HAS_PRIOR_STAGE. 158 159 Note: Boards which use this to handle a device tree passed from an 160 earlier stage should enable OF_HAS_PRIOR_STAGE. 161 162config OF_HAS_PRIOR_STAGE 163 bool 164 depends on !BLOBLIST 165 help 166 Indicates that a prior stage of the firmware (before U-Boot proper) 167 makes use of device tree and this board normally boots with that prior 168 stage, that provides a devicetree to U-Boot. 169 170 This means that the device tree built in U-Boot should not be packaged 171 in the firmware image. Instead, the prior stage's device tree should 172 be so packaged. At runtime, the prior stage reads this, does any 173 necessary fix-ups, then passes it to U-Boot. See OF_BOARD. 174 175 This option does not preclude using the U-Boot device tree, e.g. for 176 development purposes, but it is not recommended, and likely will not 177 even work, for production systems. 178 179 Note: This option must be set in Kconfig and cannot be enabled or 180 disabled in the board's defconfig file. 181 182config OF_OMIT_DTB 183 bool "Omit the device tree output when building" 184 default y if OF_HAS_PRIOR_STAGE && !BINMAN 185 help 186 As a special case, avoid writing a device tree file u-boot.dtb when 187 building. Also don't include that file in u-boot.bin 188 189 This is used for boards which normally provide a devicetree via a 190 runtime mechanism (such as OF_BOARD), to avoid confusion. 191 192config DEFAULT_DEVICE_TREE 193 string "Default Device Tree for DT control" 194 depends on OF_CONTROL 195 help 196 This option specifies the default Device Tree used for DT control. 197 It can be overridden from the command line: 198 $ make DEVICE_TREE=<device-tree-name> 199 200config DEVICE_TREE_INCLUDES 201 string "Extra .dtsi files to include when building DT control" 202 depends on OF_CONTROL 203 help 204 U-Boot's control .dtb is usually built from an in-tree .dts 205 file, plus (if available) an in-tree U-Boot-specific .dtsi 206 file. This option specifies a space-separated list of extra 207 .dtsi files that will also be used. 208 209config OF_LIST 210 string "List of device tree files to include for DT control" if SPL_LOAD_FIT || MULTI_DTB_FIT 211 depends on OF_CONTROL 212 default DEFAULT_DEVICE_TREE 213 help 214 This option specifies a list of device tree files to use for DT 215 control. These will be packaged into a FIT. At run-time, U-Boot 216 or SPL will select the correct DT to use by examining the 217 hardware (e.g. reading a board ID value). This is a list of 218 device tree files (without the directory or .dtb suffix) 219 separated by <space>. 220 221config OF_OVERLAY_LIST 222 string "List of device tree overlays to include for DT control" 223 depends on SPL_LOAD_FIT_APPLY_OVERLAY 224 help 225 This option specifies a list of device tree overlays to use for DT 226 control. This option can then be used by a FIT generator to include 227 the overlays in the FIT image. 228 229choice 230 prompt "OF LIST compression" 231 depends on MULTI_DTB_FIT 232 default MULTI_DTB_FIT_NO_COMPRESSION 233 234config MULTI_DTB_FIT_LZO 235 bool "LZO" 236 depends on SYS_MALLOC_F 237 select LZO 238 help 239 Compress the FIT image containing the DTBs available for the SPL 240 using LZO compression. (requires lzop on host). 241 242config MULTI_DTB_FIT_GZIP 243 bool "GZIP" 244 depends on SYS_MALLOC_F 245 select GZIP 246 help 247 Compress the FIT image containing the DTBs available for the SPL 248 using GZIP compression. (requires gzip on host) 249 250config MULTI_DTB_FIT_NO_COMPRESSION 251 bool "No compression" 252 help 253 Do not compress the FIT image containing the DTBs available for the SPL. 254 Use this options only if LZO is not available and the DTBs are very small. 255endchoice 256 257choice 258 prompt "Location of uncompressed DTBs" 259 depends on (MULTI_DTB_FIT_GZIP || MULTI_DTB_FIT_LZO) 260 default MULTI_DTB_FIT_DYN_ALLOC if SYS_MALLOC_F 261 262config MULTI_DTB_FIT_DYN_ALLOC 263 bool "Dynamically allocate the memory" 264 depends on SYS_MALLOC_F 265 266config MULTI_DTB_FIT_USER_DEFINED_AREA 267 bool "User-defined location" 268endchoice 269 270config MULTI_DTB_FIT_UNCOMPRESS_SZ 271 hex "Size of memory reserved to uncompress the DTBs" 272 default 0x8000 273 help 274 This is the size of this area where the DTBs are uncompressed. 275 If this area is dynamically allocated, make sure that 276 SYS_MALLOC_F_LEN is big enough to contain it. 277 278config MULTI_DTB_FIT_USER_DEF_ADDR 279 hex "Address of memory where dtbs are uncompressed" 280 depends on MULTI_DTB_FIT_USER_DEFINED_AREA 281 help 282 the FIT image containing the DTBs is uncompressed in an area defined 283 at compilation time. This is the address of this area. It must be 284 aligned on 2-byte boundary. 285 286config DTB_RESELECT 287 bool "Support swapping dtbs at a later point in boot" 288 depends on MULTI_DTB_FIT 289 help 290 It is possible during initial boot you may need to use a generic 291 dtb until you can fully determine the board your running on. This 292 config allows boards to implement a function at a later point 293 during boot to switch to the "correct" dtb. 294 295config MULTI_DTB_FIT 296 bool "Support embedding several DTBs in a FIT image for u-boot" 297 help 298 This option provides hooks to allow U-Boot to parse an 299 appended FIT image and enable board specific code to then select 300 the correct DTB to be used. Use this if you need to support 301 multiple DTBs but don't use the SPL. 302 303 304config SPL_MULTI_DTB_FIT 305 depends on SPL_LOAD_FIT && SPL_OF_REAL 306 bool "Support embedding several DTBs in a FIT image for the SPL" 307 help 308 This option provides the SPL with the ability to select its own 309 DTB at runtime from an appended FIT image containing several DTBs. 310 This allows using the same SPL binary on multiple platforms. 311 The primary purpose is to handle different versions of 312 the same platform without tweaking the platform code if the 313 differences can be expressed in the DTBs (common examples are: bus 314 capabilities, pad configurations). 315 316config SPL_OF_LIST 317 string "List of device tree files to include for DT control in SPL" if SPL_MULTI_DTB_FIT 318 depends on SPL_OF_CONTROL 319 default OF_LIST 320 help 321 This option specifies a list of device tree files to use for DT 322 control in the SPL. These will be packaged into a FIT. At run-time, 323 the SPL will select the correct DT to use by examining the 324 hardware (e.g. reading a board ID value). This is a list of 325 device tree files (without the directory or .dtb suffix) 326 separated by <space>. 327 328choice 329 prompt "SPL OF LIST compression" 330 depends on SPL_MULTI_DTB_FIT 331 default SPL_MULTI_DTB_FIT_LZO 332 333config SPL_MULTI_DTB_FIT_LZO 334 bool "LZO" 335 depends on SYS_MALLOC_F 336 select SPL_LZO 337 help 338 Compress the FIT image containing the DTBs available for the SPL 339 using LZO compression. (requires lzop on host). 340 341config SPL_MULTI_DTB_FIT_GZIP 342 bool "GZIP" 343 depends on SYS_MALLOC_F 344 select SPL_GZIP 345 help 346 Compress the FIT image containing the DTBs available for the SPL 347 using GZIP compression. (requires gzip on host) 348 349config SPL_MULTI_DTB_FIT_NO_COMPRESSION 350 bool "No compression" 351 help 352 Do not compress the FIT image containing the DTBs available for the SPL. 353 Use this options only if LZO is not available and the DTBs are very small. 354endchoice 355 356choice 357 prompt "Location of uncompressed DTBs" 358 depends on (SPL_MULTI_DTB_FIT_GZIP || SPL_MULTI_DTB_FIT_LZO) 359 default SPL_MULTI_DTB_FIT_DYN_ALLOC if SYS_MALLOC_F 360 361config SPL_MULTI_DTB_FIT_DYN_ALLOC 362 bool "Dynamically allocate the memory" 363 depends on SYS_MALLOC_F 364 365config SPL_MULTI_DTB_FIT_USER_DEFINED_AREA 366 bool "User-defined location" 367endchoice 368 369config SPL_MULTI_DTB_FIT_UNCOMPRESS_SZ 370 hex "Size of memory reserved to uncompress the DTBs" 371 depends on (SPL_MULTI_DTB_FIT_GZIP || SPL_MULTI_DTB_FIT_LZO) 372 default 0x8000 373 help 374 This is the size of this area where the DTBs are uncompressed. 375 If this area is dynamically allocated, make sure that 376 SPL_SYS_MALLOC_F_LEN is big enough to contain it. 377 378config SPL_MULTI_DTB_FIT_USER_DEF_ADDR 379 hex "Address of memory where dtbs are uncompressed" 380 depends on SPL_MULTI_DTB_FIT_USER_DEFINED_AREA 381 help 382 the FIT image containing the DTBs is uncompressed in an area defined 383 at compilation time. This is the address of this area. It must be 384 aligned on 2-byte boundary. 385 386config OF_TAG_MIGRATE 387 bool "Ease migration from old device trees with u-boot,dm- tags" 388 default y 389 help 390 U-Boot moved over to use new tags to mark device tree nodes which need 391 to be processed in SPL, before relocation, etc. Enable this option to 392 detect old tags and handle them. 393 394 Note: This option will be removed after the 2023.07 release. 395 396config OF_SPL_REMOVE_PROPS 397 string "List of device tree properties to drop for SPL" 398 depends on SPL_OF_CONTROL 399 default "interrupt-parent interrupts" if SPL_PINCTRL && SPL_CLK 400 default "clocks clock-names interrupt-parent interrupts" if SPL_PINCTRL 401 default "pinctrl-0 pinctrl-names interrupt-parent interrupts" if SPL_CLK 402 default "pinctrl-0 pinctrl-names clocks clock-names interrupt-parent interrupts" 403 help 404 Since SPL normally runs in a reduced memory space, the device tree 405 is cut down to only what is needed to load and start U-Boot. Only 406 nodes marked with the property "bootph-all" will be 407 included. In addition, some properties are not used by U-Boot and 408 can be discarded. This option defines the list of properties to 409 discard. 410 411config OF_DTB_PROPS_REMOVE 412 bool "Enable removal of device tree properties" 413 depends on OF_CONTROL 414 help 415 Some boards have restricted amount of storage for U-Boot image. 416 If the generated binary doesn't fit into available image storage, 417 the built-in device tree could probably be cut down by removing 418 some not required device tree properties to reduce the image size. 419 Enable this option and define the properties to be removed in the 420 CONFIG_OF_REMOVE_PROPS list. Do not enable this option if you must 421 pass the built-in DTB directly to the kernel! 422 423config OF_REMOVE_PROPS 424 string "List of device tree properties to drop" 425 depends on OF_DTB_PROPS_REMOVE 426 default "interrupt-parent interrupts" if PINCTRL 427 help 428 Some properties are not used by U-Boot and can be discarded. 429 This option defines the list of properties to discard. 430 431config SPL_OF_PLATDATA 432 bool "Generate platform data for use in SPL" 433 depends on SPL_OF_CONTROL 434 select DTOC 435 select SPL_OF_PLATDATA_DRIVER_RT if !SPL_OF_PLATDATA_INST 436 help 437 For very constrained SPL environments the overhead of decoding 438 device tree nodes and converting their contents into platform data 439 is too large. This overhead includes libfdt code as well as the 440 device tree contents itself. The latter is fairly compact, but the 441 former can add 3KB or more to a Thumb 2 Image. 442 443 This option enables generation of platform data from the device 444 tree as C code. This code creates devices using U_BOOT_DRVINFO() 445 declarations. The benefit is that it allows driver code to access 446 the platform data directly in C structures, avoidin the libfdt 447 overhead. 448 449 This option works by generating C structure declarations for each 450 compatible string, then adding platform data and U_BOOT_DRVINFO 451 declarations for each node. See of-plat.txt for more information. 452 453config SPL_OF_REAL 454 bool "Support a real devicetree in SPL" if SANDBOX 455 depends on SPL_OF_CONTROL 456 select SPL_OF_LIBFDT 457 help 458 Indicates that a real devicetree is available which can be accessed 459 at runtime. This means that dev_read_...() functions can be used to 460 read data from the devicetree for each device. You do not need to 461 enable this option if you have enabled SPL_OF_PLATDATA. 462 463if SPL_OF_PLATDATA 464 465config SPL_OF_PLATDATA_PARENT 466 bool "Support parent information in devices" 467 default y 468 help 469 Generally it is useful to be able to access the parent of a device 470 with of-platdata. To save space this can be disabled, but in that 471 case dev_get_parent() will always return NULL; 472 473config SPL_OF_PLATDATA_INST 474 bool "Declare devices at build time" 475 help 476 Declare devices as udevice instances so that they do not need to be 477 bound when U-Boot starts. This can save time and code space. 478 479config SPL_OF_PLATDATA_NO_BIND 480 bool "Don't allow run-time binding of devices" 481 depends on SPL_OF_PLATDATA_INST 482 default y 483 help 484 This removes the ability to bind devices at run time, thus saving 485 some code space in U-Boot. This can be disabled if binding is needed, 486 at the code of some code size increase. 487 488config SPL_OF_PLATDATA_RT 489 bool "Use a separate struct for device runtime data" 490 depends on SPL_OF_PLATDATA_INST 491 default y 492 help 493 For systems running SPL from read-only memory it is convenient to 494 separate out the runtime information, so that the devices don't need 495 to be copied before being used. This moves the read-write parts of 496 struct udevice (at present just the flags) into a separate struct, 497 which is allocated at runtime. 498 499config SPL_OF_PLATDATA_DRIVER_RT 500 bool 501 help 502 Use a separate struct for driver runtime data. 503 504 This enables the driver_rt information, used with of-platdata when 505 of-platdata-inst is not used. It allows finding devices by their 506 driver data. 507 508endif 509 510config TPL_OF_REAL 511 bool 512 help 513 Indicates that a real devicetree is available which can be accessed 514 at runtime. This means that dev_read_...() functions can be used to 515 read data from the devicetree for each device. This is true if 516 TPL_OF_CONTROL is enabled and not TPL_OF_PLATDATA 517 518config TPL_OF_PLATDATA 519 bool "Generate platform data for use in TPL" 520 depends on TPL_OF_CONTROL 521 select DTOC 522 select TPL_OF_PLATDATA_DRIVER_RT if !TPL_OF_PLATDATA_INST 523 help 524 For very constrained SPL environments the overhead of decoding 525 device tree nodes and converting their contents into platform data 526 is too large. This overhead includes libfdt code as well as the 527 device tree contents itself. The latter is fairly compact, but the 528 former can add 3KB or more to a Thumb 2 Image. 529 530 This option enables generation of platform data from the device 531 tree as C code. This code creates devices using U_BOOT_DRVINFO() 532 declarations. The benefit is that it allows driver code to access 533 the platform data directly in C structures, avoidin the libfdt 534 overhead. 535 536 This option works by generating C structure declarations for each 537 compatible string, then adding platform data and U_BOOT_DRVINFO 538 declarations for each node. See of-plat.txt for more information. 539 540if TPL_OF_PLATDATA 541 542config TPL_OF_PLATDATA_PARENT 543 bool "Support parent information in devices" 544 default y 545 help 546 Generally it is useful to be able to access the parent of a device 547 with of-platdata. To save space this can be disabled, but in that 548 case dev_get_parent() will always return NULL; 549 550config TPL_OF_PLATDATA_INST 551 bool "Declare devices at build time" 552 553 help 554 Declare devices as udevice instances so that they do not need to be 555 bound when U-Boot starts. This can save time and code space. 556 557config TPL_OF_PLATDATA_NO_BIND 558 bool "Don't allow run-time binding of devices" 559 depends on TPL_OF_PLATDATA_INST 560 default y 561 help 562 This removes the ability to bind devices at run time, thus saving 563 some code space in U-Boot. This can be disabled if binding is needed, 564 at the code of some code size increase. 565 566config TPL_OF_PLATDATA_RT 567 bool "Use a separate struct for device runtime data" 568 depends on TPL_OF_PLATDATA_INST 569 default y 570 help 571 For systems running TPL from read-only memory it is convenient to 572 separate out the runtime information, so that the devices don't need 573 to be copied before being used. This moves the read-write parts of 574 struct udevice (at present just the flags) into a separate struct, 575 which is allocated at runtime. 576 577config TPL_OF_PLATDATA_DRIVER_RT 578 bool 579 help 580 Use a separate struct for driver runtime data. 581 582 This enables the driver_rt information, used with of-platdata when 583 of-platdata-inst is not used. It allows finding devices by their 584 driver data. 585 586endif 587 588config VPL_OF_REAL 589 def_bool y 590 depends on VPL 591 help 592 Indicates that a real devicetree is available which can be accessed 593 at runtime. This means that dev_read_...() functions can be used to 594 read data from the devicetree for each device. This is true if 595 TPL_OF_CONTROL is enabled and not TPL_OF_PLATDATA 596 597endmenu 598