menu "Generic Driver Options"

config DM
	bool "Enable Driver Model"
	help
	  This config option enables Driver Model. This brings in the core
	  support, including scanning of platform data on start-up. If
	  CONFIG_OF_CONTROL is enabled, the device tree will be scanned also
	  when available.

config SPL_DM
	bool "Enable Driver Model for SPL"
	depends on DM && SPL
	help
	  Enable driver model in SPL. You will need to provide a
	  suitable malloc() implementation. If you are not using the
	  full malloc() enabled by CONFIG_SYS_SPL_MALLOC_START,
	  consider using CONFIG_SYS_MALLOC_SIMPLE. In that case you
	  must provide CONFIG_SPL_SYS_MALLOC_F_LEN to set the size.
	  In most cases driver model will only allocate a few uclasses
	  and devices in SPL, so 1KB should be enable. See
	  CONFIG_SPL_SYS_MALLOC_F_LEN for more details on how to enable it.

config TPL_DM
	bool "Enable Driver Model for TPL"
	depends on DM && TPL
	help
	  Enable driver model in TPL. You will need to provide a
	  suitable malloc() implementation. If you are not using the
	  full malloc() enabled by CONFIG_SYS_SPL_MALLOC_START,
	  consider using CONFIG_SYS_MALLOC_SIMPLE. In that case you
	  must provide CONFIG_SPL_SYS_MALLOC_F_LEN to set the size.
	  In most cases driver model will only allocate a few uclasses
	  and devices in SPL, so 1KB should be enough. See
	  CONFIG_SPL_SYS_MALLOC_F_LEN for more details on how to enable it.
	  Disable this for very small implementations.

config DM_WARN
	bool "Enable warnings in driver model"
	depends on DM
	default y
	help
	  The dm_warn() function can use up quite a bit of space for its
	  strings. By default this is disabled for SPL builds to save space.
	  This will cause dm_warn() to be compiled out - it will do nothing
	  when called.

config DM_DEBUG
	bool "Enable debug messages in driver model core"
	depends on DM
	help
	  Say Y here if you want to compile in debug messages in DM core.

config DM_DEVICE_REMOVE
	bool "Support device removal"
	depends on DM
	default y
	help
	  We can save some code space by dropping support for removing a
	  device.

	  Note that this may have undesirable results in the USB subsystem as
	  it causes unplugged devices to linger around in the dm-tree, and it
	  causes USB host controllers to not be stopped when booting the OS.

config SPL_DM_DEVICE_REMOVE
	bool "Support device removal in SPL"
	depends on SPL_DM
	default n
	help
	  We can save some code space by dropping support for removing a
	  device. This is not normally required in SPL, so by default this
	  option is disabled for SPL.

config DM_STDIO
	bool "Support stdio registration"
	depends on DM
	default y
	help
	  Normally serial drivers register with stdio so that they can be used
	  as normal output devices. In SPL we don't normally use stdio, so
	  we can omit this feature.

config DM_SEQ_ALIAS
	bool "Support numbered aliases in device tree"
	depends on DM
	default y
	help
	  Most boards will have a '/aliases' node containing the path to
	  numbered devices (e.g. serial0 = &serial0). This feature can be
	  disabled if it is not required.

config SPL_DM_SEQ_ALIAS
	bool "Support numbered aliases in device tree in SPL"
	depends on SPL_DM
	default n
	help
	  Most boards will have a '/aliases' node containing the path to
	  numbered devices (e.g. serial0 = &serial0). This feature can be
	  disabled if it is not required, to save code space in SPL.

config REGMAP
	bool "Support register maps"
	depends on DM
	help
	  Hardware peripherals tend to have one or more sets of registers
	  which can be accessed to control the hardware. A register map
	  models this with a simple read/write interface. It can in principle
	  support any bus type (I2C, SPI) but so far this only supports
	  direct memory access.

config SPL_REGMAP
	bool "Support register maps in SPL"
	depends on SPL_DM
	help
	  Hardware peripherals tend to have one or more sets of registers
	  which can be accessed to control the hardware. A register map
	  models this with a simple read/write interface. It can in principle
	  support any bus type (I2C, SPI) but so far this only supports
	  direct memory access.

config TPL_REGMAP
	bool "Support register maps in TPL"
	depends on TPL_DM
	help
	  Hardware peripherals tend to have one or more sets of registers
	  which can be accessed to control the hardware. A register map
	  models this with a simple read/write interface. It can in principle
	  support any bus type (I2C, SPI) but so far this only supports
	  direct memory access.

config SYSCON
	bool "Support system controllers"
	depends on REGMAP
	help
	  Many SoCs have a number of system controllers which are dealt with
	  as a group by a single driver. Some common functionality is provided
	  by this uclass, including accessing registers via regmap and
	  assigning a unique number to each.

config SPL_SYSCON
	bool "Support system controllers in SPL"
	depends on SPL_REGMAP
	help
	  Many SoCs have a number of system controllers which are dealt with
	  as a group by a single driver. Some common functionality is provided
	  by this uclass, including accessing registers via regmap and
	  assigning a unique number to each.

config TPL_SYSCON
	bool "Support system controllers in TPL"
	depends on TPL_REGMAP
	help
	  Many SoCs have a number of system controllers which are dealt with
	  as a group by a single driver. Some common functionality is provided
	  by this uclass, including accessing registers via regmap and
	  assigning a unique number to each.

config DEVRES
	bool "Managed device resources"
	depends on DM
	help
	  This option enables the Managed device resources core support.
	  Device resources managed by the devres framework are automatically
	  released whether initialization fails half-way or the device gets
	  detached.

	  If this option is disabled, devres functions fall back to
	  non-managed variants.  For example, devres_alloc() to kzalloc(),
	  devm_kmalloc() to kmalloc(), etc.

config DEBUG_DEVRES
	bool "Managed device resources debugging functions"
	depends on DEVRES
	help
	  If this option is enabled, devres debug messages are printed.
	  Also, a function is available to dump a list of device resources.
	  Select this if you are having a problem with devres or want to
	  debug resource management for a managed device.

	  If you are unsure about this, Say N here.

config SIMPLE_BUS
	bool "Support simple-bus driver"
	depends on DM && OF_CONTROL
	default y
	help
	  Supports the 'simple-bus' driver, which is used on some systems.

config SPL_SIMPLE_BUS
	bool "Support simple-bus driver in SPL"
	depends on SPL_DM && SPL_OF_CONTROL
	default y
	help
	  Supports the 'simple-bus' driver, which is used on some systems
	  in SPL.

config OF_TRANSLATE
	bool "Translate addresses using fdt_translate_address"
	depends on DM && OF_CONTROL
	default y
	help
	  If this option is enabled, the reg property will be translated
	  using the fdt_translate_address() function. This is necessary
	  on some platforms (e.g. MVEBU) using complex "ranges"
	  properties in many nodes. As this translation is not handled
	  correctly in the default simple_bus_translate() function.

	  If this option is not enabled, simple_bus_translate() will be
	  used for the address translation. This function is faster and
	  smaller in size than fdt_translate_address().

config SPL_OF_TRANSLATE
	bool "Translate addresses using fdt_translate_address in SPL"
	depends on SPL_DM && SPL_OF_CONTROL
	default n
	help
	  If this option is enabled, the reg property will be translated
	  using the fdt_translate_address() function. This is necessary
	  on some platforms (e.g. MVEBU) using complex "ranges"
	  properties in many nodes. As this translation is not handled
	  correctly in the default simple_bus_translate() function.

	  If this option is not enabled, simple_bus_translate() will be
	  used for the address translation. This function is faster and
	  smaller in size than fdt_translate_address().

config TRANSLATION_OFFSET
	bool "Platforms specific translation offset"
	depends on DM && OF_CONTROL
	help
	  Some platforms need a special address translation. Those
	  platforms (e.g. mvebu in SPL) can configure a translation
	  offset by enabling this option and setting the translation_offset
	  variable in the GD in their platform- / board-specific code.

config OF_ISA_BUS
	bool
	depends on OF_TRANSLATE
	help
	  Is this option is enabled then support for the ISA bus will
	  be included for addresses read from DT. This is something that
	  should be known to be required or not based upon the board
	  being targeted, and whether or not it makes use of an ISA bus.

	  The bus is matched based upon its node name equalling "isa". The
	  busses #address-cells should equal 2, with the first cell being
	  used to hold flags & flag 0x1 indicating that the address range
	  should be accessed using I/O port in/out accessors. The second
	  cell holds the offset into ISA bus address space. The #size-cells
	  property should equal 1, and of course holds the size of the
	  address range used by a device.

	  If this option is not enabled then support for the ISA bus is
	  not included and any such busses used in DT will be treated as
	  typical simple-bus compatible busses. This will lead to
	  mistranslation of device addresses, so ensure that this is
	  enabled if your board does include an ISA bus.

config DM_DEV_READ_INLINE
	bool
	default y if !OF_LIVE

endmenu
