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_GPIO
	select DM_SERIAL
	select TI_I2C_BOARD_DETECT
	select SUPPORT_EXTENSION_SCAN
	imply CMD_DM
	imply SPL_DM
	imply SPL_DM_SEQ_ALIAS
	imply SPL_ENV_SUPPORT
	imply SPL_FS_EXT4
	imply SPL_FS_FAT
	imply SPL_GPIO
	imply SPL_I2C
	imply SPL_LIBCOMMON_SUPPORT
	imply SPL_LIBDISK_SUPPORT
	imply SPL_LIBGENERIC_SUPPORT
	imply SPL_MMC
	imply SPL_NAND_SUPPORT
	imply SPL_OF_LIBFDT
	imply SPL_POWER
	imply SPL_SEPARATE_BSS
	imply SPL_SERIAL
	imply SPL_SYS_MALLOC_SIMPLE
	imply SPL_WATCHDOG
	imply SPL_YMODEM_SUPPORT
	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_GPIO
	select DM_SERIAL
	imply CMD_DM

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

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

config TARGET_AM335X_GUARDIAN
	bool "Support am335x based guardian board from bosch"
	select BOARD_LATE_INIT
	select DM
	select DM_SERIAL
	select DM_GPIO
	select DM_VIDEO
	select DM_PANEL_HX8238D

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

config TARGET_BRXRE1
	bool "Support BRXRE1"
	select BOARD_LATE_INIT

config TARGET_BRSMARC1
	bool "Support BRSMARC1"
	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
	imply CMD_DM

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

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

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

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

config TARGET_PHYCORE_AM335X_R2
	bool "Support phyCORE AM335X R2"
	select DM
	select DM_GPIO
	select DM_SERIAL
	imply CMD_DM

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

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

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

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

config TARGET_PDU001
	bool "Support PDU001"
	select DM
	select DM_SERIAL
	imply SPL_SEPARATE_BSS
	imply CMD_DM
	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

config CLOCK_SYNTHESIZER
	bool "CDCE913 and CDCEL913 clock synthesizer support"
	help
	  The CDCE913 and CDCEL913 devices are modular PLL-based, low cost,
	  high performance , programmable clock synthesizers. They generate
	  up to 3 output clocks from a single input frequency. Each output can
	  be programmed for any clock-frequency.

config CLK_SYNTHESIZER_I2C_ADDR
	hex "Clock synthesizer i2c bus address"
	depends on CLOCK_SYNTHESIZER
	default 0x65

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 SPL_ENV_SUPPORT
	imply SPL_FS_EXT4
	imply SPL_FS_FAT
	imply SPL_GPIO
	imply SPL_I2C
	imply SPL_LIBCOMMON_SUPPORT
	imply SPL_LIBDISK_SUPPORT
	imply SPL_LIBGENERIC_SUPPORT
	imply SPL_MMC
	imply SPL_NAND_SUPPORT
	imply SPL_POWER
	imply SPL_SERIAL
	imply SPL_WATCHDOG
	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 PUB_ROM_DATA_SIZE
	hex "Size in bytes of the L3 SRAM reserved by ROM to store data"
	default 0x8400
	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.
endif

config AM335X_USB0
	bool "Static mode configuration for USB0 in SPL"
	depends on AM33XX && SPL_MUSB_NEW && !SPL_OF_CONTROL

choice
	prompt "USB0 port configuration"
	depends on AM335X_USB0

config AM335X_USB0_HOST
	bool "Port is used in host mode"

config AM335X_USB0_PERIPHERAL
	bool "Port is used in peripheral mode"

endchoice

config AM335X_USB1
	bool "Static mode configuration for USB1 in SPL"
	depends on AM33XX && SPL_MUSB_NEW && !SPL_OF_CONTROL

choice
	prompt "USB1 port configuration"
	depends on AM335X_USB1

config AM335X_USB1_HOST
	bool "Port is used in host mode"

config AM335X_USB1_PERIPHERAL
	bool "Port is used in peripheral mode"

endchoice
