# SPDX-License-Identifier: GPL-2.0
config DTC
	bool

menuconfig OF
	bool "Device Tree and Open Firmware support"
	help
	  This option enables the device tree infrastructure.
	  It is automatically selected by platforms that need it or can
	  be enabled manually for unittests, overlays or
	  compile-coverage.

if OF

config OF_UNITTEST
	bool "Device Tree runtime unit tests"
	depends on !SPARC
	select IRQ_DOMAIN
	select OF_EARLY_FLATTREE
	select OF_RESOLVE
	help
	  This option builds in test cases for the device tree infrastructure
	  that are executed once at boot time, and the results dumped to the
	  console.

	  This option should only be enabled for a development kernel. The tests
	  will taint the kernel with TAINT_TEST. The tests will cause ERROR and
	  WARNING messages to print on the console. The tests will cause stack
	  traces to print on the console.  It is possible that the tests will
	  leave the devicetree in a corrupted state.

	  The unittest output will be verbose.  Copy the output to a file
	  via capturing the console output or via the dmesg command.  Process
	  this file with scripts/dtc/of_unittest_expect to reduce the
	  verbosity, test whether expected output is present, and to
	  summarize the results.

	  If unsure, say N here. This option is not safe to enable.

config OF_ALL_DTBS
	bool "Build all Device Tree Blobs"
	depends on COMPILE_TEST
	select DTC
	help
	  This option builds all possible Device Tree Blobs (DTBs) for the
	  current architecture.

	  If unsure, say N here, but this option is safe to enable.

config OF_FLATTREE
	bool
	select DTC
	select LIBFDT
	select CRC32

config OF_EARLY_FLATTREE
	bool
	select DMA_DECLARE_COHERENT if HAS_DMA && HAS_IOMEM
	select OF_FLATTREE

config OF_PROMTREE
	bool

config OF_KOBJ
	def_bool SYSFS

# Hardly any platforms need this.  It is safe to select, but only do so if you
# need it.
config OF_DYNAMIC
	bool "Support for dynamic device trees" if OF_UNITTEST
	select OF_KOBJ
	help
	  On some platforms, the device tree can be manipulated at runtime.
	  While this option is selected automatically on such platforms, you
	  can enable it manually to improve device tree unit test coverage.

config OF_ADDRESS
	def_bool y
	depends on !SPARC && (HAS_IOMEM || UML)

config OF_IRQ
	def_bool y
	depends on !SPARC && IRQ_DOMAIN

config OF_RESERVED_MEM
	def_bool OF_EARLY_FLATTREE

config OF_RESOLVE
	bool

config OF_OVERLAY
	bool "Device Tree overlays"
	select OF_DYNAMIC
	select OF_FLATTREE
	select OF_RESOLVE
	help
	  Overlays are a method to dynamically modify part of the kernel's
	  device tree with dynamically loaded data.
	  While this option is selected automatically when needed, you can
	  enable it manually to improve device tree unit test coverage.

config OF_NUMA
	bool

endif # OF