# Copyright (c) 2021, STMicroelectronics
# SPDX-License-Identifier: Apache-2.0

description: |
  STM32 DMA controller (V2bis) for the stm32F0, stm32F1 and stm32L1 soc families

  This DMA controller includes several channels with different requests.
  All the requests ar ORed before entering the DMA, so that only one request
  must be enabled at a time.
  DMA clients connected to the STM32 DMA controller must use the format
  described in the dma.txt file, using a 2-cell specifier for each
  channel: a phandle to the DMA controller plus the following four integer cells:
    1. channel: the dma stream from 1 to <dma-requests>
    2. channel-config: A 32bit mask specifying the DMA channel configuration
    A name custom DMA flags for channel configuration is used
    which is device dependent see stm32_dma.h:
      -bit 5 : DMA  cyclic mode config
                0x0: STM32_DMA_MODE_NORMAL
                0x1: STM32_DMA_MODE_CYCLIC
      -bit 6-7 : Direction (see dma.h)
                0x0: STM32_DMA_MEMORY_TO_MEMORY: MEM to MEM
                0x1: STM32_DMA_MEMORY_TO_PERIPH: MEM to PERIPH
                0x2: STM32_DMA_PERIPH_TO_MEMORY: PERIPH to MEM
                0x3: reserved for PERIPH to PERIPH
      -bit 9 : Peripheral Increment Address
               0x0: STM32_DMA_PERIPH_NO_INC: no address increment between transfers
               0x1: STM32_DMA_PERIPH_INC: increment address between transfers
      -bit 10 : Memory Increment Address
               0x0: STM32_DMA_MEM_NO_INC: no address increment between transfers
               0x1: STM32_DMA_MEM_INC: increment address between transfers
      -bit 11-12 : Peripheral data size
               0x0: STM32_DMA_PERIPH_8BITS: Byte (8 bits)
               0x1: STM32_DMA_PERIPH_16BITS: Half-word (16 bits)
               0x2: STM32_DMA_PERIPH_32BITS: Word (32 bits)
               0x3: reserved
      -bit 13-14 : Memory data size
               0x0: STM32_DMA_MEM_8BITS: Byte (8 bits)
               0x1: STM32_DMA_MEM_16BITS: Half-word (16 bits)
               0x2: STM32_DMA_MEM_32BITS: Word (32 bits)
               0x3: reserved
      -bit 15: Reserved
      -bit 16-17 : Priority level
               0x0: STM32_DMA_PRIORITY_LOW: low
               0x1: STM32_DMA_PRIORITY_MEDIUM: medium
               0x2: STM32_DMA_PRIORITY_HIGH: high
               0x3: STM32_DMA_PRIORITY_VERY_HIGH: very high

  Example of dma usual combination for peripheral transfer
       #define STM32_DMA_PERIPH_TX	(STM32_DMA_MEMORY_TO_PERIPH | STM32_DMA_MEM_INC)
       #define STM32_DMA_PERIPH_RX	(STM32_DMA_PERIPH_TO_MEMORY | STM32_DMA_MEM_INC)

  Example of dma node for stm32f103
     dma1: dma-controller@40020400 {
         compatible = "st,stm32-dma-v2bis";
         ...
         dma-requests = <7>;
         status = "disabled";
        };

  For the client part, example for stm32f103 on DMA1 instance
    Tx using channel 3
    Rx using channel 2
    spi1 {
     compatible = "st,stm32-spi";
     dmas = <&dma1 3 (STM32_DMA_PERIPH_TX | STM32_DMA_PRIORITY_HIGH)>,
            <&dma1 2 (STM32_DMA_PERIPH_RX | STM32_DMA_PRIORITY_HIGH)>;
     dma-names = "tx", "rx";
    };

compatible: "st,stm32-dma-v2bis"

include:
  - name: st,stm32-dma.yaml

properties:
  "#dma-cells":
    const: 2

# Parameter syntax of stm32 follows the dma client dts syntax
# in the Linux kernel declared in
# https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/plain/Bindings/dma/st,stm32-dma.yaml

dma-cells:
  - channel
  - channel-config
