if ARCH_K3

choice
	prompt "Texas Instruments' K3 based SoC select"
	optional

config SOC_K3_AM6
	bool "TI's K3 based AM6 SoC Family Support"

config SOC_K3_J721E
	bool "TI's K3 based J721E SoC Family Support"

endchoice

config SYS_SOC
	default "k3"

config SYS_K3_NON_SECURE_MSRAM_SIZE
	hex
	default 0x80000 if SOC_K3_AM6
	default 0x100000 if SOC_K3_J721E
	help
	  Describes the total size of the MCU MSRAM. This doesn't
	  specify the total size of SPL as ROM can use some part
	  of this RAM. Once ROM gives control to SPL then this
	  complete size can be usable.

config SYS_K3_MAX_DOWNLODABLE_IMAGE_SIZE
	hex
	default 0x58000 if SOC_K3_AM6
	default 0xc0000 if SOC_K3_J721E
	help
	  Describes the maximum size of the image that ROM can download
	  from any boot media.

config SYS_K3_MCU_SCRATCHPAD_BASE
	hex
	default 0x40280000 if SOC_K3_AM6
	default 0x40280000 if SOC_K3_J721E
	help
	  Describes the base address of MCU Scratchpad RAM.

config SYS_K3_MCU_SCRATCHPAD_SIZE
	hex
	default 0x200 if SOC_K3_AM6
	default 0x200 if SOC_K3_J721E
	help
	  Describes the size of MCU Scratchpad RAM.

config SYS_K3_BOOT_PARAM_TABLE_INDEX
	hex
	default 0x41c7fbfc if SOC_K3_AM6
	default 0x41cffbfc if SOC_K3_J721E
	help
	  Address at which ROM stores the value which determines if SPL
	  is booted up by primary boot media or secondary boot media.

config SYS_K3_KEY
	string "Key used to generate x509 certificate"
	help
	  This option enables to provide a custom key that can be used for
	  generating x509 certificate for spl binary. If not needed leave
	  it blank so that a random key is generated and used.

config SYS_K3_BOOT_CORE_ID
	int
	default 16

config K3_EARLY_CONS
	bool "Activate to allow for an early console during SPL"
	depends on SPL
	help
	  Turn this option on to enable an early console functionality in SPL
	  before the main console is being brought up. This can be useful in
	  situations where the main console is dependent on System Firmware
	  (SYSFW) being up and running, which is usually not the case during
	  the very early stages of boot. Using this early console functionality
	  will allow for an alternate serial port to be used to support things
	  like UART-based boot and early diagnostic messages until the main
	  console is ready to get activated.

config K3_EARLY_CONS_IDX
	depends on K3_EARLY_CONS
	int "Index of serial device to use for SPL early console"
	default 1
	help
	  Use this option to set the index of the serial device to be used
	  for the early console during SPL execution.

config K3_LOAD_SYSFW
	bool
	depends on SPL

config K3_SYSFW_IMAGE_NAME
	string "File name of SYSFW firmware and configuration blob"
	depends on K3_LOAD_SYSFW
	default	"sysfw.itb"
	help
	  Filename of the combined System Firmware and configuration image tree
	  blob to be loaded when booting from a filesystem.

config K3_SYSFW_IMAGE_MMCSD_RAW_MODE_SECT
	hex "MMC sector to load SYSFW firmware and configuration blob from"
	depends on K3_LOAD_SYSFW && SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
	default 0x3600
	help
	  Address on the MMC to load the combined System Firmware and
	  configuration image tree blob from, when the MMC is being used
	  in raw mode. Units: MMC sectors (1 sector = 512 bytes).

config K3_SYSFW_IMAGE_MMCSD_RAW_MODE_PART
	hex "MMC partition to load SYSFW firmware and configuration blob from"
	depends on K3_LOAD_SYSFW && SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
	default 2
	help
	  Partition on the MMC to the combined System Firmware and configuration
	  image tree blob from, when the MMC is being used in raw mode.

config K3_SYSFW_IMAGE_SIZE_MAX
	int "Amount of memory dynamically allocated for loading SYSFW blob"
	depends on K3_LOAD_SYSFW
	default	277000
	help
	  Amount of memory (in bytes) reserved through dynamic allocation at
	  runtime for loading the combined System Firmware and configuration image
	  tree blob. Keep it as tight as possible, as this directly affects the
	  overall SPL memory footprint.

config SYS_K3_SPL_ATF
	bool "Start Cortex-A from SPL"
	depends on SPL && CPU_V7R
	help
	  Enabling this will try to start Cortex-A (typically with ATF)
	  after SPL from R5.

source "board/ti/am65x/Kconfig"
source "board/ti/j721e/Kconfig"
endif
