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_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 MTD
	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
