# SPDX-License-Identifier: GPL-2.0+
# Copyright (c) 2016 Toradex, Inc.

menuconfig TDX_CFG_BLOCK
	bool "Enable Toradex config block support"
	select OF_BOARD_SETUP
	help
	  The Toradex config block stored production data on the on-module
	  flash device (NAND, NOR or eMMC). The area is normally preserved by
	  software and contains the serial number (out of which the MAC
	  address is generated) and the exact module type.

# Helper config to determine the correct default location of the cfg block
config TDX_HAVE_MMC
	bool

config TDX_HAVE_NAND
	bool

config TDX_HAVE_NOR
	bool

config TDX_HAVE_EEPROM
	bool

config TDX_HAVE_EEPROM_EXTRA
	bool

if TDX_CFG_BLOCK

config TDX_CFG_BLOCK_IS_IN_MMC
	bool
	depends on TDX_HAVE_MMC
	default y

config TDX_CFG_BLOCK_IS_IN_NAND
	bool
	depends on TDX_HAVE_NAND
	default y

config TDX_CFG_BLOCK_IS_IN_NOR
	bool
	depends on TDX_HAVE_NOR
	default y

config TDX_CFG_BLOCK_IS_IN_EEPROM
	bool
	depends on TDX_HAVE_EEPROM
	default y

config TDX_CFG_BLOCK_DEV
	int "Toradex config block eMMC device ID"
	depends on TDX_CFG_BLOCK_IS_IN_MMC

config TDX_CFG_BLOCK_PART
	int "Toradex config block eMMC partition ID"
	depends on TDX_CFG_BLOCK_IS_IN_MMC

config TDX_CFG_BLOCK_OFFSET
	int "Toradex config block offset"
	help
	  Specify the byte offset of the Toradex config block within the flash
	  device the config block is stored on.

config TDX_CFG_BLOCK_OFFSET2
	int "Toradex config block offset, second instance"
	default 0
	help
	  Specify the byte offset of the 2nd instance of the Toradex config block
	  within the flash device the config block is stored on.
	  Set to 0 on modules which have no 2nd instance.

config TDX_CFG_BLOCK_2ND_ETHADDR
	bool "Set the second Ethernet address"
	help
	  For each serial number two Ethernet addresses are available for dual
	  Ethernet carrier boards. This options enables the code to set the
	  second Ethernet address as environment variable (eth1addr).

config TDX_CFG_BLOCK_EXTRA
	bool "Support for additional EEPROMs (carrier board, display adapter)"
	depends on TDX_HAVE_EEPROM_EXTRA
	help
	  Enables fetching auxilary config blocks from carrier board/display
	  adapter EEPROMs.

endif
