#
# Device Tree Control
#

config SUPPORT_OF_CONTROL
	bool

config PYLIBFDT
	bool

config DTOC
	bool
	select PYLIBFDT

config BINMAN
	bool
	select DTOC

menu "Device Tree Control"
	depends on SUPPORT_OF_CONTROL

config OF_CONTROL
	bool "Run-time configuration via Device Tree"
	select OF_LIBFDT
	select OF_REAL
	help
	  This feature provides for run-time configuration of U-Boot
	  via a flattened device tree.

config OF_REAL
	bool
	help
	  Indicates that a real devicetree is available which can be accessed
	  at runtime. This means that dev_read_...() functions can be used to
	  read data from the devicetree for each device. This is true if
	  OF_CONTROL is enabled in U-Boot proper.

config OF_BOARD_FIXUP
	bool "Board-specific manipulation of Device Tree"
	help
	  In certain circumstances it is necessary to be able to modify
	  U-Boot's device tree (e.g. to delete device from it). This option
	  make the Device Tree writeable and provides a board-specific
	  "board_fix_fdt" callback (called during pre-relocation time), which
	  enables the board initialization to modifiy the Device Tree. The
	  modified copy is subsequently used by U-Boot after relocation.

config SPL_OF_CONTROL
	bool "Enable run-time configuration via Device Tree in SPL"
	depends on SPL && OF_CONTROL
	select SPL_OF_LIBFDT if !SPL_OF_PLATDATA
	select SPL_OF_REAL if !SPL_OF_PLATDATA
	help
	  Some boards use device tree in U-Boot but only have 4KB of SRAM
	  which is not enough to support device tree. Disable this option to
	  allow such boards to be supported by U-Boot SPL.

config TPL_OF_CONTROL
	bool "Enable run-time configuration via Device Tree in TPL"
	depends on TPL && OF_CONTROL
	select TPL_OF_LIBFDT if !TPL_OF_PLATDATA
	select TPL_OF_REAL if !TPL_OF_PLATDATA
	help
	  Some boards use device tree in U-Boot but only have 4KB of SRAM
	  which is not enough to support device tree. Enable this option to
	  allow such boards to be supported by U-Boot TPL.

config VPL_OF_CONTROL
	bool "Enable run-time configuration via Device Tree in VPL"
	depends on VPL && OF_CONTROL
	default y if SPL_OF_CONTROL
	help
	  Some boards use device tree in U-Boot but only have 4KB of SRAM
	  which is not enough to support device tree. Enable this option to
	  allow such boards to be supported by U-Boot VPL.

config OF_LIVE
	bool "Enable use of a live tree"
	depends on DM && OF_CONTROL
	help
	  Normally U-Boot uses a flat device tree which saves space and
	  avoids the need to unpack the tree before use. However a flat
	  tree does not support modification from within U-Boot since it
	  can invalidate driver-model device tree offsets. This option
	  enables a live tree which is available after relocation,
	  and can be adjusted as needed.

config OF_UPSTREAM
	bool "Enable use of devicetree imported from Linux kernel release"
	help
	  Traditionally, U-Boot platforms used to have their custom devicetree
	  files or copy devicetree files from Linux kernel which are hard to
	  maintain and can usually get out-of-sync from Linux kernel. This
	  option enables platforms to migrate to devicetree-rebasing repo where
	  a regular sync will be maintained every major Linux kernel release
	  cycle. However, platforms can still have some custom u-boot specific
	  bits maintained as part of *-u-boot.dtsi files.

	  Note: This option should be set in Kconfig, for the SoC as a whole.
	  However, newer boards whose devicetree source files haven't landed in
	  the dts/upstream subtree, they can override this option to have the
	  DT build from existing U-Boot tree location instead.

config OF_UPSTREAM_BUILD_VENDOR
	bool "Build all devicetree files for a particular vendor"
	depends on OF_UPSTREAM
	help
	  Enable building all devicetree files for a particular vendor. This
	  is useful for generic U-Boot configurations where many boards can
	  be supported with a single binary.

	  This is only available for platforms using upstream devicetree.

config OF_UPSTREAM_VENDOR
	string "Vendor to build all upstream devicetree files for"
	depends on OF_UPSTREAM_BUILD_VENDOR
	default "qcom" if ARCH_SNAPDRAGON
	default "rockchip" if ARCH_ROCKCHIP
	default "amlogic" if ARCH_MESON
	default "allwinner" if ARCH_SUNXI
	default "mediatek" if ARCH_MEDIATEK
	default "marvell" if ARCH_MVEBU || ARCH_KIRKWOOD
	default "xilinx" if ARCH_VERSAL || ARCH_ZYNQ
	default "nvidia" if ARCH_TEGRA
	help
	  Select the vendor to build all devicetree files for.

config OF_UPSTREAM_INCLUDE_LOCAL_FALLBACK_DTBOS
	bool "Build local DTBOs as fallback for DTBOs missing upstream"
	default n
	depends on OF_UPSTREAM
	help
	  Enable building DTBOs from arch/$(ARCH)/dts as a fallback for
	  DTBOs which are not part of Linux kernel upstream yet. This is
	  a stopgap measure to expedite OF_UPSTREAM switch for platforms
	  which already have main DT in Linux kernel upstream, but still
	  have leftover DTBOs in U-Boot tree.

	  Do not use this option, upstream your DTs and DTBOs instead.
	  If the upstreaming is in progress, use with utmost caution.

	  If unsure, say N.

choice
	prompt "Provider of DTB for DT control"
	depends on OF_CONTROL

config OF_SEPARATE
	bool "Separate DTB for DT control"
	help
	  If this option is enabled, the device tree will be built and
	  placed as a separate u-boot.dtb file alongside the U-Boot image.

config OF_EMBED
	bool "Embedded DTB for DT control"
	help
	  If this option is enabled, the device tree will be picked up and
	  built into the U-Boot image. This is suitable for local debugging
	  and development only and is not recommended for production devices.
	  Boards in the mainline U-Boot tree should not use it.

endchoice

config OF_INITIAL_DTB_READONLY
	bool "Initial DTB for DT control is read-only"
	help
	  If initial DTB for DT control is read-only (e.g. points to
	  memory-mapped flash memory), then set this option.

config OF_BOARD
	bool "Provided by the board (e.g a previous loader) at runtime"
	default y if SANDBOX || OF_HAS_PRIOR_STAGE
	help
	  If this option is enabled, the device tree is provided at runtime by
	  a custom function called board_fdt_blob_setup(). The board must
	  implement this function if it wishes to provide special behaviour.

	  With this option, the device tree build by U-Boot may be overridden or
	  ignored. See OF_HAS_PRIOR_STAGE.

	  Note: Boards which use this to handle a device tree passed from an
	  earlier stage should enable OF_HAS_PRIOR_STAGE.

config OF_HAS_PRIOR_STAGE
	bool
	depends on !BLOBLIST
	help
	  Indicates that a prior stage of the firmware (before U-Boot proper)
	  makes use of device tree and this board normally boots with that prior
	  stage, that provides a devicetree to U-Boot.

	  This means that the device tree built in U-Boot should not be packaged
	  in the firmware image. Instead, the prior stage's device tree should
	  be so packaged. At runtime, the prior stage reads this, does any
	  necessary fix-ups, then passes it to U-Boot. See OF_BOARD.

	  This option does not preclude using the U-Boot device tree, e.g. for
	  development purposes, but it is not recommended, and likely will not
	  even work, for production systems.

	  Note: This option must be set in Kconfig and cannot be enabled or
	  disabled in the board's defconfig file.

config OF_OMIT_DTB
	bool "Omit the device tree output when building"
	default y if OF_HAS_PRIOR_STAGE && !BINMAN
	help
	  As a special case, avoid writing a device tree file u-boot.dtb when
	  building. Also don't include that file in u-boot.bin

	  This is used for boards which normally provide a devicetree via a
	  runtime mechanism (such as OF_BOARD), to avoid confusion.

config DEFAULT_DEVICE_TREE
	string "Default Device Tree for DT control"
	depends on OF_CONTROL
	help
	  This option specifies the default Device Tree used for DT control.
	  It can be overridden from the command line:
	  $ make DEVICE_TREE=<device-tree-name>

config DEVICE_TREE_INCLUDES
       string "Extra .dtsi files to include when building DT control"
	depends on OF_CONTROL
	help
	  U-Boot's control .dtb is usually built from an in-tree .dts
	  file, plus (if available) an in-tree U-Boot-specific .dtsi
	  file. This option specifies a space-separated list of extra
	  .dtsi files that will also be used.

config OF_LIST
	string "List of device tree files to include for DT control" if SPL_LOAD_FIT || MULTI_DTB_FIT
	depends on OF_CONTROL
	default DEFAULT_DEVICE_TREE
	help
	  This option specifies a list of device tree files to use for DT
	  control. These will be packaged into a FIT. At run-time, U-Boot
	  or SPL will select the correct DT to use by examining the
	  hardware (e.g. reading a board ID value). This is a list of
	  device tree files (without the directory or .dtb suffix)
	  separated by <space>.

config OF_OVERLAY_LIST
	string "List of device tree overlays to include for DT control"
	help
	  This option specifies a list of device tree overlays to use for DT
	  control. This option can then be used by a FIT generator to include
	  the overlays in the FIT image or by binman when assembling an image
	  that uses overlays during DT fixup.

choice
	prompt "OF LIST compression"
	depends on MULTI_DTB_FIT
	default MULTI_DTB_FIT_NO_COMPRESSION

config MULTI_DTB_FIT_LZO
	bool "LZO"
	depends on SYS_MALLOC_F
	select LZO
	help
	  Compress the FIT image containing the DTBs available for the SPL
	  using LZO compression. (requires lzop on host).

config MULTI_DTB_FIT_GZIP
	bool "GZIP"
	depends on SYS_MALLOC_F
	select GZIP
	help
	  Compress the FIT image containing the DTBs available for the SPL
	  using GZIP compression. (requires gzip on host)

config MULTI_DTB_FIT_NO_COMPRESSION
	bool "No compression"
	help
	  Do not compress the FIT image containing the DTBs available for the SPL.
	  Use this options only if LZO is not available and the DTBs are very small.
endchoice

choice
	prompt "Location of uncompressed DTBs"
	depends on (MULTI_DTB_FIT_GZIP || MULTI_DTB_FIT_LZO)
	default MULTI_DTB_FIT_DYN_ALLOC if SYS_MALLOC_F

config MULTI_DTB_FIT_DYN_ALLOC
	bool "Dynamically allocate the memory"
	depends on SYS_MALLOC_F

config MULTI_DTB_FIT_USER_DEFINED_AREA
	bool "User-defined location"
endchoice

config MULTI_DTB_FIT_UNCOMPRESS_SZ
	hex "Size of memory reserved to uncompress the DTBs"
	default 0x8000
	help
	   This is the size of this area where the DTBs are uncompressed.
	   If this area is dynamically allocated, make sure that
	   SYS_MALLOC_F_LEN is big enough to contain it.

config MULTI_DTB_FIT_USER_DEF_ADDR
	hex "Address of memory where dtbs are uncompressed"
	depends on MULTI_DTB_FIT_USER_DEFINED_AREA
	help
	   the FIT image containing the DTBs is uncompressed in an area defined
	   at compilation time. This is the address of this area. It must be
	   aligned on 2-byte boundary.

config DTB_RESELECT
	bool "Support swapping dtbs at a later point in boot"
	depends on MULTI_DTB_FIT
	help
	  It is possible during initial boot you may need to use a generic
	  dtb until you can fully determine the board your running on. This
	  config allows boards to implement a function at a later point
	  during boot to switch to the "correct" dtb.

config MULTI_DTB_FIT
	bool "Support embedding several DTBs in a FIT image for u-boot"
	help
	  This option provides hooks to allow U-Boot to parse an
	  appended FIT image and enable board specific code to then select
	  the correct DTB to be used. Use this if you need to support
	  multiple DTBs but don't use the SPL.


config SPL_MULTI_DTB_FIT
	depends on SPL_LOAD_FIT && SPL_OF_REAL
	bool "Support embedding several DTBs in a FIT image for the SPL"
	help
	  This option provides the SPL with the ability to select its own
	  DTB at runtime from an appended FIT image containing several DTBs.
	  This allows using the same SPL binary on multiple platforms.
	  The primary purpose is to handle different versions of
	  the same platform without tweaking the platform code if the
	  differences can be expressed in the DTBs (common examples are: bus
	  capabilities, pad configurations).

config SPL_OF_LIST
	string "List of device tree files to include for DT control in SPL" if SPL_MULTI_DTB_FIT
	depends on SPL_OF_CONTROL
	default OF_LIST
	help
	  This option specifies a list of device tree files to use for DT
	  control in the SPL. These will be packaged into a FIT. At run-time,
	  the SPL will select the correct DT to use by examining the
	  hardware (e.g. reading a board ID value). This is a list of
	  device tree files (without the directory or .dtb suffix)
	  separated by <space>.

choice
	prompt "SPL OF LIST compression"
	depends on SPL_MULTI_DTB_FIT
	default SPL_MULTI_DTB_FIT_LZO

config SPL_MULTI_DTB_FIT_LZO
	bool "LZO"
	depends on SYS_MALLOC_F
	select SPL_LZO
	help
	  Compress the FIT image containing the DTBs available for the SPL
	  using LZO compression. (requires lzop on host).

config SPL_MULTI_DTB_FIT_GZIP
	bool "GZIP"
	depends on SYS_MALLOC_F
	select SPL_GZIP
	help
	  Compress the FIT image containing the DTBs available for the SPL
	  using GZIP compression. (requires gzip on host)

config SPL_MULTI_DTB_FIT_NO_COMPRESSION
	bool "No compression"
	help
	  Do not compress the FIT image containing the DTBs available for the SPL.
	  Use this options only if LZO is not available and the DTBs are very small.
endchoice

choice
	prompt "Location of uncompressed DTBs"
	depends on (SPL_MULTI_DTB_FIT_GZIP || SPL_MULTI_DTB_FIT_LZO)
	default SPL_MULTI_DTB_FIT_DYN_ALLOC if SYS_MALLOC_F

config SPL_MULTI_DTB_FIT_DYN_ALLOC
	bool "Dynamically allocate the memory"
	depends on SYS_MALLOC_F

config SPL_MULTI_DTB_FIT_USER_DEFINED_AREA
	bool "User-defined location"
endchoice

config SPL_MULTI_DTB_FIT_UNCOMPRESS_SZ
	hex "Size of memory reserved to uncompress the DTBs"
	depends on (SPL_MULTI_DTB_FIT_GZIP || SPL_MULTI_DTB_FIT_LZO)
	default 0x8000
	help
	   This is the size of this area where the DTBs are uncompressed.
	   If this area is dynamically allocated, make sure that
	   SPL_SYS_MALLOC_F_LEN is big enough to contain it.

config SPL_MULTI_DTB_FIT_USER_DEF_ADDR
	hex "Address of memory where dtbs are uncompressed"
	depends on SPL_MULTI_DTB_FIT_USER_DEFINED_AREA
	help
	   the FIT image containing the DTBs is uncompressed in an area defined
	   at compilation time. This is the address of this area. It must be
	   aligned on 2-byte boundary.

config OF_TAG_MIGRATE
	bool "Ease migration from old device trees with u-boot,dm- tags"
	default y
	help
	  U-Boot moved over to use new tags to mark device tree nodes which need
	  to be processed in SPL, before relocation, etc. Enable this option to
	  detect old tags and handle them.

	  Note: This option will be removed after the 2023.07 release.

config OF_SPL_REMOVE_PROPS
	string "List of device tree properties to drop for SPL"
	depends on SPL_OF_CONTROL
	default "interrupt-parent interrupts" if SPL_PINCTRL && SPL_CLK
	default "clocks clock-names interrupt-parent interrupts" if SPL_PINCTRL
	default "pinctrl-0 pinctrl-names interrupt-parent interrupts" if SPL_CLK
	default "pinctrl-0 pinctrl-names clocks clock-names interrupt-parent interrupts"
	help
	  Since SPL normally runs in a reduced memory space, the device tree
	  is cut down to only what is needed to load and start U-Boot. Only
	  nodes marked with the property "bootph-all" will be
	  included. In addition, some properties are not used by U-Boot and
	  can be discarded. This option defines the list of properties to
	  discard.

config OF_DTB_PROPS_REMOVE
	bool "Enable removal of device tree properties"
	depends on OF_CONTROL
	help
	  Some boards have restricted amount of storage for U-Boot image.
	  If the generated binary doesn't fit into available image storage,
	  the built-in device tree could probably be cut down by removing
	  some not required device tree properties to reduce the image size.
	  Enable this option and define the properties to be removed in the
	  CONFIG_OF_REMOVE_PROPS list. Do not enable this option if you must
	  pass the built-in DTB directly to the kernel!

config OF_REMOVE_PROPS
	string "List of device tree properties to drop"
	depends on OF_DTB_PROPS_REMOVE
	default "interrupt-parent interrupts" if PINCTRL
	help
	  Some properties are not used by U-Boot and can be discarded.
	  This option defines the list of properties to discard.

config SPL_OF_PLATDATA
	bool "Generate platform data for use in SPL"
	depends on SPL_OF_CONTROL
	select DTOC
	select SPL_OF_PLATDATA_DRIVER_RT if !SPL_OF_PLATDATA_INST
	help
	  For very constrained SPL environments the overhead of decoding
	  device tree nodes and converting their contents into platform data
	  is too large. This overhead includes libfdt code as well as the
	  device tree contents itself. The latter is fairly compact, but the
	  former can add 3KB or more to a Thumb 2 Image.

	  This option enables generation of platform data from the device
	  tree as C code. This code creates devices using U_BOOT_DRVINFO()
	  declarations. The benefit is that it allows driver code to access
	  the platform data directly in C structures, avoidin the libfdt
	  overhead.

	  This option works by generating C structure declarations for each
	  compatible string, then adding platform data and U_BOOT_DRVINFO
	  declarations for each node. See of-plat.txt for more information.

config SPL_OF_REAL
	bool "Support a real devicetree in SPL" if SANDBOX
	depends on SPL_OF_CONTROL
	select SPL_OF_LIBFDT
	help
	  Indicates that a real devicetree is available which can be accessed
	  at runtime. This means that dev_read_...() functions can be used to
	  read data from the devicetree for each device. You do not need to
	  enable this option if you have enabled SPL_OF_PLATDATA.

if SPL_OF_PLATDATA

config SPL_OF_PLATDATA_PARENT
	bool "Support parent information in devices"
	default y
	help
	  Generally it is useful to be able to access the parent of a device
	  with of-platdata. To save space this can be disabled, but in that
	  case dev_get_parent() will always return NULL;

config SPL_OF_PLATDATA_INST
	bool "Declare devices at build time"
	help
	  Declare devices as udevice instances so that they do not need to be
	  bound when U-Boot starts. This can save time and code space.

config SPL_OF_PLATDATA_NO_BIND
	bool "Don't allow run-time binding of devices"
	depends on SPL_OF_PLATDATA_INST
	default y
	help
	  This removes the ability to bind devices at run time, thus saving
	  some code space in U-Boot. This can be disabled if binding is needed,
	  at the code of some code size increase.

config SPL_OF_PLATDATA_RT
	bool "Use a separate struct for device runtime data"
	depends on SPL_OF_PLATDATA_INST
	default y
	help
	  For systems running SPL from read-only memory it is convenient to
	  separate out the runtime information, so that the devices don't need
	  to be copied before being used. This moves the read-write parts of
	  struct udevice (at present just the flags) into a separate struct,
	  which is allocated at runtime.

config SPL_OF_PLATDATA_DRIVER_RT
	bool
	help
	  Use a separate struct for driver runtime data.

	  This enables the driver_rt information, used with of-platdata when
	  of-platdata-inst is not used. It allows finding devices by their
	  driver data.

endif

config TPL_OF_REAL
	bool
	help
	  Indicates that a real devicetree is available which can be accessed
	  at runtime. This means that dev_read_...() functions can be used to
	  read data from the devicetree for each device. This is true if
	  TPL_OF_CONTROL is enabled and not TPL_OF_PLATDATA

config TPL_OF_PLATDATA
	bool "Generate platform data for use in TPL"
	depends on TPL_OF_CONTROL
	select DTOC
	select TPL_OF_PLATDATA_DRIVER_RT if !TPL_OF_PLATDATA_INST
	help
	  For very constrained SPL environments the overhead of decoding
	  device tree nodes and converting their contents into platform data
	  is too large. This overhead includes libfdt code as well as the
	  device tree contents itself. The latter is fairly compact, but the
	  former can add 3KB or more to a Thumb 2 Image.

	  This option enables generation of platform data from the device
	  tree as C code. This code creates devices using U_BOOT_DRVINFO()
	  declarations. The benefit is that it allows driver code to access
	  the platform data directly in C structures, avoidin the libfdt
	  overhead.

	  This option works by generating C structure declarations for each
	  compatible string, then adding platform data and U_BOOT_DRVINFO
	  declarations for each node. See of-plat.txt for more information.

if TPL_OF_PLATDATA

config TPL_OF_PLATDATA_PARENT
	bool "Support parent information in devices"
	default y
	help
	  Generally it is useful to be able to access the parent of a device
	  with of-platdata. To save space this can be disabled, but in that
	  case dev_get_parent() will always return NULL;

config TPL_OF_PLATDATA_INST
	bool "Declare devices at build time"

	help
	  Declare devices as udevice instances so that they do not need to be
	  bound when U-Boot starts. This can save time and code space.

config TPL_OF_PLATDATA_NO_BIND
	bool "Don't allow run-time binding of devices"
	depends on TPL_OF_PLATDATA_INST
	default y
	help
	  This removes the ability to bind devices at run time, thus saving
	  some code space in U-Boot. This can be disabled if binding is needed,
	  at the code of some code size increase.

config TPL_OF_PLATDATA_RT
	bool "Use a separate struct for device runtime data"
	depends on TPL_OF_PLATDATA_INST
	default y
	help
	  For systems running TPL from read-only memory it is convenient to
	  separate out the runtime information, so that the devices don't need
	  to be copied before being used. This moves the read-write parts of
	  struct udevice (at present just the flags) into a separate struct,
	  which is allocated at runtime.

config TPL_OF_PLATDATA_DRIVER_RT
	bool
	help
	  Use a separate struct for driver runtime data.

	  This enables the driver_rt information, used with of-platdata when
	  of-platdata-inst is not used. It allows finding devices by their
	  driver data.

endif

config VPL_OF_REAL
	def_bool y
	depends on VPL
	help
	  Indicates that a real devicetree is available which can be accessed
	  at runtime. This means that dev_read_...() functions can be used to
	  read data from the devicetree for each device. This is true if
	  TPL_OF_CONTROL is enabled and not TPL_OF_PLATDATA

endmenu
