# 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 ARCH_DAVINCI || ARCH_OMAP || ARCH_KEYSTONE
	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 ARCH_OMAP
	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
	tristate "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 SOC_TI
	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
	tristate "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
       tristate
       default TI_K3_UDMA

config TI_DMA_CROSSBAR
	bool
