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 0x41cff9fc if SOC_K3_J721S2
	default 0x41cff9fc 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_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
	default 0x43c3f290 if SOC_K3_AM62A7 && CPU_V7R
	default 0x7000f290 if SOC_K3_AM62A7 && ARM64
	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	280000
	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"
source "board/toradex/verdin-am62/Kconfig"
endif
