# SPDX-License-Identifier: GPL-2.0-only
#
# Texas Instruments DMA drivers
#

config TI_CPPI41
	tristate "Texas Instruments CPPI 4.1 DMA support"
	depends on (ARCH_OMAP || ARCH_DAVINCI_DA8XX)
	select DMA_ENGINE
	help
	  The Communications Port Programming Interface (CPPI) 4.1 DMA engine
	  is currently used by the USB driver on AM335x and DA8xx platforms.

config TI_EDMA
	tristate "Texas Instruments EDMA support"
	depends on ARCH_DAVINCI || ARCH_OMAP || ARCH_KEYSTONE || COMPILE_TEST
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	select TI_DMA_CROSSBAR if (ARCH_OMAP || COMPILE_TEST)
	default y
	help
	  Enable support for the TI EDMA (Enhanced DMA) controller. This DMA
	  engine is found on TI DaVinci, AM33xx, AM43xx, DRA7xx and Keystone 2
	  parts.

config DMA_OMAP
	tristate "Texas Instruments sDMA (omap-dma) support"
	depends on ARCH_OMAP || COMPILE_TEST
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	select TI_DMA_CROSSBAR if (SOC_DRA7XX || COMPILE_TEST)
	default y
	help
	  Enable support for the TI sDMA (System DMA or DMA4) controller. This
	  DMA engine is found on OMAP and DRA7xx parts.

config TI_K3_UDMA
	bool "Texas Instruments UDMA support"
	depends on ARCH_K3 || COMPILE_TEST
	depends on TI_SCI_PROTOCOL
	depends on TI_SCI_INTA_IRQCHIP
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	select TI_K3_RINGACC
	select TI_K3_PSIL
        help
	  Enable support for the TI UDMA (Unified DMA) controller. This
	  DMA engine is used in AM65x and j721e.

config TI_K3_UDMA_GLUE_LAYER
	bool "Texas Instruments UDMA Glue layer for non DMAengine users"
	depends on ARCH_K3 || COMPILE_TEST
	depends on TI_K3_UDMA
	help
	  Say y here to support the K3 NAVSS DMA glue interface
	  If unsure, say N.

config TI_K3_PSIL
	bool

config TI_DMA_CROSSBAR
	bool
