#
# DMA engine configuration
#

menuconfig DMADEVICES
	bool "DMA Engine support"
	depends on HAS_DMA
	help
	  DMA engines can do asynchronous data transfers without
	  involving the host CPU.  Currently, this framework can be
	  used to offload memory copies in the network stack and
	  RAID operations in the MD driver.  This menu only presents
	  DMA Device drivers supported by the configured arch, it may
	  be empty in some cases.

config DMADEVICES_DEBUG
        bool "DMA Engine debugging"
        depends on DMADEVICES != n
        help
          This is an option for use by developers; most people should
          say N here.  This enables DMA engine core and driver debugging.

config DMADEVICES_VDEBUG
        bool "DMA Engine verbose debugging"
        depends on DMADEVICES_DEBUG != n
        help
          This is an option for use by developers; most people should
          say N here.  This enables deeper (more verbose) debugging of
          the DMA engine core and drivers.


if DMADEVICES

comment "DMA Devices"

#core
config ASYNC_TX_ENABLE_CHANNEL_SWITCH
	bool

config ARCH_HAS_ASYNC_TX_FIND_CHANNEL
	bool

config DMA_ENGINE
	bool

config DMA_VIRTUAL_CHANNELS
	tristate

config DMA_ACPI
	def_bool y
	depends on ACPI

config DMA_OF
	def_bool y
	depends on OF
	select DMA_ENGINE

#devices
config AMBA_PL08X
	bool "ARM PrimeCell PL080 or PL081 support"
	depends on ARM_AMBA
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Platform has a PL08x DMAC device
	  which can provide DMA engine support

config AMCC_PPC440SPE_ADMA
	tristate "AMCC PPC440SPe ADMA support"
	depends on 440SPe || 440SP
	select DMA_ENGINE
	select DMA_ENGINE_RAID
	select ARCH_HAS_ASYNC_TX_FIND_CHANNEL
	select ASYNC_TX_ENABLE_CHANNEL_SWITCH
	help
	  Enable support for the AMCC PPC440SPe RAID engines.

config AT_HDMAC
	tristate "Atmel AHB DMA support"
	depends on ARCH_AT91
	select DMA_ENGINE
	help
	  Support the Atmel AHB DMA controller.

config AT_XDMAC
	tristate "Atmel XDMA support"
	depends on ARCH_AT91
	select DMA_ENGINE
	help
	  Support the Atmel XDMA controller.

config AXI_DMAC
	tristate "Analog Devices AXI-DMAC DMA support"
	depends on MICROBLAZE || NIOS2 || ARCH_ZYNQ || ARCH_SOCFPGA || COMPILE_TEST
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Enable support for the Analog Devices AXI-DMAC peripheral. This DMA
	  controller is often used in Analog Device's reference designs for FPGA
	  platforms.

config COH901318
	bool "ST-Ericsson COH901318 DMA support"
	select DMA_ENGINE
	depends on ARCH_U300 || COMPILE_TEST
	help
	  Enable support for ST-Ericsson COH 901 318 DMA.

config DMA_BCM2835
	tristate "BCM2835 DMA engine support"
	depends on ARCH_BCM2835
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS

config DMA_JZ4740
	tristate "JZ4740 DMA support"
	depends on MACH_JZ4740 || COMPILE_TEST
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS

config DMA_JZ4780
	tristate "JZ4780 DMA support"
	depends on MACH_JZ4780 || COMPILE_TEST
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  This selects support for the DMA controller in Ingenic JZ4780 SoCs.
	  If you have a board based on such a SoC and wish to use DMA for
	  devices which can use the DMA controller, say Y or M here.

config DMA_OMAP
	tristate "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)

config DMA_SA11X0
	tristate "SA-11x0 DMA support"
	depends on ARCH_SA1100 || COMPILE_TEST
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Support the DMA engine found on Intel StrongARM SA-1100 and
	  SA-1110 SoCs.  This DMA engine can only be used with on-chip
	  devices.

config DMA_SUN4I
	tristate "Allwinner A10 DMA SoCs support"
	depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I
	default (MACH_SUN4I || MACH_SUN5I || MACH_SUN7I)
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Enable support for the DMA controller present in the sun4i,
	  sun5i and sun7i Allwinner ARM SoCs.

config DMA_SUN6I
	tristate "Allwinner A31 SoCs DMA support"
	depends on MACH_SUN6I || MACH_SUN8I || COMPILE_TEST
	depends on RESET_CONTROLLER
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Support for the DMA engine first found in Allwinner A31 SoCs.

config EP93XX_DMA
	bool "Cirrus Logic EP93xx DMA support"
	depends on ARCH_EP93XX || COMPILE_TEST
	select DMA_ENGINE
	help
	  Enable support for the Cirrus Logic EP93xx M2P/M2M DMA controller.

config FSL_DMA
	tristate "Freescale Elo series DMA support"
	depends on FSL_SOC
	select DMA_ENGINE
	select ASYNC_TX_ENABLE_CHANNEL_SWITCH
	---help---
	  Enable support for the Freescale Elo series DMA controllers.
	  The Elo is the DMA controller on some mpc82xx and mpc83xx parts, the
	  EloPlus is on mpc85xx and mpc86xx and Pxxx parts, and the Elo3 is on
	  some Txxx and Bxxx parts.

config FSL_EDMA
	tristate "Freescale eDMA engine support"
	depends on OF
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Support the Freescale eDMA engine with programmable channel
	  multiplexing capability for DMA request sources(slot).
	  This module can be found on Freescale Vybrid and LS-1 SoCs.

config FSL_RAID
        tristate "Freescale RAID engine Support"
        depends on FSL_SOC && !ASYNC_TX_ENABLE_CHANNEL_SWITCH
        select DMA_ENGINE
        select DMA_ENGINE_RAID
        ---help---
          Enable support for Freescale RAID Engine. RAID Engine is
          available on some QorIQ SoCs (like P5020/P5040). It has
          the capability to offload memcpy, xor and pq computation
	  for raid5/6.

config IMG_MDC_DMA
	tristate "IMG MDC support"
	depends on MIPS || COMPILE_TEST
	depends on MFD_SYSCON
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Enable support for the IMG multi-threaded DMA controller (MDC).

config IMX_DMA
	tristate "i.MX DMA support"
	depends on ARCH_MXC
	select DMA_ENGINE
	help
	  Support the i.MX DMA engine. This engine is integrated into
	  Freescale i.MX1/21/27 chips.

config IMX_SDMA
	tristate "i.MX SDMA support"
	depends on ARCH_MXC
	select DMA_ENGINE
	help
	  Support the i.MX SDMA engine. This engine is integrated into
	  Freescale i.MX25/31/35/51/53/6 chips.

config INTEL_IDMA64
	tristate "Intel integrated DMA 64-bit support"
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Enable DMA support for Intel Low Power Subsystem such as found on
	  Intel Skylake PCH.

config INTEL_IOATDMA
	tristate "Intel I/OAT DMA support"
	depends on PCI && X86_64
	select DMA_ENGINE
	select DMA_ENGINE_RAID
	select DCA
	help
	  Enable support for the Intel(R) I/OAT DMA engine present
	  in recent Intel Xeon chipsets.

	  Say Y here if you have such a chipset.

	  If unsure, say N.

config INTEL_IOP_ADMA
	tristate "Intel IOP ADMA support"
	depends on ARCH_IOP32X || ARCH_IOP33X || ARCH_IOP13XX
	select DMA_ENGINE
	select ASYNC_TX_ENABLE_CHANNEL_SWITCH
	help
	  Enable support for the Intel(R) IOP Series RAID engines.

config INTEL_MIC_X100_DMA
	tristate "Intel MIC X100 DMA Driver"
	depends on 64BIT && X86 && INTEL_MIC_BUS
	select DMA_ENGINE
	help
	  This enables DMA support for the Intel Many Integrated Core
	  (MIC) family of PCIe form factor coprocessor X100 devices that
	  run a 64 bit Linux OS. This driver will be used by both MIC
	  host and card drivers.

	  If you are building host kernel with a MIC device or a card
	  kernel for a MIC device, then say M (recommended) or Y, else
	  say N. If unsure say N.

	  More information about the Intel MIC family as well as the Linux
	  OS and tools for MIC to use with this driver are available from
	  <http://software.intel.com/en-us/mic-developer>.

config K3_DMA
	tristate "Hisilicon K3 DMA support"
	depends on ARCH_HI3xxx || ARCH_HISI || COMPILE_TEST
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Support the DMA engine for Hisilicon K3 platform
	  devices.

config LPC18XX_DMAMUX
	bool "NXP LPC18xx/43xx DMA MUX for PL080"
	depends on ARCH_LPC18XX || COMPILE_TEST
	depends on OF && AMBA_PL08X
	select MFD_SYSCON
	help
	  Enable support for DMA on NXP LPC18xx/43xx platforms
	  with PL080 and multiplexed DMA request lines.

config MMP_PDMA
	bool "MMP PDMA support"
	depends on ARCH_MMP || ARCH_PXA || COMPILE_TEST
	select DMA_ENGINE
	help
	  Support the MMP PDMA engine for PXA and MMP platform.

config MMP_TDMA
	bool "MMP Two-Channel DMA support"
	depends on ARCH_MMP || COMPILE_TEST
	select DMA_ENGINE
	select MMP_SRAM if ARCH_MMP
	help
	  Support the MMP Two-Channel DMA engine.
	  This engine used for MMP Audio DMA and pxa910 SQU.
	  It needs sram driver under mach-mmp.

config MOXART_DMA
	tristate "MOXART DMA support"
	depends on ARCH_MOXART
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Enable support for the MOXA ART SoC DMA controller.
 
	  Say Y here if you enabled MMP ADMA, otherwise say N.

config MPC512X_DMA
	tristate "Freescale MPC512x built-in DMA engine support"
	depends on PPC_MPC512x || PPC_MPC831x
	select DMA_ENGINE
	---help---
	  Enable support for the Freescale MPC512x built-in DMA engine.

config MV_XOR
	bool "Marvell XOR engine support"
	depends on PLAT_ORION || ARCH_MVEBU || COMPILE_TEST
	select DMA_ENGINE
	select DMA_ENGINE_RAID
	select ASYNC_TX_ENABLE_CHANNEL_SWITCH
	---help---
	  Enable support for the Marvell XOR engine.

config MV_XOR_V2
	bool "Marvell XOR engine version 2 support "
	depends on ARM64
	select DMA_ENGINE
	select DMA_ENGINE_RAID
	select ASYNC_TX_ENABLE_CHANNEL_SWITCH
	select GENERIC_MSI_IRQ_DOMAIN
	---help---
	  Enable support for the Marvell version 2 XOR engine.

	  This engine provides acceleration for copy, XOR and RAID6
	  operations, and is available on Marvell Armada 7K and 8K
	  platforms.

config MXS_DMA
	bool "MXS DMA support"
	depends on SOC_IMX23 || SOC_IMX28 || SOC_IMX6Q || SOC_IMX6UL
	select STMP_DEVICE
	select DMA_ENGINE
	help
	  Support the MXS DMA engine. This engine including APBH-DMA
	  and APBX-DMA is integrated into Freescale
	  i.MX23/28/MX6Q/MX6DL/MX6UL chips.

config MX3_IPU
	bool "MX3x Image Processing Unit support"
	depends on ARCH_MXC
	select DMA_ENGINE
	default y
	help
	  If you plan to use the Image Processing unit in the i.MX3x, say
	  Y here. If unsure, select Y.

config MX3_IPU_IRQS
	int "Number of dynamically mapped interrupts for IPU"
	depends on MX3_IPU
	range 2 137
	default 4
	help
	  Out of 137 interrupt sources on i.MX31 IPU only very few are used.
	  To avoid bloating the irq_desc[] array we allocate a sufficient
	  number of IRQ slots and map them dynamically to specific sources.

config NBPFAXI_DMA
	tristate "Renesas Type-AXI NBPF DMA support"
	select DMA_ENGINE
	depends on ARM || COMPILE_TEST
	help
	  Support for "Type-AXI" NBPF DMA IPs from Renesas

config PCH_DMA
	tristate "Intel EG20T PCH / LAPIS Semicon IOH(ML7213/ML7223/ML7831) DMA"
	depends on PCI && (X86_32 || COMPILE_TEST)
	select DMA_ENGINE
	help
	  Enable support for Intel EG20T PCH DMA engine.

	  This driver also can be used for LAPIS Semiconductor IOH(Input/
	  Output Hub), ML7213, ML7223 and ML7831.
	  ML7213 IOH is for IVI(In-Vehicle Infotainment) use, ML7223 IOH is
	  for MP(Media Phone) use and ML7831 IOH is for general purpose use.
	  ML7213/ML7223/ML7831 is companion chip for Intel Atom E6xx series.
	  ML7213/ML7223/ML7831 is completely compatible for Intel EG20T PCH.

config PL330_DMA
	tristate "DMA API Driver for PL330"
	select DMA_ENGINE
	depends on ARM_AMBA
	help
	  Select if your platform has one or more PL330 DMACs.
	  You need to provide platform specific settings via
	  platform_data for a dma-pl330 device.

config PXA_DMA
	bool "PXA DMA support"
	depends on (ARCH_MMP || ARCH_PXA)
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Support the DMA engine for PXA. It is also compatible with MMP PDMA
	  platform. The internal DMA IP of all PXA variants is supported, with
	  16 to 32 channels for peripheral to memory or memory to memory
	  transfers.

config SIRF_DMA
	tristate "CSR SiRFprimaII/SiRFmarco DMA support"
	depends on ARCH_SIRF
	select DMA_ENGINE
	help
	  Enable support for the CSR SiRFprimaII DMA engine.

config STE_DMA40
	bool "ST-Ericsson DMA40 support"
	depends on ARCH_U8500
	select DMA_ENGINE
	help
	  Support for ST-Ericsson DMA40 controller

config STM32_DMA
	bool "STMicroelectronics STM32 DMA support"
	depends on ARCH_STM32 || COMPILE_TEST
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Enable support for the on-chip DMA controller on STMicroelectronics
	  STM32 MCUs.
	  If you have a board based on such a MCU and wish to use DMA say Y or M
	  here.

config S3C24XX_DMAC
	bool "Samsung S3C24XX DMA support"
	depends on ARCH_S3C24XX || COMPILE_TEST
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Support for the Samsung S3C24XX DMA controller driver. The
	  DMA controller is having multiple DMA channels which can be
	  configured for different peripherals like audio, UART, SPI.
	  The DMA controller can transfer data from memory to peripheral,
	  periphal to memory, periphal to periphal and memory to memory.

config TXX9_DMAC
	tristate "Toshiba TXx9 SoC DMA support"
	depends on MACH_TX49XX || MACH_TX39XX
	select DMA_ENGINE
	help
	  Support the TXx9 SoC internal DMA controller.  This can be
	  integrated in chips such as the Toshiba TX4927/38/39.

config TEGRA20_APB_DMA
	bool "NVIDIA Tegra20 APB DMA support"
	depends on ARCH_TEGRA
	select DMA_ENGINE
	help
	  Support for the NVIDIA Tegra20 APB DMA controller driver. The
	  DMA controller is having multiple DMA channel which can be
	  configured for different peripherals like audio, UART, SPI,
	  I2C etc which is in APB bus.
	  This DMA controller transfers data from memory to peripheral fifo
	  or vice versa. It does not support memory to memory data transfer.

config TEGRA210_ADMA
	bool "NVIDIA Tegra210 ADMA support"
	depends on (ARCH_TEGRA_210_SOC || COMPILE_TEST) && PM_CLK
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Support for the NVIDIA Tegra210 ADMA controller driver. The
	  DMA controller has multiple DMA channels and is used to service
	  various audio clients in the Tegra210 audio processing engine
	  (APE). This DMA controller transfers data from memory to
	  peripheral and vice versa. It does not support memory to
	  memory data transfer.

config TIMB_DMA
	tristate "Timberdale FPGA DMA support"
	depends on MFD_TIMBERDALE || COMPILE_TEST
	select DMA_ENGINE
	help
	  Enable support for the Timberdale FPGA DMA engine.

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

config TI_DMA_CROSSBAR
	bool

config TI_EDMA
	bool "TI 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 n
	help
	  Enable support for the TI EDMA controller. This DMA
	  engine is found on TI DaVinci and AM33xx parts.

config XGENE_DMA
	tristate "APM X-Gene DMA support"
	depends on ARCH_XGENE || COMPILE_TEST
	select DMA_ENGINE
	select DMA_ENGINE_RAID
	select ASYNC_TX_ENABLE_CHANNEL_SWITCH
	help
	  Enable support for the APM X-Gene SoC DMA engine.

config XILINX_DMA
	tristate "Xilinx AXI DMAS Engine"
	depends on (ARCH_ZYNQ || MICROBLAZE || ARM64)
	select DMA_ENGINE
	help
	  Enable support for Xilinx AXI VDMA Soft IP.

	  AXI VDMA engine provides high-bandwidth direct memory access
	  between memory and AXI4-Stream video type target
	  peripherals including peripherals which support AXI4-
	  Stream Video Protocol.  It has two stream interfaces/
	  channels, Memory Mapped to Stream (MM2S) and Stream to
	  Memory Mapped (S2MM) for the data transfers.
	  AXI CDMA engine provides high-bandwidth direct memory access
	  between a memory-mapped source address and a memory-mapped
	  destination address.
	  AXI DMA engine provides high-bandwidth one dimensional direct
	  memory access between memory and AXI4-Stream target peripherals.

config XILINX_ZYNQMP_DMA
	tristate "Xilinx ZynqMP DMA Engine"
	depends on (ARCH_ZYNQ || MICROBLAZE || ARM64)
	select DMA_ENGINE
	help
	  Enable support for Xilinx ZynqMP DMA controller.

config ZX_DMA
	tristate "ZTE ZX296702 DMA support"
	depends on ARCH_ZX || COMPILE_TEST
	select DMA_ENGINE
	select DMA_VIRTUAL_CHANNELS
	help
	  Support the DMA engine for ZTE ZX296702 platform devices.


# driver files
source "drivers/dma/bestcomm/Kconfig"

source "drivers/dma/qcom/Kconfig"

source "drivers/dma/dw/Kconfig"

source "drivers/dma/hsu/Kconfig"

source "drivers/dma/sh/Kconfig"

# clients
comment "DMA Clients"
	depends on DMA_ENGINE

config ASYNC_TX_DMA
	bool "Async_tx: Offload support for the async_tx api"
	depends on DMA_ENGINE
	help
	  This allows the async_tx api to take advantage of offload engines for
	  memcpy, memset, xor, and raid6 p+q operations.  If your platform has
	  a dma engine that can perform raid operations and you have enabled
	  MD_RAID456 say Y.

	  If unsure, say N.

config DMATEST
	tristate "DMA Test client"
	depends on DMA_ENGINE
	help
	  Simple DMA test client. Say N unless you're debugging a
	  DMA Device driver.

config DMA_ENGINE_RAID
	bool

endif
