# DMA configuration options

# Copyright (c) 2016 Intel Corporation
# Copyright (c) 2019 Song Qiang <songqiang1304521@gmail.com>
# Copyright (c) 2023 Jeroen van Dooren, Nobleo Technology
# SPDX-License-Identifier: Apache-2.0

config DMA_STM32
	bool "STM32 DMA driver"
	select USE_STM32_LL_DMA
	default y
	depends on DT_HAS_ST_STM32_DMA_V1_ENABLED \
		|| DT_HAS_ST_STM32_DMA_V2_ENABLED \
		|| DT_HAS_ST_STM32_DMA_V2BIS_ENABLED \
		|| DT_HAS_ST_STM32_BDMA_ENABLED
	help
	  Driver for STM32 DMA V1, V2, V2bis and BDMA types.

config DMA_STM32U5
	bool "STM32U5 serie DMA driver"
	select USE_STM32_LL_DMA
	default y
	depends on DT_HAS_ST_STM32U5_DMA_ENABLED
	help
	  Enable DMA support mainly for stm32U5 family.
	  It differs from the DMA driver due to the GPDMA peripheral.

if DMA_STM32

config DMA_STM32_V1
	bool
	default y
	depends on DT_HAS_ST_STM32_DMA_V1_ENABLED
	help
	  Enable DMA V1 support.

config DMA_STM32_V2
	bool
	default y
	depends on DT_HAS_ST_STM32_DMA_V2_ENABLED || DT_HAS_ST_STM32_DMA_V2BIS_ENABLED
	help
	  Enable DMA V2 or DMA V2bis support. With the versions V2 of DMA, the
	  peripheral request must be specified in the dma slot of the dma cell
	  With the versions V2 bis of DMA, the peripheral request (slot) is not
	  a parameter of the dma-cell.

config DMAMUX_STM32
	bool
	default y
	depends on DT_HAS_ST_STM32_DMAMUX_ENABLED
	help
	  Enable DMAMUX support.

config DMA_STM32_SHARED_IRQS
	bool
	default y
	depends on SOC_SERIES_STM32C0X || SOC_SERIES_STM32F0X || \
		   SOC_SERIES_STM32G0X || SOC_SERIES_STM32L0X || \
		   SOC_SERIES_STM32WB0X
	help
	  Enable shared IRQ support on devices where channels share 1 IRQ.

config DMA_STM32_BDMA
	bool "STM32 BDMA driver"
	default y
	select USE_STM32_LL_BDMA
	depends on DT_HAS_ST_STM32_BDMA_ENABLED
	help
	  BDMA driver for STM32H7 series SoCs.

config DMAMUX_STM32_INIT_PRIORITY
	int "STM32 DMAMUX init priority"
	depends on DT_HAS_ST_STM32_DMAMUX_ENABLED
	default 41
	help
	  DMAMUX driver device must be init'd after the DMA (CONFIG_DMA_INIT_PRIORITY)
	  DMAMUX driver device initialization priority is greater than DMA one's

endif # DMA_STM32
