# SPDX-License-Identifier: GPL-2.0-only
# 64-bit ARM SoCs from TI
if ARM64

if ARCH_K3

config ARCH_K3_AM6_SOC
	bool "K3 AM6 SoC"
	help
	  Enable support for TI's AM6 SoC Family support

config ARCH_K3_J721E_SOC
	bool "K3 J721E SoC"
	help
	  Enable support for TI's J721E SoC Family support

endif

endif

#
# TI SOC drivers
#
menuconfig SOC_TI
	bool "TI SOC drivers support"

if SOC_TI

config KEYSTONE_NAVIGATOR_QMSS
	tristate "Keystone Queue Manager Sub System"
	depends on ARCH_KEYSTONE
	help
	  Say y here to support the Keystone multicore Navigator Queue
	  Manager support. The Queue Manager is a hardware module that
	  is responsible for accelerating management of the packet queues.
	  Packets are queued/de-queued by writing/reading descriptor address
	  to a particular memory mapped location in the Queue Manager module.

	  If unsure, say N.

config KEYSTONE_NAVIGATOR_DMA
	tristate "TI Keystone Navigator Packet DMA support"
	depends on ARCH_KEYSTONE
	help
	  Say y tp enable support for the Keystone Navigator Packet DMA on
	  on Keystone family of devices. It sets up the dma channels for the
	  Queue Manager Sub System.

	  If unsure, say N.

config AMX3_PM
	tristate "AMx3 Power Management"
	depends on SOC_AM33XX || SOC_AM43XX
	depends on WKUP_M3_IPC && TI_EMIF_SRAM && SRAM && RTC_DRV_OMAP
	help
	  Enable power management on AM335x and AM437x. Required for suspend to mem
	  and standby states on both AM335x and AM437x platforms and for deeper cpuidle
	  c-states on AM335x. Also required for rtc and ddr in self-refresh low
	  power mode on AM437x platforms.

config WKUP_M3_IPC
	tristate "TI AMx3 Wkup-M3 IPC Driver"
	depends on WKUP_M3_RPROC
	depends on OMAP2PLUS_MBOX
	help
	  TI AM33XX and AM43XX have a Cortex M3, the Wakeup M3, to handle
	  low power transitions. This IPC driver provides the necessary API
	  to communicate and use the Wakeup M3 for PM features like suspend
	  resume and boots it using wkup_m3_rproc driver.

config TI_SCI_PM_DOMAINS
	tristate "TI SCI PM Domains Driver"
	depends on TI_SCI_PROTOCOL
	depends on PM_GENERIC_DOMAINS
	help
	  Generic power domain implementation for TI device implementing
	  the TI SCI protocol.

	  To compile this as a module, choose M here. The module will be
	  called ti_sci_pm_domains. Note this is needed early in boot before
	  rootfs may be available.

config TI_K3_RINGACC
	bool "K3 Ring accelerator Sub System"
	depends on ARCH_K3 || COMPILE_TEST
	depends on TI_SCI_INTA_IRQCHIP
	help
	  Say y here to support the K3 Ring accelerator module.
	  The Ring Accelerator (RINGACC or RA)  provides hardware acceleration
	  to enable straightforward passing of work between a producer
	  and a consumer. There is one RINGACC module per NAVSS on TI AM65x SoCs
	  If unsure, say N.

config TI_K3_SOCINFO
	bool
	depends on ARCH_K3 || COMPILE_TEST
	select SOC_BUS
	select MFD_SYSCON
	help
	  Include support for the SoC bus socinfo for the TI K3 Multicore SoC
	  platforms to provide information about the SoC family and
	  variant to user space.

config TI_PRUSS
	tristate "TI PRU-ICSS Subsystem Platform drivers"
	depends on SOC_AM33XX || SOC_AM43XX || SOC_DRA7XX || ARCH_KEYSTONE || ARCH_K3
	select MFD_SYSCON
	help
	  TI PRU-ICSS Subsystem platform specific support.

	  Say Y or M here to support the Programmable Realtime Unit (PRU)
	  processors on various TI SoCs. It's safe to say N here if you're
	  not interested in the PRU or if you are unsure.

endif # SOC_TI

config TI_SCI_INTA_MSI_DOMAIN
	bool
	select GENERIC_MSI_IRQ_DOMAIN
	help
	  Driver to enable Interrupt Aggregator specific MSI Domain.
