if TI816X

config TARGET_TI816X_EVM
	bool "Support ti816x_evm"
	help
	  This option specifies support for the TI8168 EVM development platform
	  with PG2.0 silicon and DDR3 DRAM.

endif

if TI814X

config TARGET_TI814X_EVM
	bool "Support ti814x_evm"
	help
	  This option specifies support for the TI8148
	  EVM development platform.

endif

if AM33XX

config AM33XX_CHILISOM
	bool
	select SUPPORT_SPL

choice
	prompt "AM33xx board select"

config TARGET_AM335X_EVM
	bool "Support am335x_evm"
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL
	select DM_GPIO
	select TI_I2C_BOARD_DETECT
	imply SPL_ENV_SUPPORT
	imply SPL_EXT_SUPPORT
	imply SPL_FAT_SUPPORT
	imply SPL_GPIO_SUPPORT
	imply SPL_I2C_SUPPORT
	imply SPL_LIBCOMMON_SUPPORT
	imply SPL_LIBDISK_SUPPORT
	imply SPL_LIBGENERIC_SUPPORT
	imply SPL_MMC_SUPPORT
	imply SPL_NAND_SUPPORT
	imply SPL_POWER_SUPPORT
	imply SPL_SERIAL_SUPPORT
	imply SPL_WATCHDOG_SUPPORT
	imply SPL_YMODEM_SUPPORT
	imply SPL_SYS_MALLOC_SIMPLE
	imply SPL_SEPARATE_BSS
	imply SPL_DM
	imply SPL_DM_SEQ_ALIAS
	imply SPL_OF_LIBFDT
	help
	  This option specifies support for the AM335x
	  GP and HS EVM development platforms. The AM335x
	  GP EVM is a standalone test, development, and
	  evaluation module system that enables developers
	  to write software and develop hardware around
	  an AM335x processor subsystem.

config TARGET_AM335X_BALTOS
	bool "Support am335x_baltos"
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL
	select DM_GPIO

config TARGET_AM335X_IGEP003X
	bool "Support am335x_igep003x"
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL
	select DM_GPIO

config TARGET_AM335X_SHC
	bool "Support am335x based shc board from bosch"
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL
	select DM_GPIO
	imply CMD_SPL

config TARGET_AM335X_SL50
	bool "Support am335x_sl50"
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL
	select DM_GPIO

config TARGET_BAV335X
	bool "Support bav335x"
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL
	help
	  The BAV335x OEM Network Processor integrates all the functions of an
	  embedded network computer in a small, easy to use SODIMM module which
	  incorporates the popular Texas Instruments Sitara 32bit ARM Coretex-A8
	  processor, with fast DDR3 512MB SDRAM, 4GB of embedded MMC and a Gigabit
	  ethernet with simple connection to external connectors.

	  For more information, visit: http://birdland.com/oem

config TARGET_BRXRE1
	bool "Support BRXRE1"
	select BOARD_LATE_INIT

config TARGET_BRPPT1
	bool "Support BRPPT1"
	select BOARD_LATE_INIT

config TARGET_CHILIBOARD
	bool "Grinn chiliBoard"
	select AM33XX_CHILISOM
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL

config TARGET_CM_T335
	bool "Support cm_t335"
	select DM
	select DM_SERIAL
	select DM_GPIO

config TARGET_DRACO
	bool "Support draco"
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL
	select DM_GPIO

config TARGET_ETAMIN
	bool "Support etamin"
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL
	select DM_GPIO

config TARGET_PCM051
	bool "Support pcm051"
	select DM
	select DM_SERIAL
	select DM_GPIO

config TARGET_PENGWYN
	bool "Support pengwyn"
	select DM
	select DM_SERIAL
	select DM_GPIO

config TARGET_PEPPER
	bool "Support pepper"
	select DM
	select DM_SERIAL
	select DM_GPIO

config TARGET_PXM2
	bool "Support pxm2"
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL
	select DM_GPIO

config TARGET_RASTABAN
	bool "Support rastaban"
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL
	select DM_GPIO

config TARGET_RUT
	bool "Support rut"
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL
	select DM_GPIO

config TARGET_THUBAN
	bool "Support thuban"
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL
	select DM_GPIO

config TARGET_PDU001
	bool "Support PDU001"
	select DM
	select DM_SERIAL
	help
	  Support for PDU001 platform developed by EETS GmbH.
	  The PDU001 is a processor and display unit developed around
	  the Computing-Module m2 from bytes at work AG.

endchoice

endif

if AM43XX

choice
	prompt "AM43xx board select"

config TARGET_AM43XX_EVM
	bool "Support am43xx_evm"
	select BOARD_LATE_INIT
	select TI_I2C_BOARD_DETECT
	imply DM_ETH
	imply DM_I2C
	imply DM_SPI
	imply DM_SPI_FLASH
	imply SPI_FLASH_BAR
	imply SPL_ENV_SUPPORT
	imply SPL_EXT_SUPPORT
	imply SPL_FAT_SUPPORT
	imply SPL_GPIO_SUPPORT
	imply SPL_I2C_SUPPORT
	imply SPL_LIBCOMMON_SUPPORT
	imply SPL_LIBDISK_SUPPORT
	imply SPL_LIBGENERIC_SUPPORT
	imply SPL_MMC_SUPPORT
	imply SPL_NAND_SUPPORT
	imply SPL_POWER_SUPPORT
	imply SPL_SERIAL_SUPPORT
	imply SPL_WATCHDOG_SUPPORT
	imply SPL_YMODEM_SUPPORT
	help
	  This option specifies support for the AM43xx
	  GP and HS EVM development platforms.The AM437x
	  GP EVM is a standalone test, development, and
	  evaluation module system that enables developers
	  to write software and develop hardware around
	  an AM43xx processor subsystem.

config TARGET_CM_T43
	bool "Support cm_t43"

endchoice

config SPL_RTC_DDR_SUPPORT
	bool
	depends on SPL
	prompt "Enable RTC-DDR ONLY Support"
	help
	  If you want RTC-DDR ONLY Support, say Y. RTC Only with DDR in
	  self-refresh mode is a special power saving mode where in all
	  the other voltages are turned off apart from the RTC domain and DDR.
	  So only RTC is alive and ticking and one can program it to wake
	  up after a predetermined period. Once RTC alarm fires, the PMIC
	  powers up all the voltage domains. U-Boot takes a special path
	  as the DDR has contents is in self-refresh and restore path is
	  followed.

endif

if AM43XX || AM33XX
config ISW_ENTRY_ADDR
	hex "Address in memory or XIP flash of bootloader entry point"
	help
	  After any reset, the boot ROM on the AM43XX SOC
	  searches the boot media for a valid boot image.
	  For non-XIP devices, the ROM then copies the
	  image into internal memory.
	  For all boot modes, after the ROM processes the
	  boot image it eventually computes the entry
	  point address depending on the device type
	  (secure/non-secure), boot media (xip/non-xip) and
	  image headers.
	default 0x402F4000 if AM43XX
	default 0x402F0400 if AM33XX

config PUB_ROM_DATA_SIZE
	hex "Size in bytes of the L3 SRAM reserved by ROM to store data"
	help
	  During the device boot, the public ROM uses the top of
	  the public L3 OCMC RAM to store r/w data like stack,
	  heap, globals etc. When the ROM is copying the boot
	  image from the boot media into memory, the image must
	  not spill over into this area. This value can be used
	  during compile time to determine the maximum size of a
	  boot image. Once the ROM transfers control to the boot
	  image, this area is no longer used, and can be reclaimed
	  for run time use by the boot image.
	default 0x8400
endif
