if ARCH_K3

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

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"

config SOC_K3_AM62P5
	bool "TI's K3 based AM62P5 SoC Family Support"

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

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_J784S4
	bool "TI's K3 based J784S4 SoC Family Support"

endchoice

if SOC_K3_J721E
config SOC_K3_J721E_J7200
	bool "TI's K3 based J7200 SoC variant Family Support"
endif

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 || SOC_K3_J784S4
	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 || SOC_K3_J784S4
	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_J721E || SOC_K3_J721S2 || SOC_K3_J784S4
	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 || SOC_K3_J784S4
	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 || SOC_K3_J784S4
	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
	default 0x43c4f290 if SOC_K3_AM62P5
	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_ATF_LOAD_ADDR
	hex "Load address of ATF image"
	default 0x80000000 if (SOC_K3_AM625 || SOC_K3_AM62A7 || SOC_K3_AM62P5)
	default 0x70000000
	help
	  The load address for the ATF image. This value is used to build the
	  FIT image header that places ATF in memory where it will run.

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

config K3_DM_FW
	bool "Separate DM firmware image"
	depends on CPU_V7R && !SOC_K3_AM642 && !SOC_K3_AM654 && !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

if CPU_V7R
source "arch/arm/mach-k3/r5/Kconfig"
endif

source "arch/arm/mach-k3/am65x/Kconfig"
source "arch/arm/mach-k3/am64x/Kconfig"
source "arch/arm/mach-k3/am62x/Kconfig"
source "arch/arm/mach-k3/am62ax/Kconfig"
source "arch/arm/mach-k3/am62px/Kconfig"
source "arch/arm/mach-k3/j721e/Kconfig"
source "arch/arm/mach-k3/j721s2/Kconfig"
source "arch/arm/mach-k3/j784s4/Kconfig"

endif
