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 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 VIDEO
	select 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_DRACO
	bool "Support draco"
	select BOARD_LATE_INIT
	select DM
	select DM_GPIO
	select DM_SERIAL
	select FACTORYSET
	imply CMD_DM

config TARGET_ETAMIN
	bool "Support etamin"
	select BOARD_LATE_INIT
	select DM
	select DM_GPIO
	select DM_SERIAL
	select FACTORYSET
	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
	select FACTORYSET
	imply CMD_DM

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

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

config TARGET_THUBAN
	bool "Support thuban"
	select BOARD_LATE_INIT
	select DM
	select DM_GPIO
	select DM_SERIAL
	select FACTORYSET
	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_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
