if ARCH_K3

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

config SOC_K3_AM654
	bool "TI's K3 based AM654 SoC Family Support"

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

config SOC_K3_J721S2
	bool "TI's K3 based J721S2 SoC Family Support"

config SOC_K3_AM642
	bool "TI's K3 based AM642 SoC Family Support"

config SOC_K3_AM625
	bool "TI's K3 based AM625 SoC Family Support"

config SOC_K3_AM62A7
	bool "TI's K3 based AM62A7 SoC Family Support"

endchoice

config SYS_SOC
	default "k3"

config SYS_K3_NON_SECURE_MSRAM_SIZE
	hex
	default 0x80000 if SOC_K3_AM654
	default 0x100000 if SOC_K3_J721E || SOC_K3_J721S2
	default 0x1c0000 if SOC_K3_AM642
	default 0x3c000 if SOC_K3_AM625 || SOC_K3_AM62A7
	help
	  Describes the total size of the MCU or OCMC MSRAM present on
	  the SoC in use. 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_AM654
	default 0xc0000 if SOC_K3_J721E || SOC_K3_J721S2
	default 0x180000 if SOC_K3_AM642
	default 0x38000 if SOC_K3_AM625 || SOC_K3_AM62A7
	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_AM654
	default 0x40280000 if SOC_K3_J721E || SOC_K3_J721S2
	help
	  Describes the base address of MCU Scratchpad RAM.

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

config SYS_K3_BOOT_PARAM_TABLE_INDEX
	hex
	default 0x41c7fbfc if SOC_K3_AM654
	default 0x41cffbfc if SOC_K3_J721E
	default 0x41cfdbfc if SOC_K3_J721S2
	default 0x701bebfc if SOC_K3_AM642
	default 0x43c3f290 if SOC_K3_AM625 || SOC_K3_AM62A7
	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 163840 if SOC_K3_AM625 || SOC_K3_AM62A7
	default	278000
	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 K3_SYSFW_IMAGE_SPI_OFFS
	hex "SPI offset of SYSFW firmware and configuration blob"
	depends on K3_LOAD_SYSFW
	default	0x6C0000
	help
	  Offset of the combined System Firmware and configuration image tree
	  blob to be loaded when booting from a SPI flash memory.

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.

config K3_ATF_LOAD_ADDR
	hex "Load address of ATF image"
	default 0x70000000
	help
	  The load address for the ATF image. This value defaults to 0x70000000
	  if not provided in the board defconfig file.

config K3_DM_FW
	bool "Separate DM firmware image"
	depends on SPL && CPU_V7R && (SOC_K3_J721E || SOC_K3_J721S2 || SOC_K3_AM625 || SOC_K3_AM62A7) && !CLK_TI_SCI && !TI_SCI_POWER_DOMAIN
	default y
	help
	  Enabling this will indicate that the system has separate DM
	  and TIFS firmware images in place, instead of a single SYSFW
	  firmware. Due to DM being executed on the same core as R5 SPL
	  bootloader, it makes RM and PM services not being available
	  during R5 SPL execution time.

config K3_X509_SWRV
	int "SWRV for X509 certificate used for boot images"
	default 1
	help
	  SWRV for X509 certificate used for boot images

source "board/ti/am65x/Kconfig"
source "board/ti/am64x/Kconfig"
source "board/ti/am62x/Kconfig"
source "board/ti/am62ax/Kconfig"
source "board/ti/j721e/Kconfig"
source "board/siemens/iot2050/Kconfig"
source "board/ti/j721s2/Kconfig"
endif
